Docker入门到精通《Docker Compose》

349 阅读4分钟

Docker Compose官方文档地址:docs.docker.com/compose/com…

一.Docker Compose 介绍

这篇文章重点讲解Docker compose的相关概念和命令。Compose是单机编排容器集群或者是分布式服务容器的应用工具。通过Compose,可以使用YAML文件来配置应用程序的服务。然后使用一个命令,就可以从配置中创建并启动所有服务。

  Docker-Compose是一个容器编排工具。通过一个.yml或.yaml文件,将所有的容器的部署方法、文件映射、容器端口映射等情况写在一个配置文件里,执行docker compose up命令就像执行脚本一样,一个一个的安装并部署容器。如下图所示,通过Docker Compose可以创建一个Docker的集群。

图片

二.Compose 和 Docker 兼容性

image.png

三.安装 Docker Compose

# 下载最新版的docker-compose文件
sudo curl -L http://mirrors.aliyun.com/docker-toolbox/linux/compose/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

# 查看是否存在
ls /usr/local/bin/docker-compose

# 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 添加软连接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 测试安装结果
docker-compose --version

# 卸载
rm -rf /usr/local/bin/docker-compose
rm -rf /usr/bin/docker-compose

四.Docker Compose 常用命令

docker-compose -h                           # 查看帮助
docker-compose up                           # 创建并运行所有容器
docker-compose up -d                        # 创建并后台运行所有容器
docker-compose -f docker-compose.yml up -d  # 指定模板
docker-compose down                         # 停止并删除容器、网络、卷、镜像。
docker-compose logs                         # 查看容器输出日志
docker-compose logs -f 容器名               # 查看容器实时日志
docker-compose pull                         # 拉取依赖镜像
dokcer-compose config                       # 检查配置
dokcer-compose config -q                    # 检查配置,有问题才有输出
docker-compose restart                      # 重启服务
docker-compose start                        # 启动服务
docker-compose stop                         # 停止服务
docker-compose up -d nginx                  # 构建建启动nignx容器
docker-compose exec nginx bash              # 登录到nginx容器中
docker-compose ps                           # 显示所有容器
docker-compose build nginx                  # 构建镜像
docker-compose build --no-cache nginx       # 不带缓存的构建
docker-compose config  -q                   # 验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。
docker-compose events --json nginx          # 以json的形式输出nginx的docker日志
docker-compose pause nginx                  # 暂停nignx容器
docker-compose unpause nginx                # 恢复ningx容器
docker-compose rm nginx                     # 删除容器(删除前必须关闭容器)
docker-compose scale nginx=3                # 负载均衡,注意端口号不能重复

五.Docker Compose 模板文件

由于业务服务依赖 MySQL 等环境依赖,所以需要拆分 2 套 Docker Compose 的配置文件,分别为 docker-compose.env.yml 环境配置和 docker-compose.service.yml 业务服务配置,保证先成功启动依赖,再启动服务。depends_on配置,也能决定服务的启动顺序。但是千万注意,depends_on 并不会等待服务完全就绪,只是确保它们在启动时的顺序,并不稳定。

docker-compose.env.yml

version: '3'

services:  
  mysql:  
    image: mysql:8 # 使用的镜像  
    container_name: yuoj-mysql # 启动的实例名称  
    environment:  
      MYSQL_ROOT_PASSWORD: root # root 用户密码  
    ports:  
      - "3306:3306" # 端口映射  
    volumes:  
      - ./.mysql-data:/var/lib/mysql # 将数据目录挂载到本地目录以进行持久化  
      - ./mysql-init:/docker-entrypoint-initdb.d # 启动脚本  
    restart: always # 崩溃后自动重启  
    networks:  
      - mynetwork # 指定网络  
      
  redis:  
    image: redis:6  
    container_name: yuoj-redis  
    ports:  
      - "6379:6379"  
    networks:  
      - mynetwork  
    volumes:  
      - ./.redis-data:/data # 持久化  
      
  rabbitmq:  
    image: rabbitmq:3.12.6-management # 支持管理面板的消息队列  
    container_name: yuoj-rabbitmq  
    environment:  
      RABBITMQ_DEFAULT_USER: guest  
      RABBITMQ_DEFAULT_PASS: guest  
    ports:  
      - "5672:5672"  
      - "15672:15672" # RabbitMQ Dashboard 端口  
    volumes:  
      - ./.rabbitmq-data:/var/lib/rabbitmq # 持久化  
    networks:  
      - mynetwork  
      
  nacos:  
    image: nacos/nacos-server:v2.2.0-slim  
    container_name: yuoj-nacos  
    ports:  
      - "8848:8848"  
    volumes:  
      - ./.nacos-data:/home/nacos/data  
    networks:  
      - mynetwork  
    environment:  
      - MODE=standalone # 单节点模式启动  
      - PREFER_HOST_MODE=hostname # 支持 hostname  
      - TZ=Asia/Shanghai # 控制时区 
      
networks:  
  mynetwork:

docker-compose.service.yml

version: '3'  
services:  
  # 网关服务
  wuke-gateway:  
    container_name: wuke-gateway # 网关容器昵称  
    build: # 服务的 Docker 构建文件位置  
      context: ./wuke 
      dockerfile: Dockerfile  
    ports:  
      - "8101:8101"  
    networks:  
      - mynetwork  
    
  # 用户服务
  wuke-user-service:  
    container_name: wuke-user-service  
    build:  
      context: ./wuke-user-service-user-service  
      dockerfile: Dockerfile  
    ports:  
      - "8102:8102"  
    networks:  
      - mynetwork  
    depends_on: # 本服务依赖的服务,控制启动先后顺序  
      - wuke-gateway  
      
  # 订单服务
  wuke-order-service:  
    container_name: wuke-order-service  
    build:  
      context: ./wuke-order-service  
      dockerfile: Dockerfile  
    ports:  
      - "8103:8103"  
    networks:  
      - mynetwork  
    depends_on:  
      - wuke-order-service  
      - wuke-gateway  
  
# 网络,不定义的话就是默认网络  
networks:  
  mynetwork: