docker安装使用nginx镜像(CentOS环境)

docker安装使用nginx镜像

  • 安装docker
  • 安装nginx镜像
    • 获取镜像
    • 查看镜像
    • 启动容器
    • 创建新容器用于部署
      • 创建挂载目录
      • 移除旧容器
      • 创建新容器
  • 部署应用
  • 参考文章

今天自己摸索了怎么用docker部署web应用,权作记录,关于docker和nginx的正确使用建议参考官方文档。

安装docker

centos环境下可以使用yum下载和安装docker,参考官网文档,里面还有其他系统的,步骤非常详细,而且永远是最新最正确的。

安装nginx镜像

获取镜像

安装docker之后,执行命令

docker pull nginx

拉取nginx官方镜像。

查看镜像

执行命令

docker images

查看已安装的镜像,可以看到nginx
在这里插入图片描述

启动容器

执行命令

docker run -d --name nginx -p 8888:80 nginx

使用nginx镜像启动一个容器实例

  • run命令:创建一个新的容器并运行
  • -d:后台运行
  • –name nginx:–name选项为容器命名为nginx
  • -p 8888:80:端口映射,(实际端口):(容器内部端口),通过本机的实际端口访问容器内部端口,即这样设置后可以通过本机的8888端口访问我们创建的这个nginx容器的80端口
  • nginx:镜像名

用命令

docker ps

查看运行中的容器
在这里插入图片描述

创建新容器用于部署

平时将应用部署到nginx上时,需要把前端打好包的dist文件夹放到html文件夹,然后修改nginx.conf配置文件配置代理等等,这是最基本的两个需求。容器化后的nginx怎么修改这两个地方呢?docker提供了 -v 选项,可以将容器内的目录挂载到本地目录,对本地目录内容的修改就可以反映到容器内。

创建挂载目录

首先,我在/usr/local目录下创建了docker/nginx文件夹放置我的nginx配置。

cd /usr/local
mkdir docker
cd docker
mkdir nginx
cd nginx

然后,我这里使用docker的 cp 命令将上面启动的第一个nginx容器内的nginx.conf复制进来

docker cp nginx:/etc/nginx/nginx.conf nginx.conf
  • nginx:/etc/nginx/nginx.conf :这里nginx是我上面创建的容器名,如果创建容器时没有为容器命名的话可以用命令docker ps查看容器名,或者用容器id代替。冒号后面是文件在容器内的目录

最后,创建html文件夹

mkdir html

现在/usr/local/docker/nginx目录下面是这样的
在这里插入图片描述

移除旧容器

上面旧的容器没用可以删掉了,使用命令

docker stop nginx

将容器停掉,再用命令

docker rm nginx

移除容器

这时输入

docker ps -a

查看所有已创建的容器,发现nginx已经没有了,接下来可以创建一个新的nginx容器了

创建新容器

输入命令

docker run -d --name nginx -p 80:80 \
-v /usr/local/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/docker/nginx/html:/usr/share/nginx/html \
nginx
  • -p 80:80:我这里直接用本地的80端口映射容器的80端口
  • -v /usr/local/docker/nginx/nginx.conf:/etc/nginx/nginx.conf:-v选项挂载本地文件/usr/local/docker/nginx/nginx.conf到容器文件/etc/nginx/nginx.conf,部署时修改本地的nginx.conf配置文件就可以了
  • -v /usr/local/docker/nginx/html:/usr/share/nginx/html:和上面一样,将本地目录挂载到容器目录

命令执行后新的nginx容器就跑起来了,可以用docker ps命令看看状态是否正常,浏览器输入你的ip地址就可以看到熟悉的nginx欢迎页面了。
关于容器内的目录是怎么获取的,我也是看别人的博客的。有日志需求的可以将本地目录挂载到/var/log/nginx,在本地查看nginx日志;无论挂不挂载都可以用docker logs nginx命令查看日志(这里的nginx是容器名或容器id,所有容器都可以用这个命令查看日志)

部署应用

部署应用就和以往一样,在上面创建的nginx.conf里写好后端服务的代理等等,把前端打好的包丢进上面创建的html文件夹就行

附上我的nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
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;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
     
        #    root '/usr/local/nginx/html/dist';
            root   /usr/share/nginx/html/dist;
            #root这里填了容器中的绝对路径
            #我填相对路径如html/dist时
            #容器会去/etc/nginx/html/dist找
            index  index.html index.htm;
        }
        
        location /api {
     
        	#这里是后端的设置,根据你的实际情况写
            rewrite ^/api/(.*)$ /$1 break;
            proxy_pass localhost:8087;
        }
    }
}

配置修改后使用命令

docker kill -s HUP nginx

使配置生效,或者直接重启容器

docker restart nginx

到这里利用docker容器化nginx部署就完成了,输入地址访问你的应用,和非容器方式部署时并没有什么不同。

参考文章

docker入门(利用docker部署web应用)

Get Docker Engine - Community for CentOS

docker构建springboot+vue+nginx

Docker 安装 Nginx

Docker+Nginx部署网站

你可能感兴趣的:(docker)