Docker stack 使用演示案例一
version: '3.5'
networks:
stackDemoNetwork:
#网络类型必须是overlay
driver: overlay
external: false
services:
mysql:
image: mysql:5.7
networks:
- stackDemoNetwork
ports:
- "3306:3306"
environment:
- MYSQL_DATABASE=demo
- MYSQL_ROOT_PASSWORD=YOUR_PWD
command:
--lower_case_table_names=1
--character-set-server=utf8
--collation-server=utf8_general_ci
--explicit_defaults_for_timestamp=true
--sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
volumes:
#先创建本机目录(这里指定的本机为swarm的manager节点,只部署1个)
- ./mysql/data:/var/lib/mysql
- ./mysql/conf:/etc/mysql/conf.d
deploy:
placement:
constraints: [node.role == manager]
mode: replicated
replicas: 1
web:
image: nginx:1.13-alpine
ports:
- "80:80"
networks:
- stackDemoNetwork
volumes:
#注意:主机目录必须手动先创建
- ./nginx/conf:/etc/nginx/conf.d
- ./nginx/html:/usr/share/nginx/html
deploy:
placement:
constraints: [node.role == manager]
app:
image: openjdk:8-alpine
volumes:
#sudo mount -t nfs 192.168.79.129:/nfs /share
#先将demo.jar应用程序拷贝到共享目录
- /share/demo.jar:/demo.jar
networks:
- stackDemoNetwork
command: ['java','-Xms256M','-Xmx256M','-Duser.timezone=Asia/ShangHai', '-jar', '/demo.jar',"--spring.profiles.active=test"]
deploy:
mode: replicated
replicas: 3
nginx 配置 nginx/conf/default.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_set_header Host $http_host;
proxy_pass http://app_upstream;
}
#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 /usr/share/nginx/html;
}
}
upstream app_upstream{
server app:8080;
}
先将NFS挂载到每一个主机的/share目录下,作为共享目录,并创建compose.yml配置的/share开头的文件夹,必须预先创建,否则通过docker stack命令执行失败
提示,app123的顺序不一定是图中的顺序。
sudo docker stack deploy -c docker-compose.yml demo
启动和更新命令一致
启动完成后查看启动结果:
查看某个服务的日志:
sudo docker service logs -f demo_app
通过多次访问可以看到,ip地址变化等于访问了不通的容器,每次变化还都能访问到数据库中名字
提示:
官方不建议使用NFS作为MySQL的数据挂载目录,建议直接使用宿主机目录
http://blog.xqlee.com/article/1066.html