Compose 是 Docker 容器进行编排的工具, 是一个整合发布docker应用的利器,可定义和运行多容器的应用,在 Compose 中你可以使用 YAML 文件来配置你的应用服务。然后,只需要一个简单的命令,就可以创建并启动你配置的所有服务。

使用 Compose 基本会有如下三步流程:

  • 在 Dockfile 中定义你的应用环境,可以是多个docker应用。
  • 在 docker-compose.yml 中定义组成应用程序的服务。
  • 使用dcoker-compose up命令 运行整个应用程序解决方案。

1,docker-compose 安装:

docker-compose 在GitHub发布,可以在这里获取到最新版本:https://github.com/docker/compose/releases

根据官方安装方法,执行下面命令安装

  1. sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

设置目录权限

  1. sudo chmod +x /usr/local/bin/docker-compose

测试安装

  1. docker-compose --version
  2. #或
  3. docker-compose -v

2,在你的服务器上获取你的docker images

3,编排 docker-compose.yml 

Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)

Docker Compose project 文件的默认路径是 ./docker-compose.yml,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例

  1. version: '2' # 表示该 Docker-Compose 文件使用的是 Version 2 file
  2. services: # 要启动的 docker 服务列表
  3. demo-docker: # 第一个服务(注意格式:相对上一行两个空格)
  4. image: "ejiyuan/demo-docker:latest" # 镜像名称 (注意格式:image相对上一行,空两格 ,: 后空一格,以下类推)
  5. ports:
  6. - "9000:8080" # 启动端口(注意格式:“-”前面两个空格,后面一个空格)
  7. volumes: #挂载一个路径
  8. - .:/code
  9. redis: # 第二个服务
  10. image: "redis:alpine"

PS:Compose目前为止有三个版本分别为Version 1,Version 2,Version 3,Compose区分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2支持更多的指令。Version 1没有声明版本默认是"version 1"。Version 1将来会被弃用。

4,在 Compose 中构建并运行你的应用:

在 docker-compose.yml 所在路径下执行该命令 Compose 就会自动构建镜像并使用镜像启动容器

  1. docker-compose up
  2. docker-compose -f -p up -d // 后台启动并运行容器

参数:

  1. Options:
  2. -f, --file FILE Specify an alternate compose file (default: docker-compose.yml)
  3. -p, --project-name NAME Specify an alternate project name (default: directory name)

默认如果没有指定具体的compose配置文件,那么就docker-compose.yml,并且如果不指定项目名称,默认就是文件夹的name

结果如下:

5,查看

  1. docker-compose images #查看镜像
    docker-compose ps #查看进程

查看docker运行状态

两个都启动了

6,config 显示 docker-compose.yml配置

  1. docker-compose [-f] config [--services]

结果如下:

7,down:停止并删除容器、网络、镜像、数据卷

  1. docker-compose down

结果如下:

  1. Options:
  2. --rmi type Remove images. Type must be one of:
  3. 'all': Remove all images used by any service.
  4. 'local': Remove only images that don't have a custom tag
  5. set by the `image` field.
  6. -v, --volumes Remove named volumes declared in the `volumes` section
  7. of the Compose file and anonymous volumes
  8. attached to containers.
  9. --remove-orphans Remove containers for services not defined in the
  10. Compose file

8,build

服务除了可以基于指定的镜像,还可以基于一份 Dockerfile,在使用 up 启动之时执行构建任务,这个构建标签就是 build,它可以指定 Dockerfile 所在文件夹的路径。Compose 将会利用它自动构建这个镜像,然后使用这个镜像启动服务容器

设定上下文根目录,然后以该目录为准指定 Dockerfile

  1. build:
  2. context: ../
  3. dockerfile: path/of/Dockerfile
    args
    user:zhangsan
  • context 选项可以是 Dockerfile 的文件路径,也可以是到链接到 git 仓库的 url
  • 使用此 dockerfile 文件来构建,必须指定构建路径context
  • args 指定构建参数的值。首先要在 Dockerfile 中指定参数名,然后再使用该选项指定参数值

