一、启动并挂载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