layout: post
category : docker容器
tags : [docker]

由前文知,运行容器的命令比较简单,但是,当有复杂的应用时,比如设置环境变量、挂载目录、映射端口,命令就变得比较长了。如果有多个docker镜像同时配置使用的话,单独执行docker run会显示比较麻烦。因此,本文就介绍多容器编排的一个简单工具:docker-compose。

安装

安装方法如下:

sudo apt-get install -y docker-compose

本文安装的版本如下:

$ docker-compose --version
docker-compose version 1.21.2, build a133471

docker-compose.yml内容

docker-compose默认使用的配置文件为docker-compose.yml,其内容示例如下,大多数英文名称,是固定内容,中文说明是根据实际情况变化的内容。

version: '2' # 固定,表示其版本为2
services: # 固定,表示容器服务gitlab: # 容器名称,根据实际修改image: latelee/gitlab # 镜像名,如果不存在,则从网络下载container_name: gitlab  # 容器名,在运行名称是唯一的restart: always # 开启此选项,在机器重启后,会自动启动这些容器,否则,就要手动启动容器volumes: # 挂载数据卷,对应docker run命令的-v选项。- /mnt/gitlab_data/config:/etc/gitlabports: # 端口映射- "80:80"networks: # 指定的网络,也可以不指定,必须与networks名称一致- mygitlab-jenkins-netjenkins:# 容器名称,根据实际修改,格式与前述一样...
networks: # 固定,对网络配置,如无则不需要mygitlab-jenkins-net: # 自定义的网络名称driver: bridge  # 桥接方式

根据笔者经验,yml文件对格式检查十分严格,必须要对齐,如上面的image、container_name等,必须对对齐,不能多一空格或少一空格。否则会提示莫名其妙的错误。

运行、停止

在docker-compose.yml同级目录,执行如下命令运行:

docker-compose up -d

如果配置文件不是docker-compose.yml,则需要使用-f来指定,如下:

docker-compose -f foobar.yml up -d

以上命令,使用-d表示在后台运行docker容器,执行后,终端只打启动信息,不会打印容器内的日志。如果要显示日志,则要将-d去掉。

docker-compose up

停止命令:

docker-compose down

重启命令:

docker-compose restart

注意,如果同时要运行多个容器,修改其中部分容器时,可以使用restart来重启,这样仅启动有修改的容器,但是根据经验,有时会有意想不到的情况出现,因此,最好还是先停止再启动。
如果要查看运行状态,执行:

docker-compose ps

当然,也可以使用docker ps来查看,本质上没区别。

实际例子

下面以一个经典的CICD组件为例进行说明,docker-compose.yml内容如下:

# gitlab & jenkins
# Powered by Late Lee <li@latelee.org>
#
# yml版本为2
version: '2'
services:# 第一个容器gitlabgitlab:# 镜像名,如果不存在,则从网络下载,本文假设使用本地的镜像image: latelee/gitlab# 容器名,在运行名称是唯一的container_name: gitlabrestart: always# 挂载数据卷volumes:- /mnt/gitlab_data/config:/etc/gitlab- /mnt/gitlab_data/logs:/var/log/gitlab- /mnt/gitlab_data/data:/var/opt/gitlab# 端口映射ports:- "80:80"- "9443:443"- "2222:22"# 主机名 这个IP改为自己的主机IPhostname: "172.18.18.18"# 启动时执行的命令#command: /assets/wrapper# 自定义的网络(见下[网络配置])networks:- mygitlab-jenkins-net# 第二个容器jenkinsjenkins:image:  latelee/jenkins:mavencontainer_name: jenkinsrestart: alwaysvolumes:# 使用主机的docker服务(因为要在jenkins容器中运行docker)- /var/run/docker.sock:/var/run/docker.sock# 使用数据盘的目录作为jenkins的工作目录- /mnt/jenkins_home:/var/jenkins_homeports:# 端口映射- "9080:8080"- "50000:50000"networks:- mygitlab-jenkins-net
# 网络配置
networks:mygitlab-jenkins-net: # 自定义的网络名称driver: bridge  # 桥接方式

执行docker-compose up -d启动gitlab和jenkins容器。成功后,可以在浏览器上输入主机IP访问gitlab的页面。注意,gitlab和jenkins比较吃内存,最好在4GB以上内存的机器上运行,否则会很卡。

使用经验

在docker-compose.yml中构建镜像。

在docker-compose.yml文件,在image前面加上build字段,指定Dockerfile所在目录,那么在运行docker-compose up时,就会自动构建。示例文件如下:

version: "2"
services:apache:build: httpdimage: httpd:alpinecontainer_name: httpdvolumes:#   - /home:/home- ./apache2/htdocs:/usr/local/apache2/htdocsports:- 80:80

运行后,最后提示信息如下:

Successfully httpd:alpine
WARNING: Image for service singula-oh-accessserver was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.

从提示信息知道,如果镜像不存在则自动创建,否则需要调用docker-compose builddocker-compose up --build

