Docker 启动挂载Nginx并对启动后的容器操作

一、启动并挂载Nginx容器

1. 搜索镜像

docker search nginx

2. 拉取镜像

docker pull nginx:latest

3. 创建要挂载的目录

mkdir -p /home/kevin/project1/nginx/{
    
    conf,logs}

4. 启动临时的Nginx容器【目的是为了获取里面的文件】

docker run -d -P --name nginx1 nginx

5. 从容器nginx1中拷贝nginx的配置文件【最好不用容器名】

# docker cp 容器id:容器内路径 目的主机路径
docker cp nginx1:/etc/nginx/nginx.conf /home/kevin/project1/nginx/conf/nginx.conf
docker cp nginx1:/etc/nginx/conf.d/default.conf /home/kevin/project1/nginx/conf/default.conf
docker cp nginx1:/usr/share/nginx/html /home/kevin/project1/nginx

docker rm -f nginx1

ps:拷贝完后,可以删掉临时的Nginx容器

docker rm -f nginx1

6. 启动容器,并挂载

这里挂载出includ_conf,是为了给nginx创建可以引入的配置文件

注意:启动的nginx中原本不含有includ_conf路径,通过在启动时挂载,容器会自动创建该路径
【在conf/nginx.conf文件中,server下的location中的root里设置,前端页面的文件路径(这个路径一定要挂载)】

docker run -d --restart=always \
--privileged=true \
--name nginx01 \
-p 8081:80 \
-p 8082:8082 \
-v /home/kevin/project1/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/kevin/project1/nginx/includ_conf:/etc/nginx/includ_conf \
-v /home/kevin/project1/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf \
-v /home/kevin/project1/nginx/html:/usr/share/nginx/html \
-v /home/kevin/project1/nginx/logs:/var/log/nginx  \
nginx

解释:这里对外暴露了8081和8082两个端口,但Nginx配置中只有默认的80;8082在Nginx中并未配置,这个是预留给后续启动的项目使用,到时只需要在nginx.conf中配置8082端口即可

7. 判断Nginx是否可用

在服务器上输入命令,查看是否打开欢迎界面
或者在公网上打开页面查看

curl localhost:8081

二、对已经启动的容器进行操作(-p,-v)

重要的事情反复说:对已经启动的容器操作前一定要先停止dokcer

1. 暴露新的端口

查看现在容器

docker inspect nginx01

找到容器的端口情况
(第一幅图:对应当前容器的hostconfig.json;第二幅图:对应当前容器的config.v2.json)
在这里插入图片描述
在这里插入图片描述

1.1 停止docker(一定要先停止dokcer,不然直接修改配置文件不会生效)

systemctl stop docker

1.2 修改这个容器的config.v2.json文件中的端口

配置文件路径

cd /var/lib/docker/containers/容器id全称
vim config.v2.json

在这里插入图片描述

目的:在容器中暴露出8083端口
# 修改前
"ExposedPorts":{
    
    "80/tcp":{
    
    },"8082/tcp":{
    
    }}

# 修改后
"ExposedPorts":{
    
    "80/tcp":{
    
    },"8082/tcp":{
    
    },"8083/tcp":{
    
    }}

1.3 修改这个容器的hostconfig.json文件中的端口

配置文件路径

cd /var/lib/docker/containers/容器id全称
vim hostconfig.json

在这里插入图片描述
前一个数字是容器端口, 后一个是宿主机端口

目的: -v 8083:8083
# 修改前
"PortBindings":{
    
    "80/tcp":[{
    
    "HostIp":"","HostPort":"8081"}],"8082/tcp":[{
    
    "HostIp":"","HostPort":"8082"}]}

# 修改后  添加"8083/tcp":[{"HostIp":"","HostPort":"8083"}]
"PortBindings":{
    
    "80/tcp":[{
    
    "HostIp":"","HostPort":"8081"}],"8082/tcp":[{
    
    "HostIp":"","HostPort":"8082"}],
"8083/tcp":[{
    
    "HostIp":"","HostPort":"8083"}]}

1.4 重启 docker服务

systemctl restart docker

1.5 查看配置项已经修改成功

docker inspect nginx01

2. 挂载一个新的目录

2.1 停止docker(一定要先停止dokcer,不然直接修改配置文件不会生效)

systemctl stop docker

2.2 修改这个容器的config.v2.json文件中的端口

配置文件路径

cd /var/lib/docker/containers/容器id全称
vim config.v2.json

对标有注释的地方,修改自己要挂载的目录就可以

例如:
新挂载的宿主机目录		/home/kevin/project1/nginx/includ_conf_test
新挂载的容器目录		/etc/nginx/includ_conf_test
{
    
    
    ......
	
	"MountPoints": {
    
    
		......,
		"/home/kevin/project1/nginx/includ_conf_test": {
    
    	# 宿主机目录
			"Source": "/home/kevin/project1/nginx/includ_conf_test", # 宿主机目录
			"Destination": "/etc/nginx/includ_conf_test", # 容器目录
			"RW": true,
			"Name": "",
			"Driver": "",
			"Type": "bind",
			"Propagation": "rprivate",
			"Spec": {
    
    
				"Type": "bind",
				"Source": "/home/kevin/project1/nginx/includ_conf_test", # 宿主机目录
				"Target": "/etc/nginx/includ_conf_test"  # 容器目录
			},
			"SkipMountpointCreation": false
		}
	},
	......
}

2.3 修改这个容器的hostconfig.json文件中的端口

配置文件路径

cd /var/lib/docker/containers/容器id全称
vim hostconfig.json

前一个宿主机目录, 后一个是容器目录
把要挂载的目录,照着下面的样式写就可以

{
    
    
	"Binds": [
		......,
		"/home/kevin/project1/nginx/includ_conf_test:/etc/nginx/includ_conf_test"
		# 新挂载宿主机目录:新挂载容器目录
	],
	......
}

2.4 重启 docker服务

systemctl restart docker

2.5 查看配置项已经修改成功

docker inspect nginx01

猜你喜欢

转载自blog.csdn.net/weixin_42516475/article/details/129421207