例子:

文件结构如下:

Dockerfile文件

  1. FROM openjdk:8-jdk-alpine
  2. VOLUME /tmp
  3. ADD demo-docker-0.0.1-SNAPSHOT.war app.war
  4. RUN sh -c 'touch /app.war'
  5. RUN echo "Asia/Shanghai" > /etc/timezone
  6. ARG active #占位符,等待从compose 中带入
  7. ENV JAVA_OPTS=""
  8. ENV spring.profiles.active=${active}
  9. ENTRYPOINT ["java","-jar","/app.war"]

docker-compose.yml文件配置

  1. version: '2'
  2. services:
  3. db: #对应 docker run --name my_postgres -d -p 5432:5432 -e POSTGRES_PASSWORD=123456 -e PGDATA=/data/ -e POSTGRES_USER=admin -e POSTGRES_DB=my_db postgres
  4. restart: always
  5. image: postgres
  6. ports:
  7. - "5432:5432"
  8. environment:
  9. POSTGRES_PASSWORD:
  10. PGDATA: /data/
  11. POSTGRES_USER: admin
  12. POSTGRES_DB: my_db
  13. web:
  14. build:
  15. context: .
  16. args:
  17. active: prod #将值带入到Dockerfile文件中
  18. ports:
  19. - "8080:8081"
  20. links:
  21. - db

执行

  1. docker-compose up -d

结果如下:

9,volumes 挂在数据卷

指定服务要使用的卷。如果仅针对某一服务,可以只指定卷主机路径。但若要多个服务使用,应该使用在顶层范围下的 volumes 选项中指定的卷名。

docker-compose.yml文件配置

  1. version: '3'
  2. services:
  3. db:
  4. restart: always
  5. image: postgres
  6. ports:
  7. - "5432:5432"
  8. environment:
  9. POSTGRES_PASSWORD:
  10. PGDATA: /data/
  11. POSTGRES_USER: admin
  12. POSTGRES_DB: my_db
  13. volumes:
  14. - ./code:/data # 将宿主的当前目录(docker-compose.yml所在目录)映射到docker容器中的/data 目录
  15. web:
  16. build:
  17. context: .
  18. args:
  19. active: prod #将值带入到Dockerfile文件中
  20. ports:
  21. - "8080:8081"
  22. volumes:
  23. - data_volume:/tmp
  1. links: - db volumes: data_volume: #设置一个可用作共享的券,很遗憾 无法挂载到本地指定目录

执行

  1. docker-compose up -d

查看本地code目录并登陆到 docker 容器中对比文件

内容是一致的

修改  “./code:/data” 为 “data_volume:/data”  ,docker-compose up 启动

搜索定义的卷名称

  1. docker volume ls | grep data_volume

查看卷详细信息

  1. docker volume inspect docker_data_volume

  1. cd /var/lib/docker/volumes/docker_data_volume/_data

登陆到两个 容器终端分别查看 /data与/tmp 内容是一致的

10,networks 加入指定网络

docker-compose.yml文件配置

  1. version: '3'
  2. services:
  3. db:
  4. restart: always
  5. image: postgres
  6. ports:
  7. - "5432:5432"
  8. environment:
  9. POSTGRES_PASSWORD:
  10. PGDATA: /data/
  11. POSTGRES_USER: admin
  12. POSTGRES_DB: my_db
  13. networks:
  14. - new_net_1
  15. web:
  16. build:
  17. context: .
  18. args:
  19. active: prod #将值带入到Dockerfile文件中
  20. ports:
  21. - "8080:8081"
  22. networks:
  23. - new_net_1
  24. links:
  25. - db
  26. networks:
  27. new_net_1:
  1. 启动
  1. docker-compose up -d

查看网络

  1. docker network ls

查看网络详情

两个服务都加入到定义的新网络中了

11. 其他

docker-compose.yml 配置文件编写详解

Docker Compose 配置文件详解

docker-compose使用指南

docker-compose教程(安装,使用, 快速入门)

