文章目錄
- docker(學習筆記第一課) 使用nginx +https + wordpress
- 學習內容:
- 1. 整體架構
- 1.1 在`aws ec2`的整體架構
- 1.2 不懂都可以問`AI`
- 2. 構建詳細
- 2.1 構建`ec2`
- 2.2 安裝`docker`
- 2.3 創建一個`docker`的內部`network`
- 2.4 創建`wordpress`使用的`mysql`數據庫
- 2.5 創建兩個`wordpress`的`docker process`
- 2.6 創建SSL證書
- 2.7 創建Nginx配置文件
- 2.7.1 創建`nginx.conf`
- 2.7.2 創建Nginx Docker的`image`
- 2.7.3 創建Nginx Docker容器
- 3. 訪問`nginx`的網頁
- 4. 操作`docker`的有用命令
- 4.1 訪問`docker`的`log`
- 4.2 進入`docker`的進程`process`
- 4.3 `docker`的內部`directory`映射宿主機的`directory`(`mount`)
- 4.4 停止所有容器
- 4.5 啟動所有容器
- 4.6 刪除所有容器(數據會保留在卷中)
- 4.7 刪除所有數據卷
- 4.8 `docker compose`
docker(學習筆記第一課) 使用nginx +https + wordpress
- 在
aws
的ec2
上安裝docker
- 部署兩個
wordpress
的docker
- 做成自定義證書
certificate
學習內容:
- 使用
docker
部署wordpress
- 生成
certificate
- 使用
docker
部署nginx
1. 整體架構
1.1 在aws ec2
的整體架構
這里采用aws ec2
主要是國內的網絡上docker
的鏡像都很少能連接上,所以才使用aws ec2
。
1.2 不懂都可以問AI
在學習一些新概念的時候可以多問問deepseek。
為了先能夠清晰了解docker
,這里特意告訴AI
,先不使用docker compose
。即使我說錯了,AI
也能理解意思!
這里,AI
給出了一個完整的例子,并且可以使用的具體命令。
2. 構建詳細
2.1 構建ec2
這里在aws
的public subnet
里面構建ec2
,ip address
為13.115.188.112
2.2 安裝docker
sudo yum install docker
sudo systemctl start docker
2.3 創建一個docker
的內部network
docker network create wordpress-network
2.4 創建wordpress
使用的mysql
數據庫
docker run -d \--name mysql \--network wordpress-network \-e MYSQL_ROOT_PASSWORD=rootpassword \-e MYSQL_DATABASE=wordpress \-e MYSQL_USER=wordpress \-e MYSQL_PASSWORD=wordpress \-v mysql_data:/var/lib/mysql \mysql:5.7
-e
這里設定docker
啟動的環境變量,包括用戶名和密碼的建立,這里設定好了之后后面的wordpress
會使用。-v
設定將docker
內部的數據路徑設定成docker volume
,這里的docker volumn
會對宿主機的local directory
進行mount
。通過這樣,宿主機的local directory
就會映射到docker
內部的路徑。--network
,這里執行docker
內部的network
,以便相關的docker ps
進程實例能夠通過一個網絡互相訪問。--name
是指定docker process
的一個識別子,能夠唯一定位一個docker process
。
2.5 創建兩個wordpress
的docker process
第一個wordpress
。
docker run -d \--name wordpress1 \--network wordpress-network \-e WORDPRESS_DB_HOST=mysql \-e WORDPRESS_DB_USER=wordpress \-e WORDPRESS_DB_PASSWORD=wordpress \-e WORDPRESS_DB_NAME=wordpress \-v wordpress_data1:/var/www/html \wordpress:latest
第二個wordpress
。
docker run -d \--name wordpress2 \--network wordpress-network \-e WORDPRESS_DB_HOST=mysql \-e WORDPRESS_DB_USER=wordpress \-e WORDPRESS_DB_PASSWORD=wordpress \-e WORDPRESS_DB_NAME=wordpress \-v wordpress_data2:/var/www/html \wordpress:latest
這里,看出wordpress
都使用wordpress-network
。
2.6 創建SSL證書
mkdir -p nginx/ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \-keyout nginx/ssl/private.key \-out nginx/ssl/certificate.crt
這里生成以下兩個文件:(/home/ec2-user/nginx/ssl)
- certificate.crt
- private.key
2.7 創建Nginx配置文件
2.7.1 創建nginx.conf
在/home/ec2-user
上創建nginx.conf
,這里看到upstream
這里,指向wordpress1
和wordpress2
的80
端口。
upstream wordpress {server wordpress1:80;server wordpress2:80;
}server {listen 443 ssl;server_name localhost;ssl_certificate /etc/nginx/ssl/certificate.crt;ssl_certificate_key /etc/nginx/ssl/private.key;location / {proxy_pass http://wordpress;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}server {listen 80;server_name localhost;return 301 https://$host$request_uri;
}
2.7.2 創建Nginx Docker的image
在/home/ec2-user/
上執行下面的命令,創建nginx docker
。
mkdir -p temp-nginx
cp nginx.conf temp-nginx/
cp -r nginx/ssl temp-nginx/
# 創建Dockerfile
echo "FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY ssl/ /etc/nginx/ssl/" > temp-nginx/Dockerfile
docker build -t custom-nginx temp-nginx/
# 清理臨時文件
rm -rf temp-nginx
2.7.3 創建Nginx Docker容器
docker run -d \--name nginx \--network wordpress-network \-p 80:80 \-p 443:443 \custom-nginx
3. 訪問nginx
的網頁
這里由于是自定義的ssl
證書,所以顯示是不安全的。如果是本番環境,這里會做成正式的證書。
4. 操作docker
的有用命令
4.1 訪問docker
的log
docker logs -f nginx
其中-f
表示一直動態監視log
,和tail -f log
的linux
命令很像。
4.2 進入docker
的進程process
想要進入docker
所在的OS
也是特別方便。
sudo docker exec -it wordpress1 bash
4.3 docker
的內部directory
映射宿主機的directory
(mount
)
docker
內容的路徑指向volume
,這些volume
實際上是宿主機的directory
。即使docker process
,這些volume也不會被刪除
,啟動其他docker
進行的時候,還能繼續利用。
sudo docker volume inspect wordpress_data2
4.4 停止所有容器
docker stop nginx wordpress1 wordpress2 mysql
4.5 啟動所有容器
docker start mysql wordpress1 wordpress2 nginx
4.6 刪除所有容器(數據會保留在卷中)
docker rm nginx wordpress1 wordpress2 mysql
4.7 刪除所有數據卷
docker volume rm mysql_data wordpress_data1 wordpress_data2
4.8 docker compose
可以進一步學習Docker Compose
來簡化部署過程。