Docker 进阶 | Yaml编写规则

987 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。

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

image.png 部署成功

实战 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
  • 文件准备齐全 (直接一键启动项目)

image.png

image.png

一切都变得很简单~

参考地址

官方文档

docs.docker.com/compose/com…