文章目录
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
来简化部署过程。