docker nginx镜像部署项目

135 阅读1分钟
docker官方文档:docs.docker.com/reference/
查询特定的 nginx 容器连接到哪个网络
# docker inspect <nginx_container_id_or_name> | grep NetworkMode
docker inspect <nginx_container_id_or_name> | grep NetworkMode

安装 docker

# 更新 yum
sudo yum update
# 安装Docker依赖的软件包。运行以下命令安装所需的软件包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加Docker软件源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker CE(社区版)
sudo yum install -y docker-ce
# 启动 docker
sudo systemctl start docker
# docker 开机自启
sudo systemctl enable docker

前期工作:

  • nginx.conf 配置文件建议放在项目下,以此作为镜像内的 /etc/nginx/nginx.conf 的映射文件:
    • 项目文件路径:/root/online/项目名称/.
    • nginx.conf 文件路径:/root/online/nginx.conf

安装 nginx 镜像并启动

# 查询特定的 nginx 容器连接到哪个网络 docker inspect <nginx_container_id_or_name> | grep NetworkMode
docker inspect nginx | grep NetworkMode

# 新增nginx镜像以及映射端口号,挂着文件,并运行
docker run -d \
  --name nginx \
  -p 8001:8001 \
  -p 8002:8002 \
  -p 443:433 \
  -v /root/online:/root/online \
  -v /root/online/nginx.conf:/etc/nginx/nginx.conf \
  -v /var/lib/docker/volumes/acme-certs/_data:/root/certs \
  --network littaro \
  nginx

查看 nginx 镜像是否成功启动

docker ps -a

nginx.conf 配置

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

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

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    # mes-web http协议
    server {
        listen       8001;
        listen       [::]:8001;
	      server_name  _;
        root         /root/online/mes;
		
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

	      location / {
	        index index.html index.html;
          try_files $uri $uri/ /index.html;
          proxy_connect_timeout 90;
          proxy_send_timeout 90;
          proxy_read_timeout 90;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header http_user_agent $http_user_agent;
        }

        location ^~/api/ {
          proxy_pass http://43.139.101.117:30059/;
        }

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

    # poineer http协议
    server {
        listen       8002;
        listen       [::]:8002;
        server_name  _;
        root         /root/online/poineer;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
          index index.html index.html;
          try_files $uri $uri/ /index.html;
          proxy_connect_timeout 90;
          proxy_send_timeout 90;
          proxy_read_timeout 90;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header http_user_agent $http_user_agent;
        }

        location ^~/api/ {
          proxy_pass http://43.139.101.117:30059/;
        }

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

    # mes-web https协议
    server {
        listen 443 ssl;
        server_name autocity-dev.littaro.cn; #需要将yourdomain.com替换成证书绑定的域名。
        root /root/online/mes; # 项目路径
	
				# 本地 nginx配置
        ssl_certificate /var/lib/docker/volumes/acme-certs/_data/littaro.cer;
        ssl_certificate_key /var/lib/docker/volumes/acme-certs/_data/littaro.key;
        
				# docker nginx镜像配置
				# ssl_certificate /root/certs/littaro.cer;  # 需要将cert-file-name.pem替换成已上传的证书文件的名称。
        # ssl_certificate_key /root/certs/littaro.key; # 需要将cert-file-name.key替换成已上传的证书密钥文件的名称。
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 表示使用的加密套件的类型。
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 表示使用的TLS协议的类型。
        ssl_prefer_server_ciphers on;

        location / {
            index index.html index.htm;
            try_files $uri $uri/ /index.html; # 解决history模式下刷新404的bug
            proxy_connect_timeout 90;
            proxy_send_timeout 90;
            proxy_read_timeout 90;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header http_user_agent $http_user_agent;
        }

        location ^~/api/ {
            proxy_pass https://mes-test.littaro.cn/;
        }
    }

    # 80 端口号重定向到 https
    server {
        listen       80;
        listen       [::]:80;
        server_name  mes-test.littaro.cn;

        rewrite ^(.*)$    https://$host$1 permanent;
		}