powershell
docker rmi nginx
docker pull nginx
docker rm -f nginx
#先创建一个简易的nginx容器(后面会删),然后通过 docker cp命令把容器里面的nginx配置反向拷贝到宿主主机上。
docker run --name nginx -p 80:80 -d nginx
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /mountdata/nginx/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /mountdata/nginx
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /mountdata/nginx
# 将容器中log文件夹复制到宿主机
docker cp nginx:/var/log/nginx /mountdata/nginx/log
#自定义测试项目的conf文件
#"/mountdata/nginx/conf.d/hello-nginx.conf"
server {
listen 8080;
server_name 192.168.200.131;
location /hello-nginx {
root /usr/share/nginx/html;
index index.html;
}
}
#"/mountdata/nginx/conf.d/hello-proxy.conf"
server {
listen 9944;
server_name 192.168.200.131;
location / {
proxy_pass http://www.atguigu.com;
}
}
#【问题】root为什么是/usr/share/nginx/html,而不是/mountdata/nginx/html?
#【原因】/usr/share/nginx/html指向了Nginx容器内部的路径,而这个路径已经通过Docker的卷挂载映射到了宿主机的/mountdata/nginx/html目录
# 删除正在运行的nginx容器
docker rm -f nginx
# 80是默认端口(即"Welcome to nginx!"那个页面),8080是测试项目端口,部署几个项目就要写几个-p端口
docker run -d \
--name=nginx \
-v /mountdata/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /mountdata/nginx/html:/usr/share/nginx/html \
-v /mountdata/nginx/conf.d/:/etc/nginx/conf.d \
-v /mountdata/nginx/log:/var/log/nginx \
--restart=always \
--network=hmall \
-p 80:80 \
-p 8080:8080 \
-p 9944:9944 \
nginx:latest
# 【注释】
# -d 表示以后台守护进程形式运行容器。
# --name=nginx 为容器指定了一个名称
# -v 选项用于挂载宿主机目录到容器内的对应目录,分别挂载了Nginx的配置文件、HTML文件、conf.d目录以及日志目录,这有助于容器内外数据的共享和持久化。
# --restart=always 确保容器随Docker服务启动而自动启动。
# --network=hmall 将容器连接到名为hmall的网络。
# -p 80:80 映射容器的80端口到宿主机的80端口,用于默认的Nginx欢迎页面。
# -p 8080:8080 映射容器的8080端口到宿主机的8080端口,用于自定义的测试项目。
# -p 9944:9944 同上
# 重启容器
docker restart nginx
访问http://192.168.200.131:80,成功!