Docker
1 前言
一个问题,一篇文章,一出故事。
本章将完成Docker Nginx的基础部署。
2 最佳实践
2.1 准备定制镜像
In hd01
然后,使用如下命令载入打包的镜像,
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/
如果能看到如下内容的页面则服务正常,

没有评论