Docker Compose的使用

Docker Compose

Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成,使用Docker Compose不再需要使用shell脚本来启动容器。

Docker Compose通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器。

Docker Compose可以通过Python的包管理工具pip进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在 Docker 容器中运行。

Docker Desktop for Mac/Windows自带docker-compose二进制文件,安装Docker之后可以直接使用。

docker-compose的基本使用

#查看帮助
docker-compose -h

# -f 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d

#启动所有容器,-d 将会在后台启动并运行所有的容器
docker-compose up -d

#停用移除所有容器以及网络相关
docker-compose down

#查看服务容器的输出
docker-compose logs

#列出项目中目前的所有容器
docker-compose ps

#构建(重新构建)项目中的服务容器。服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。可以随时在项目目录下运行 docker-compose build 来重新构建服务
docker-compose build

#拉取服务依赖的镜像
docker-compose pull

#重启项目中的服务
docker-compose restart

#删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。
docker-compose rm

#启动已经存在的服务容器。
docker-compose start

#停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。
docker-compose stop

docker-compose.yml

docker-compose.yml文件用于描述应用的容器编排信息,以下是一个WordPress yaml文件模板

version: '3' # 定义版本,不指定默认为版本 1,新版本功能更多

services: # 服务配置
  db: # 服务名称
    image: mysql:5.7 # 镜像名称
    volumes: # 定义数据卷
      - db_data:/var/lib/mysql
      - .:/aaa # 挂载当前目录到容器中的 /aaa 无需使用绝对路径
    restart: always # 自动重启相关设置
    environment: # 定义环境变量
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
  wordpress: # 第二个容器
    labels:
      com.example.description: "This label will appear on all containers for the web service"
      # 为容器添加 Docker 元数据(metadata)信息。例如可以为容器添加辅助说明信息。
    depends_on: # 帮助 compose 理解容器之间的关系,db 将会在 wordpress 之前被启动
        - db
    image: wordpress:latest
    ports: # 端口,类似 -p
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
volumes: # 可选,需要创建的数据卷,类似 docker volume create
  db_data:
networks: # 可选,需要创建的网络,类似 docker network create

下面分别介绍各个指令的说明:

指令 说明
iamge 指定使用的基础镜像,如果像自定义镜像可以不指定这个参数,而用 build
build 指定Dockerfile所在文件夹的路径
command 覆盖容器启动后默认执行的命令
container_name 指定容器名称
depends_on 指定容器容器依赖关系,与启动顺序有关
volumes 挂载一个目录或者已经存在的数据卷容器
expose 暴露端口,但不映射到宿主机,只被连接的服务访问
ports 映射端口(HOST:CONTAINER)
dns 自定义 DNS 服务器。可以是一个值,也可以是一个列表
dns_search 配置 DNS 搜索域。可以是一个值,也可以是一个列表
tmpfs 挂载一个 tmpfs 文件系统到容器
environment 设置环境变量,可以使用数组或字典两种格式
env_file 从文件中获取环境变量,可以为单独的文件路径或列表
如果有变量名称与 environment 指令冲突,则按照惯例,以后者为准
external_links 让compose项目里面的容器链接到项目配置外部的容器
exra_hosts 添加主机名标签(向/etc/hosts文件中添加纪录)
links 链接到其它服务器中的容器
healthcheck 通过命令检查容器是否健康运行。
network_mode 设置网络模式
networks 加入指定网络
labels 为容器添加 Docker 元数据(metadata)信息
例如可以为容器添加辅助说明信息
logging 配置日志选项,目前支持三种日志驱动类型:
json-file
syslog
none
sysctls 配置容器内核参数
ulimits 指定容器的 ulimits 限制值
entrypoint 覆盖Dockerfile中ENTRYPOINT

参考资料

分类

开发
    --go (9)
    --java (5)
    --php (11)
    --mysql (9)
    --javascript (3)
    --html (1)
    --算法 (6)
架构
    --理论 (9)
    --网络 (3)
    --服务器 (2)
    --消息队列 (3)
    --容器 (5)
    --监控 (1)
    --搜索引擎 (3)
    --大数据 (0)
    --测试 (1)
系统
    --linux (10)
    --mac (2)
    --windows (1)
足球
    --世界杯 (60)
    --欧洲杯 (28)
    --文迷 (3)
大学时光
    --校园生活 (96)
    --假期生活 (17)
    --广院杯那些事 (14)
    --北京奥运 (6)
    --胡思乱写 (17)


最近发布

零拷贝技术介绍

服务网格技术简介

C语言标准和标准库简介

Kubernetes简介及环境搭建

Go语言开发的顶级项目


归档

2006 (109)
2007 (40)
2008 (47)
2009 (10)
2010 (6)
2012 (10)
2013 (14)
2014 (27)
2015 (15)
2016 (6)
2017 (8)
2018 (11)
2019 (17)
2020 (5)