Docker Compose

介绍

Compose是用于定义和运行多个docker应用程序的工具,你可以使用yaml文件来配置应用程序的服务,只用一条命令便可以启动配置中的所有服务。


安装

方式一(推荐):

你可以通过运行我们的脚本基于我们的docker-compose镜像来安装docker-compose。只要下面这两条简单的命令,你就可以在你的系统上使用docker-compose:

  1. sudo curl -L --fail https://raw.githubusercontent.com/linuxserver/docker-docker-compose/master/run.sh -o /usr/local/bin/docker-compose
  2. sudo chmod +x /usr/local/bin/docker-compose

可以用下面的命令来更新docker-compose:

  1. docker pull linuxserver/docker-compose:"${DOCKER_COMPOSE_IMAGE_TAG:-latest}"
  2. docker image prune -f

如果要使用基于微型系统alpine制作的docker-compose镜像,你可以通过修改 .profile 文件,在其中设置一条环境变量: DOCKER_COMPOSE_IMAGE_TAG=alpine 。当然,你也可以把变量设置为 version-1.27.4version-alpine-1.27.4 来获取特定版本的docker-compose。

方式二:

我们也在 这里 发布了docker-compose的二进制版本。其中有两个版本:一个是基于glibc系统的(如Ubuntu、Debian);一个是基于musl系统的(如Alpine,被标记为 alpine 标签)。每一个版本都包含了 amd64、armhf、arm64的二进制文件。你可以通过下面这条命令把二进制文件下载到你的系统里并安装docker-compose:

  1. sudo curl -L --fail https://github.com/linuxserver/docker-docker-compose/releases/download/1.27.4-ls17/docker-compose-amd64 -o /usr/local/bin/docker-compose
  2. sudo chmod +x /usr/local/bin/docker-compose

启动单服务的方式

下面是用docker-compose部署linuxserver制作的容器的样例:

  1. version: "2.1"
  2. services:
  3. heimdall:
  4. image: linuxserver/heimdall
  5. container_name: heimdall
  6. volumes:
  7. - /home/user/appdata/heimdall:/config
  8. environment:
  9. - PUID: 1000
  10. - PGID: 1000
  11. - TZ=Europe/London
  12. ports:
  13. - 80:80
  14. - 443:443
  15. restart: unless-stopped

如果你将以上代码片段保存到名为 docker-compose.yml 的文件中,你可以在与文件相同的目录下使用 docker-compose up -d 来部署服务。其中 heimdall 镜像将被自动拉取,容器将被自动创建并启动。其中,up 意味着启动服务,-d 则意味着在后台运行。

如果你希望用其他目录或其他名称的yaml文件(如 heimdall.yml ),那么你可以在 -f 后指定文件的位置:docker-compose -f /path/to/heimdall.yml up -d

如果你希望停止服务,则使用 docker-compose downdocker-compose -f /path/to/heimdall.yml down 。所有通过该配置文件部署的容器将被停止并删除。


启动多服务的方式

你可以使用一个compose的yaml文件管理多个服务。

复制配置文件中 services: 下的内容到同一个文件中并使用 docker-compose up/down 命令,将可以启动/停止文件中的所有服务。

例:docker-compose.yml

  1. version: "2.1"
  2. services:
  3. heimdall:
  4. image: linuxserver/heimdall
  5. container_name: heimdall
  6. volumes:
  7. - /home/user/appdata/heimdall:/config
  8. environment:
  9. - PUID: 1000
  10. - PGID: 1000
  11. - TZ=Europe/London
  12. ports:
  13. - 80:80
  14. - 443:443
  15. restart: unless-stopped
  16. nginx:
  17. image: linuxserver/nginx
  18. container_name: nginx
  19. environment:
  20. - PUID=1000
  21. - PGID=1000
  22. - TZ=Europe/London
  23. volumes:
  24. - /home/user/appdata/nginx:/config
  25. ports:
  26. - 81:80
  27. - 444:443
  28. restart: unless-stopped
  29. mariadb:
  30. image: linuxserver/mariadb
  31. container_name: mariadb
  32. environment:
  33. - PUID=1000
  34. - PGID=1000
  35. - MYSQL_ROOT_PASSWORD=ROOT_ACCESS_PASSWORD
  36. - TZ=Europe/London
  37. volumes:
  38. - /home/user/appdata/mariadb:/config
  39. ports:
  40. - 3306:3306
  41. restart: unless-stopped

这样,你就可以一下启动 heimdall、nginx、mariadb 这三个服务。

当你执行 docker-compose up -d 时,将首先使用本地的镜像,若本地中没有,则会自动拉取相关的镜像。然后将创建并启动这三个容器。执行 docker-compose down 时,所有的三个服务将被停止并删除容器(数据将被保留,因数据都以映射到本地保存)。


更新升级

如果你希望更新镜像并用相同的参数重新创建容器,那么使用docker-compose便会异常轻松。首先,我们使用 docker-compose pull 来更新所有的镜像。然后,执行 docker-compose up -d 后,将自动用更新后的镜像重新创建容器。如果某个容器已经是最新版,那么它将不会被更新,将保持不变。

同样的,如果你修改了yaml文件中的内容,并执行 docker-compose up -d ,那么只会改变yaml文件中配置的容器,其他容器不变。

将部署容器的代码定义在服务器上,是“Devops”的核心宗旨。使用docker-compose,可以有效避免直接使用docker run 命令时忘记某个参数的尴尬情况。


小贴士

docker-compose 默认使用当前目录下的 docker-compose.yml 文件,若没有该文件则会报错。我们可以使用bash aliases来提高效率。

创建 ~/.bash_aliases 文件并写入下面的内容:

  1. alias dcp='docker-compose -f /opt/docker-compose.yml '
  2. alias dcpull='docker-compose -f /opt/docker-compose.yml pull'
  3. alias dclogs='docker-compose -f /opt/docker-compose.yml logs -tf --tail="50" '
  4. alias dtail='docker logs -tf --tail="50" "$@"'

再将下面的代码加入 ~/.bashrc 中以用来启用上面的文件:

  1. if [ -f ~/.bash_aliases ]; then
  2. . ~/.bash_aliases
  3. fi

配置完成后,注销再登录后。你就可以使用 dcpulldcp up -d 来管理你的容器了。