# 12 常用容器部署-Nginx

下面介绍一下常用容器的部署。可以先简单了解下,用到再来详细查看。

在 Docker 中部署 Nginx,并通过挂载方式将 Nginx 的配置文件和站点目录挂载到宿主机上。

# 12.1 下载镜像

docker pull nginx
1

默认下载的就是最新的镜像文件。

# 12.2 创建挂载目录

在宿主机上创建挂载目录,自己自定义放在哪里。

# 配置文件目录
mkdir -p /home/doubi/docker_dir/nginx/conf
# 站点目录
mkdir -p /home/doubi/docker_dir/nginx/html
# nginx日志目录
mkdir -p /home/doubi/docker_dir/nginx/log

# 递归赋予文件夹读写执行权限
chmod -R 777 /home/doubi/docker_dir/nginx
1
2
3
4
5
6
7
8
9

# 12.3 复制配置文件

如果我们此时使用如下指令直接运行容器会存在一个问题。

docker run -d -p 8080:8080 --name nginx --restart=always \
	-v /home/doubi/docker_dir/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
	-v /home/doubi/docker_dir/nginx/conf/conf.d:/etc/nginx/conf.d \
	-v /home/doubi/docker_dir/nginx/log:/var/log/nginx \
	-v /home/doubi/docker_dir/nginx/html:/usr/share/nginx/html \
	nginx
1
2
3
4
5
6

宿主机不存在不存在 nginx.conf 文件,会把 /home/doubi/docker_dir/nginx/conf/nginx.conf 当成文件夹来处理,那么把宿主机的 /home/doubi/docker_dir/nginx/conf/nginx.conf 文件夹映射到容器的 /etc/nginx/nginx.conf 就会报错。


怎么处理呢?

我们首先通过 nginx 镜像运行一个简单的容器,将简单的容器中的配置文件复制到宿主机中,然后删除简单的容器,重新使用上面的命令运行我们的容器。

运行一个简单的容器

# 启动容器
docker run --name nginx -p 8080:80 -d nginx
1
2

复制配置文件到宿主机

# 将容器中nginx.conf文件复制到宿主机的挂载目录中
docker cp nginx:/etc/nginx/nginx.conf /home/doubi/docker_dir/nginx/conf/nginx.conf
# 将容器中conf.d文件夹下内容复制到宿主机的挂载目录中
docker cp nginx:/etc/nginx/conf.d /home/doubi/docker_dir/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机的挂载目录中,后面没有html
docker cp nginx:/usr/share/nginx/html /home/doubi/docker_dir/nginx
1
2
3
4
5
6

删除简单的容器

docker rm -f nginx
1

# 12.4 运行容器

现在有配置文件了,可以运行容器,并进行挂载了:

docker run -d -p 8080:80 --name nginx --restart=always \
	-v /home/doubi/docker_dir/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
	-v /home/doubi/docker_dir/nginx/conf/conf.d:/etc/nginx/conf.d \
	-v /home/doubi/docker_dir/nginx/log:/var/log/nginx \
	-v /home/doubi/docker_dir/nginx/html:/usr/share/nginx/html \
	nginx
1
2
3
4
5
6

参数说明:

  • -d:后台运行
  • -p: 端口映射(宿主机端口:容器端口),nginx配置文件中默认使用的是80端口,所以容器的端口使用的是80,除非修改配置文件。
  • --name 创建容器的名称
  • --restart=always 容器停止后自动重启
  • -v 目录挂载(宿主机目录:容器目录)
  • 最后的nginx表示镜像的名称

# 12.5 访问首页

现在通过 http://IP:8080 就可以访问了。

# 12.6 部署vue项目

首先将 vue 项目中打包生成 dist 文件夹中的内容,全部拷贝到与nginx的html相映射的文件夹中,然后重启docker内的 nginx。

或者将 dist 解压到 html 文件夹,然后修改 conf.d 文件夹中的 default.config 文件,修改根目录映射 html 下的 dist。

location / {
    root   /usr/share/nginx/html/dist;
    try_files  $uri $uri/ /index.html;
}
1
2
3
4