小结

笔者在工作中几乎都使用docker-compose启动容器。这种方式加上自建docker镜像(后文将讲述),将大大提高效率。如部署禅道系统。使用笔者构建好的配置文件,直接下载
https://github.com/latelee/docker-compose/tree/master/zentao,进入该目录,运行docker-compose up -d,即可在9070端口访问禅道页面。其过程十分方便,因为所有的一切环境,已经在docker中完成了。笔者的docker-compose仓库地址:https://github.com/latelee/docker-compose。

李迟 2018.7.3

我的docker随笔5:docker-compose的安装与使用相关推荐

  1. Docker - 容器编排工具 compose 之安装

    准备 首先,在使用和安装 docker compose之前,我们应该确保我们已经安装了 docker engine. 安装 官网上面有好多种安装方式,由于我们现在是在使用Docker, 个人感觉应该以 ...

  2. Docker(八):Docker Compose

    Docker Compose Compose 简介 Compose 是用于定义和运行多容器 Docker 应用程序的工具.通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务.然 ...

  3. 阿里云服务器Docker及Docker Compose的安装

    2019独角兽企业重金招聘Python工程师标准>>> 本文对阿里云ECS服务器如何安装Docker和Docker Compose进行说明,以centOS系统为例. 一.开通外网的E ...

  4. Docker(四):Docker 三剑客之 Docker Compose

    前两篇文章我们介绍了 Dockerfile 的使用Docker(二):Dockerfile 使用介绍,我们知道使用一个 Dockerfile 模板文件可以定义一个单独的应用容器,如果需要定义多个容器就 ...

  5. 我的docker随笔17:使用docker-compose启动MySQL、Redis和Mongo

    一.背景 有网友咨询用docker-compose启动几个存储服务,这些服务包括了MySQL.Redis.Mongo.恰好笔记没做过这一方面,趁机会学习一下. 二.要求 需要启动的docker如下: ...

  6. 我的docker随笔:开篇

    layout: post title: keywords: category : docker容器 tags : [docker] 李迟按: 自换新工作来,几乎没有再更新博客了.从去年下半年开始,陆续 ...

  7. docker三剑客之 Docker Machine Docker Compose Docker Swarm

    Docker 三剑客 一.docker machine 1.Docker Machine 简介 2.Docker Machine实践 二.docker-compose 1.docker-compose ...

  8. Docker Compose方式安装GitLab

    文章目录 用Docker Compose方式安装GitLab 前提条件 一键自动化以Docker Compose方式安装GitLab GitLab Docker Compose文件 安装和运行GitL ...

  9. docker之cgroup、compose

    cgroup的功能 docker使用cgroup控制资源,K8S里面也有limits Docker通过Cgroup来控制容器使用的资源配额,包括CPU.内存.磁盘三大方面,基本覆盖了常见的资源配额和使 ...

最新文章

  1. java 多路分发_java实现多路分发
  2. linux内存cached手动释放
  3. 功率谱 魏凤英统计程序_频谱、能量谱、功率谱、功率谱估计
  4. 记一次前端问题解决历程(Cannot read Property ‘call‘ of undefined)
  5. django 修改html无变化,Django Pycharm 修改html后立即刷新页面
  6. Ubuntu下将dash装换成bash
  7. 面试:一文搞懂堆和栈的区别
  8. Ubuntu16.04--code::blocks16.01 的代码拷贝到Windows 8.1--visual studio 2013 注意事项
  9. 面经——操作系统(linux为例)
  10. 中国民间秘术大揭露【实用】
  11. 编写程序也需要在实战中成长
  12. verifycode验证码模版
  13. 征信报告 加密文档_Secret Folder for Mac(文件加密隐藏软件)
  14. Ansys DesignModeler
  15. google-auto之自动生成组件化文件
  16. 新房装修如何知道是否需要更换电线
  17. Zbrush中常用的8种笔刷,笔刷中的八大金刚你用过几个?
  18. 交互式电子杂志_HUAWEI Magazine电子杂志阅读平台上线
  19. 自适应滤波器设计及matlab实现,自适应滤波器设计及Matlab实现附程序代码
  20. python xlwt

热门文章

  1. php 判断wap,php判断是否wap手机客户端的方法详解
  2. java数据导出ex_Java高级特性注解:注解实现Excel导出功能
  3. 快手2021年营收810亿元 经调整净亏损188亿元
  4. NBA过上中国年 用五福福卡为球迷送祝福
  5. 双11节后“回血” 85后们来转转上“摆地摊”出售 闲置物品
  6. 理想汽车下调第三季度交付展望 预计交付量约为2.45万辆
  7. 社区团购的坑,只有巨头能填?
  8. 消息称AirPods 3搭载U1芯片 耳机柄变小
  9. 《你好李焕英》票房反超《唐探3》 成中国影史票房第五
  10. 苹果或在2021年新iPhone上增加屏下Touch ID