Docker Compose基础使用指南

Mar 7, 2024·
Orochi
Orochi
· 2 min read

Docker Compose基础使用指南

Docker Compose即容器组合,是基于Docker的一种初级容器管理方案,是Docker官方开源的容器编排工具,优点是简单易用,而且功能强大。

1. 环境要求

常见环境配置示例:

# 系统环境
系统: Ubuntu 22.04/CentOS 7.6
Docker: 18.09.7及以上
Docker Compose: 1.29.2及以上

2. Docker Compose配置示例

2.1 基础配置示例

version: "3"
services:
  server:
    container_name: server1                       # 容器名称 
    # 指定镜像 ${VERSION:-latest} ,VERSION先从同级目录内的.env文件中获取,获取不到,则使用latest
    image: xxxx.com/web_server:${VERSION:-latest} 
    restart: always  # 是否一直重启
    ports:          # 端口映射 外部:容器内部
      - "80:80"
    volumes:        # 挂载卷
      - ./data/server:/data
    environment:    # 系统设置
      - TZ=Asia/Shanghai
    env_file:       # 环境变量
      - variables.env
    depends_on:     # 依赖的容器
      - mysql
    logging:        # 日志设置
      options:
        max-size: 1g   # 日志最大存储1g
    entrypoint:     # 容器的切入点,此处可以不填,默认是镜像声明的
      - start.sh
      - args1       # start.sh的参数
      - args2
    user: "www:www" # 指定内部的程序用什么角色执行
    healthcheck:    # 健康检查
      test: ["CMD", "/healthcheck.sh"]   # 不正常的话,非0退出即可              
      interval: 60s      # 间隔时长
      timeout: 10s       # 超时时长
      retries: 3         # 重试次数
    extra_hosts:    # dns解析
      - "www.163.com:172.17.3.1"

3. 常用命令

# 启动docker-compose.yml声明的容器,会自动更新,重建容器
docker-compose up -d

# 停止并删除docker-compose.yml声明的容器
docker-compose stop

# 查看docker-compose.yml声明的容器的状态
docker-compose ps

# 查看容器的日志
docker-compose logs --tail -n 100 -f server

# 查看容器的日志,导出到vim中,方便查询
docker-compose logs server | vim -

# 进入容器内部
docker-compose exec server /bin/bash

4. 便捷脚本

创建快速进入容器的脚本:

#!/bin/bash
# 快速进入容器内
docker-compose exec $1 /bin/bash

5. 常见问题处理

5.1 端口占用问题

# docker-proxy占用端口不释放,导致新容器启动失败
# 确认端口占用的是什么程序
netstat -tlnp | grep port

# 如果是docker占用,重启一下docker进程即可
systemctl restart docker

5.2 容器和镜像管理

容器日志位置:

  • 一般在 /var/lib/docker/containers/<container_id>
  • docker-compose.yml修改后,在目录中直接docker-compose up -d会重新创建容器
  • 如果只是修改启动脚本,docker-compose up -d不会重新创建容器

镜像导入导出:

# 打包导出
docker save -o myengine.tar myengine:v0.1

# 导入
docker load -i myengine.tar

# 压缩镜像包
gzip myengine.tar  # 进一步压缩体积,节省流量

# 上传到镜像仓库
docker tag myengine:v0.1 hub.docker.com/foobar/myengine:v0.1
docker push hub.docker.com/foobar/myengine:v0.1

6. 注意事项

  1. 默认情况下,docker-compose会建立一个默认的网络,供docker-compose.yml内的容器使用
  2. 修改配置文件后重新部署时,注意检查端口占用情况
  3. 使用环境变量时,优先从.env文件读取,找不到则使用默认值
  4. 建议使用数据卷来持久化重要数据
  5. 合理配置日志轮转,避免日志占用过多磁盘空间
Orochi
Authors
充满活力和热情的软件从业者
在不同的公司和项目中工作过,担任过各种职务,做过各类项目(如企业站点、内部中台、边缘设备服务、客户端开发、大模型训练、大模型适配和任务调度等等),广泛的视野和经验.