如何在Docker中部署nginx,并挂载本地主机的配置和访问目录到nginx容器上

1,222 阅读3分钟

本文完成了在docker中部署nginx,并将本地主机的nginx配置文件、日志目录、静态资源目录挂载到容器的对应目录上,可在本地主机上完成nginx配置、日志查看等操作。

一、拉取nginx镜像

docker pull nginx # 拉取最新版本的镜像
docker pull nginx:版本 # 如果要拉取某一版本的,使用此命令

二、准备配置文件

在主机目录下创建文件,然后将这些文件挂载到nginx容器上,用于配置nginx、查看访问日志和存放静态资源,而不是进入容器中去配置nginx、查看日志等操作。另外一个优点是,如果容器被删除,这些文件不会被删除,可以重复使用。

# 启动一个容器
docker run -d --name nginxapp nginx
# 查看容器是否启动成功
docker container ls
# 在当前目录下创建目录 conf,我的当前目录是/root/nginx
mkdir conf 
# 拷贝容器内nginx默认配置文件到当前目录下
docker cp nginxapp:/etc/nginx/nginx.conf $PWD/conf
docker cp nginxapp:/etc/nginx/nginx.conf.d $PWD/conf
# 完成拷贝后,停止删除容器,重启一个容器关联配置文件
docker stop nginxapp # 停止容器
docker rm nginxapp # 删除容器
# 创建html目录 存放静态资源
mkdir html
# 创建logs目录 保存访问日志
mkdir logs

三 、创建nginx容器

通过以下命令创建nginx容器

docker run -d -p 8080:80  \
 --name nginxapp \
 -v /root/nginx/html:/usr/share/nginx/html \
 -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
 -v /root/nginx/conf/conf.d:/etc/nginx/conf.d \
 -v /root/nginx/logs:/var/log/nginx \
 nginx

-d 表示容器在后台运行,防止退出容器后,容器被停止或删除

-p 8080:80 映射本机8080端口到容器的80端口

--name nginxapp 设置容器名称为nginxapp

-v 将本地文件挂载到容器的指定目录

四、修改nginx配置

由于默认的nginx配置文件,不能满足访问路由要求,因此需要重新配置nginx文件

cd /root/nginx/conf/ # 进入nginx配置目录
vim nginx.conf # 打开配置文件

修改配置文件如下:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
	server {
		listen        80;
		server_name  localhost;
		location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
		location /testApp/ { # 映射访问url,到静态资源文件下
			alias   /usr/share/nginx/html/testApp;
			index  index.html index.htm;
		}
	}
}

配置完成后需要重启nginx容器

docker stop nginxapp # 先停止nginxapp容器
docker start nginxapp # 在启动nginxapp容器

五、访问测试

# 在html中新建testApp目录
mkdir testApp
# 在testApp目录下新建index.html
cd testApp
# 通过vim编辑器,编辑index.html 这里内容为 welcome my testApp
vim index.html
# 编辑完成后,退出编辑器

打开浏览器输入链接http://公网或本地ip:8080/testApp/index.html

显示如下内容welcome my testApp,则部署成功~

如果是vue或者react项目,可以将打包后的文件放在html目录下,然后在nginx.conf配置访问的url映射。