小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。
Docker 进阶 | Yaml编写规则
docker-compose.yaml | 核心
规则
有且只有三层, 然后无限套娃
第一层 Version
与 docker 引擎对应的
version: "" #版本
第二层 Service 代表服务
version: "" #版本
services: # 服务
服务1: web
# 配置服务
images
build
network
volumes
....
服务2: redis
....
服务3: redis
....
第三层 其他配置
version: "" #版本
services: # 服务
服务1: web
# 配置服务
images
build
network
volumes
....
服务2: redis
....
服务3: redis
....
# 其他配置 网络/卷, 全局规则
volumes:
networks:
configs:
举例
Basic
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
depends_on
compose 项目启动是有顺序的, 如果我们的项目依赖于 mysql, redis 那么要保证 redis 先启动
version: "3.9"
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
deploy 部署
version: "3.9"
services:
redis:
image: redis:alpine
deploy:
replicas: 6 # 副本
placement:
max_replicas_per_node: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
expose 暴露端口
expose:
- "3000"
- "8000"
environment 配置环境
environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET:
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRET
network_mode 网络模式
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
实战1: 使用 docker compose 部署 kong / konga
docker-compose.yml
version: '3'
services:
kong-database:
image: postgres:9.6
restart: always #每次总是启动
networks:
- kong-net
environment:
POSTGRES_USER: kong
POSTGRES_DB: kong
POSTGRES_PASSWORD: kong
ports:
- "5432:5432"
#######################
# 执行数据库迁移
######################
kong-migration:
image: kong:latest
command: "kong migrations bootstrap"
networks:
- kong-net
restart: on-failure
environment:
- KONG_DATABASE=postgres
- KONG_PG_DATABASE=kong
- KONG_PG_PASSWORD=kong
- KONG_PG_HOST=kong-database
links:
- kong-database #连接的是kong-database服务的
depends_on:
- kong-database #依赖于kong-database服务
#####################
# kong gateway
#####################
kong:
image: kong:latest
restart: always
networks:
- kong-net
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_PASSWORD: kong
KONG_PROXY_LISTEN: 0.0.0.0:8000
KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443
KONG_ADMIN_LISTEN: 0.0.0.0:8001
depends_on:
- kong-migration
links:
- kong-database
healthcheck:
test: ["CMD", "curl", "-f", "http://kong:8001"]
interval: 5s
timeout: 2s
retries: 15
ports:
- "8001:8001"
- "8000:8000"
- "8443:8443"
#######################
#以下两个是konga GUI
#######################
konga-prepare:
image: pantsel/konga:latest
command: "-c prepare -a postgres -u postgresql://kong:kong@kong-database:5432/konga" #注意是用户名:密码@数据库服务名称:端口
networks:
- kong-net
restart: on-failure
links:
- kong-database
depends_on:
- kong #依赖kong服务
- kong-database #依赖kong-database服务
konga:
image: pantsel/konga:latest
restart: always
networks:
- kong-net
environment:
DB_ADAPTER: postgres
DB_HOST: kong-database
DB_USER: kong
DB_DATABASE: konga
DB_PASSWORD: kong #必须加上密码,不然会失败
depends_on:
- kong
- kong-database
ports:
- "1337:1337"
networks:
kong-net:
driver: bridge
docker-compose up -d
成功,访问ip:1337
部署成功
实战 2: 使用 compose 一键启动 wordpress
$ mkdir my_wordpress
$ cd my_wordpress/
$ vim docker-compose.yml
# docker-compose.yml
version: "3.9" # 定义版本号
services: # 定义服务
db: # 数据库
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always # 是否重启? 总是重启
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress: # 博客
depends_on:
- db
image: wordpress:latest
volumes:
- wordpress_data:/var/www/html
ports: # 暴露端口
- "8000:80"
restart: always
environment: # 设置环境
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
wordpress_data: {}
docker-compose up -d
- 下载项目 docker-compose.yml
- 如果需要文件 Dockerfile
- 文件准备齐全 (直接一键启动项目)
一切都变得很简单~
参考地址
官方文档