r-compose 文件配置选项

docker-compose hello word的更多相关文章

  1. 通过 Docker Compose 组合 ASP NET Core 和 SQL Server

    目录 Docker Compose 简介 安装 WebApi 项目 创建项目 编写Dockfile Web MVC 项目 创建项目 编写Dockfile 编写 docker-compose.yml文件 ...

  2. Docker Compose集成式应用组合及service编排

    Compose简介 Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排.其代码目前在 https://github.com/docker/compose 开源.C ...

  3. 25.docker compose 简介 和 docker-compose.yml 参数介绍

    1. docker compose概念 文档  https://docs.docker.com/compose/compose-file/compose-versioning 一个基于 docker ...

  4. Docker compose学习笔记

    一.compose compose 作用 你的应用可能需要很多个服务,比如web服务,数据库服务,缓存服务等等.我们可以把这些服务放到单独的容器里面,如果手工去配置这些服务会有些麻烦,docker c ...

  5. docker compose 笔记

    https://www.youtube.com/watch?v=Uez88TWOECg 是基于这个视频做的笔记. Docker Compose: Compose is a tool for defin ...

  6. 利用docker compose启动gitlab及runner

    添加docker compose配置文件 新建文件docker-compose.yml,输入如下内容: gitlab: image: 'gitlab/gitlab-ce:latest' contain ...

  7. Docker Compose to CoreOS

    taken from https://docs.docker.com/compose/install/ the only thing is that /usr is read only, but /o ...

  8. Docker Compose—简化复杂容器应用的利器

    Compose是用于定义和运行复杂Docker应用的工具.你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成. 1. 安装Docker和Compo ...

  9. .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行

    本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...

  10. Docker Compose容器编排

    Compose是Docker官方的开源项目,可以实现对Docker容器集群的快速编排.Compose 中有两个重要的概念:服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实 ...

随机推荐

  1. String、StringBuilder、StringBuffer的区别

    这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > ...

  2. 搭建vue的开发环境

    随手笔记:win7 64bit 1.安装node,直接从node官网下载,安装即可. 2.命令行输入 node -v 查看是否安装成功,显示node的版本号即安装成功.安装成功后,输入node,进入n ...

  3. Matlab中的rectangle函数

    rectangle函数功能:创建二维矩形对象. rectangle('Position',[x,y,w,h])从点(x,y)开始绘制一个宽w高h的矩形,对坐标轴数据单元指定值.注意,按指定的比例显示矩 ...

  4. SQL性能优化十条经验,后台程序员都需要掌握

    1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE '%parm1%'—— 红色标识位置的百分号会导致相关列的索引无法使用,最好不要用. 解决办法: 其实只需要对该脚本略做改进,查询速度便会 ...

  5. 20155219付颖卓《网络攻防》Exp4 恶意代码分析

    一.基础问题回答 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控. 可以用window7自带的schtasks ...

  6. JPA、Hibernate框架、通用mapper之间的关系及通用mapper的具体实现

    JPA是描述对象-关系表的映射关系,将运行期实体对象持久化到数据库中,提出以面向对象方式操作数据库的思想. Hibernate框架核心思想是ORM-实现自动的关系映射.缺点:由于关联操作提出Hql语法 ...

  7. 微信企业付款获取RSA

    package com.hentica.app.test.wx; import com.plant.app.modules.pay.wxpay.config.WxpayConfig; import o ...

  8. mysql并发更新

    mysql并发更新 常见方案 乐观锁 select * from tab1 where id = ?; update tab1 set col1 = ? where id = ? and versio ...

  9. maya权重拷贝一对一,一对多

    是不是有时候盔甲很多很碎头很大,用代理一个个拷贝很麻烦吧 用下面代码直接运行进行一对多或者一对一拷贝 第一个先选择参考物体,加选其他一堆有的没的有权重或没权重的物体执行一键拷贝,就可以啦 以下是源码送 ...

  10. python实现redis分布式锁

    https://www.cnblogs.com/wangwei916797941/p/10030805.html