Centos7安装docker-compose

呼延光明
2023-12-01

Background

基于docker容器开发服务时,从代码到部署容器需要经过两个步骤:

  • 打包镜像docker build
  • 部署启动容器docker run

在实际开发中,一个服务往往需要和很多个其它的服务进行关联,单个服务也有可能有多个容器实例,打包部署非常繁琐,容易出错。而使用docker-compose就可以轻松实现对容器集群的编排工作。简单来说,docker-compose是一个用于定义和运行多个容器的工具,类似k8s。
对于 docker-compose 有两个基本的概念:

  • 工程,docker-compose运行的目录即为一个工程,在微服务场景下,我们往往都是使用git submodule的方式组建工程的,因此父项目就可以成为一个docker-compose的工程
  • 服务,对应子项目,一个工程可以包含多个子项目
  • 容器,对应服务的实例,一个服务可以有多个实例

docker-compose当然也存在不足的地方,就是它只能用在单一host上进行容器编排,无法跨节点host对容器进行编排,那是Docker Swarm和K8s的范畴了,后续再讨论。

1、安装

  • 通过命令下载:
curl -L https://github.com/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  • github太慢可以用daocloud下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  • 如果在线下载速度较慢,或者下载失败,可以先自行在网上下载好docker-compose文件,然后上传到/usr/local/bin/目录也可以
    docker-compose下载网址:Releases · docker/compose
  • 修改docker-compose文件权限
chmod +x /usr/local/bin/docker-compose
  • 创建软链:
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  • 如果有pip环境,也可以使用pip安装
pip3 install docker-compose
  • 测试安装结果
docker-compose --version

2、使用

  • docker-compose编写yaml文件注意事项
  • 不支持制表符tab键缩进。需要使用空格缩进
  • 通常开头缩进2个空格
  • 字符后缩进一个空格,如冒号,逗号
  • 用井号注释
  • 如果包含特殊字符用单引号引起来
  • 布尔值(ture、false、yes、no、on、off)必须用引号括起来,这样分析器会将它们解释为字符串
  • docker-compose命令格式
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]

命令选项如下:
-f,–file FILE指定Compose模板文件,默认为docker-compose.yml,可以多次指定。
-p,–project-name NAME指定项目名称,默认将使用所在目录名称作为项目名。
-x-network-driver 使用Docker的可拔插网络后端特性(需要Docker 1.9+版本)
-x-network-driver DRIVER指定网络后端的驱动,默认为bridge(需要Docker 1.9+版本)
-verbose输出更多调试信息
-v,–version打印版本并退出

  • docker-compose up命令格式
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]

选项包括:
-d 在后台运行服务容器
–no-color 不使用颜色来区分不同的服务的控制输出
–no-deps 不启动服务所链接的容器
–force-recreate 强制重新创建容器,不能与–no-recreate同时使用
–no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用
–no-build 不自动构建缺失的服务镜像
–build 在启动容器前构建服务镜像
–abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用
-t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
–remove-orphans 删除服务中没有在compose文件中定义的容器
–scale SERVICE=NUM 设置服务运行容器的个数,将覆盖在compose中通过scale指定的参数

  • -f 可以指定使用的compose模板文件,默认为docker-compose.yml,可以多次指定
docker-compose -f docker-compose.yml up -d
  • 使用示例:
version: '3.5'
services:
  headscale:
    image: headscale/headscale:latest-alpine
    container_name: headscale
    volumes:
      - ./config:/etc/headscale
      - ./data/data:/var/lib/headscale
    ports:
      - 7080:7080
    command: headscale serve
    restart: unless-stopped
 类似资料: