传统版本

  • 安装 Docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

如果报错: 0curl: (7) Failed connect to get.daocloud.io:443; 拒绝连接

一般是docker版本已经内置了docker compose了,这个时候已经无需安装传统版本的docker-compose了

  • 授权
sudo chmod +x /usr/local/bin/docker-compose
  • 验证
docker-compose --version
  • 传统版本是独立 Python 程序
  • 传统版本需单独安装 (pip, apt)

新版本

  • docker的最新版本已经内置的docker compose
  • 查看版本号
docker compose version
  • 新版本与docker捆绑,是基于Docker CLI 插件 ,使用Go 语言开发

YML文件

  • 总体三层
version: '' #DockerCompose文件格式版本
services: ''#要运行的所有服务的根节点
	服务1: web
		#服务配置
		images
		restart: always #(重启策略,每次重启docker时都会重启相关的容器)
		build
		network
		......
	服务2: redis
		......
	服务3: xxx
		......
#其他配置 网络/卷、全局规则
volumes:
networks:
confdigs:
  • 启动:docker-compose up
  • 后台启动:docker-compose up -d
  • 重启:docker-compose restart
  • 关闭:docker-compose stop
  • 重新构建:docker-compose up --build
    • 慎重,命名卷和绑定挂载数据不会丢失;但匿名卷很有可能丢失;容器内没有挂载的数据一定会丢失
  • 文章同专栏中有很多实例可以参考
  • Docker Compose V2 默认不再需要 version 字段

多容器网络

version: '3'
services:
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    
  webapp:
    image: wordpress
    ports:
      - "8080:80"
    depends_on: # 依赖关系,定义服务启动顺序依赖:先启动 mysql,再启动 webapp
      - mysql
    environment:
      WORDPRESS_DB_HOST: mysql  # 直接使用服务名
  • mysql 不是 IP 地址,而是服务名
  • DockerCompose 会自动创建内部 DNS,将服务名解析为容器 IP
  • 因为两个服务在同一网络,所以可以通过服务名直接通信

使用 .env 文件

  • 创建 .env 文件
    # .env 文件示例
    MYSQL_ROOT_PASSWORD=MySecurePassword123!
    MYSQL_DATABASE=jumpserver
    MYSQL_USER=jumpserver
    MYSQL_PASSWORD=JumpServer@123
    
  • 在 docker-compose.yml 中引用
    # docker-compose.yml
    version: '3.8'
    services:
      mysql:
        image: mysql:8.0
        container_name: jumpserver_mysql
        environment:
          MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
          MYSQL_DATABASE: ${MYSQL_DATABASE}
          MYSQL_USER: ${MYSQL_USER}
          MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    
  • 使用多个环境文件
    # 默认使用 .env
    docker-compose up
    # 指定特定的环境文件
    docker-compose --env-file .env.production up
    docker-compose --env-file .env.development up
    
  • 环境变量优先级
    1. Docker Compose 加载环境变量的顺序(从低到高优先级):
    2. env_file 指令指定的文件
    3. .env 文件(项目目录中的默认文件)
    4. Shell 环境变量
    5. environment 指令中的变量
    6. Compose file 中直接定义的变量

参考文章

  • https://blog.csdn.net/m0_65152767/article/details/154119750

更多推荐