如何部署Docker Nginx 1.20.2?

Docker

1 前言

一个问题,一篇文章,一出故事。
本章将完成Docker Nginx的基础部署。

2 最佳实践

2.1 准备定制镜像

In hd01

如何打包Docker Nginx 1.20.2?


然后,使用如下命令载入打包的镜像,

cd /data/docker/images/
docker load -i nginx:1.20.2.tar
docker tag build/nginx:1.20.2 hd01.cmdschool.org:5000/nginx:1.20.2
docker push hd01.cmdschool.org:5000/nginx:1.20.2
docker image rm build/nginx:1.20.2

2.2 部署nginx

In hd01

2.2.1 创建服务配置文件

vim /data/docker/yml/nginx-stack.yml

加入如下配置,

version: '3.8'
services:
  nginx:
    image: 'hd01.cmdschool.org:5000/nginx:1.20.2'
    ports:
      - target: 443
        published: 443
      - target: 80
        published: 80

    secrets:
       - hd01.cmdschool.org.crt
       - hd01.cmdschool.org.key
    environment:
      - TZ=Asia/Shanghai
    volumes:
        - type: bind
          source: /data/docker/container-data/nginx/www
          target: /var/www
        - type: bind
          source: /data/docker/container-data/nginx/log
          target: /var/log/nginx
    networks:
       - elknet
    logging:
      driver: "json-file"
      options:
        max-size: "50m"
        max-file: "2"
    deploy:
      restart_policy:
        condition: on-failure
      update_config:
        parallelism: 1
        delay: 5s
        monitor: 10s
        max_failure_ratio: 0.1
        order: start-first
      replicas: 3
      placement:
        max_replicas_per_node: 1
        constraints: [node.labels.nginx == true]
secrets:
  hd01.cmdschool.org.crt:
    external: true
  hd01.cmdschool.org.key:
    external: true
networks:
    elknet:
        external: true
        name: elknet

根据配置需求创建数据存放目录,
In hd01

mkdir -p /data/docker/container-data/nginx/www /data/docker/container-data/nginx/log
ssh hd02 mkdir -p /data/docker/container-data/nginx/www /data/docker/container-data/nginx/log
ssh hd03 mkdir -p /data/docker/container-data/nginx/www /data/docker/container-data/nginx/log

根据配置的需求设置运行标记,
In hd01

docker node update --label-add nginx=true hd01.cmdschool.org
docker node update --label-add nginx=true hd02.cmdschool.org
docker node update --label-add nginx=true hd03.cmdschool.org

2.2.2 部署服务

docker stack deploy -c /data/docker/yml/nginx-stack.yml nginx

2.2.3 部署配置文件到本地

docker cp $(docker container ls | grep nginx | awk '{print $1}'):/etc/nginx /data/docker/container-data/nginx/conf
ssh hd02 "docker cp \$(docker container ls | grep nginx | awk '{print \$1}'):/etc/nginx /data/docker/container-data/nginx/conf"
ssh hd03 "docker cp \$(docker container ls | grep nginx | awk '{print \$1}'):/etc/nginx /data/docker/container-data/nginx/conf"

然后配置修改如下,

vim /data/docker/yml/nginx-stack.yml

加入如下配置,

version: '3.8'
services:
  nginx:
    image: 'hd01.cmdschool.org:5000/nginx:1.20.2'
    ports:
      - target: 443
        published: 443
      - target: 80
        published: 80

    secrets:
       - hd01.cmdschool.org.crt
       - hd01.cmdschool.org.key
    environment:
      - TZ=Asia/Shanghai
    volumes:
        - type: bind
          source: /data/docker/container-data/nginx/www
          target: /var/www
        - type: bind
          source: /data/docker/container-data/nginx/log
          target: /var/log/nginx
        - type: bind
          source: /data/docker/container-data/nginx/conf
          target: /etc/nginx
    networks:
       - elknet
    logging:
      driver: "json-file"
      options:
        max-size: "50m"
        max-file: "2"
    deploy:
      restart_policy:
        condition: on-failure
      update_config:
        parallelism: 1
        delay: 5s
        monitor: 10s
        max_failure_ratio: 0.1
        order: start-first
      replicas: 3
      placement:
        max_replicas_per_node: 1
        constraints: [node.labels.nginx == true]
secrets:
  hd01.cmdschool.org.crt:
    external: true
  hd01.cmdschool.org.key:
    external: true
networks:
    elknet:
        external: true
        name: elknet

然后执行如下命令重新部署,

docker stack deploy -c /data/docker/yml/nginx-stack.yml nginx

2.2.4 控制Nginx服务

In hd01

docker exec -it $(docker container ls | grep nginx | awk '{print $1}') bash

以下脚本支持服务的控制,可使用如下命令获取帮助,

/etc/init.d/nginx

可见如下显示,

Usage: /etc/init.d/nginx {start|stop|status|restart|reload|force-reload|upgrade|configtest|check-reload}

尝试使用其中的服务状态查询(其他函数请自行测试,不一一演示),

/etc/init.d/nginx status

可见如下显示,

[ ok ] nginx is running.

2.2.5 访问测试页

http://hd01.cmdschool.org/
如果能看到如下内容的页面则服务正常,

没有评论

发表回复

Docker
如何打包Docker Nginx 1.20.2?

1 前言 一个问题,一篇文章,一出故事。 由于docker hub原版本的nginx镜像过于精简,于 …

Docker
如何部署Docker Kibana 7.13.2?

1 前言 一个问题,一篇文章,一出故事。 本章将实现启用Docker Kibana 7.13.2的部 …

Docker
如何部署Docker ElasticSearch 7.13.2的安全认证?

1 前言 一个问题,一篇文章,一出故事。 本章将实现启用Docker ElasticSearch 7 …