Docker Compose 概述与安装?

  • 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知
  • 使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具

安装 Docker Compose

  • 安装 Docker Compose 可以通过下面命令自动下载适应版本的 Compose,并为安装脚本添加执行权限
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

  

  • 查看安装是否成功
docker-compose -v

  

快速入门

  • 打包项目,获得 jar 包 docker-demo-0.0.1-SNAPSHOT.jar
mvn clean package

  

  • 在 jar 包所在路径创建 Dockerfile 文件,添加以下内容
FROM java:8
VOLUME /tmp
ADD docker-demo-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 9000
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

  

  • 在 jar 包所在路径创建文件 docker-compose.yml,添加以下内容
version: '2' # 表示该 Docker-Compose 文件使用的是 Version 2 file
services:
docker-demo: # 指定服务名称
build: . # 指定 Dockerfile 所在路径
ports: # 指定端口映射
- "9000:8761"

  

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

  

工程、服务、容器

  • Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)
  • Docker Compose 运行目录下的所有文件(docker-compose.yml)组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例

Docker Compose 常用命令与配置

常见命令

  • ps:列出所有运行容器
docker-compose ps

  

  • logs:查看服务日志输出
docker-compose logs

  

  • port:打印绑定的公共端口,下面命令可以输出 eureka 服务 8761 端口所绑定的公共端口
docker-compose port eureka 8761

  

  • build:构建或者重新构建服务
docker-compose build

  

  • start:启动指定服务已存在的容器
docker-compose start eureka

  

  • stop:停止已运行的服务的容器
docker-compose stop eureka

  

  • rm:删除指定服务的容器
docker-compose rm eureka

  

  • up:构建、启动容器
docker-compose up

  

  • kill:通过发送 SIGKILL 信号来停止指定服务的容器
docker-compose kill eureka

  

  • pull:下载服务镜像
  • scale:设置指定服务运气容器的个数,以 service=num 形式指定
docker-compose scale user=3 movie=3

  

  • run:在一个服务上执行一个命令
docker-compose run web bash

  

docker-compose.yml 属性

  • version:指定 docker-compose.yml 文件的写法格式
  • services:多个容器集合
  • build:配置构建时,Compose 会利用它自动构建镜像,该值可以是一个路径,也可以是一个对象,用于指定 Dockerfile 参数
build: ./dir
---------------
build:
context: ./dir
dockerfile: Dockerfile
args:
buildno: 1

  

  • command:覆盖容器启动后默认执行的命令
command: bundle exec thin -p 3000
----------------------------------
command: [bundle,exec,thin,-p,3000]
  • dns:配置 dns 服务器,可以是一个值或列表
dns: 8.8.8.8
------------
dns:
- 8.8.8.8
- 9.9.9.9
  • dns_search:配置 DNS 搜索域,可以是一个值或列表
dns_search: example.com
------------------------
dns_search:
- dc1.example.com
- dc2.example.com
  • environment:环境变量配置,可以用数组或字典两种方式
environment:
RACK_ENV: development
SHOW: 'ture'
-------------------------
environment:
- RACK_ENV=development
- SHOW=ture
  • env_file:从文件中获取环境变量,可以指定一个文件路径或路径列表,其优先级低于 environment 指定的环境变量
env_file: .env
---------------
env_file:
- ./common.env
  • expose:暴露端口,只将端口暴露给连接的服务,而不暴露给主机
expose:
- "3000"
- "8000"
  • image:指定服务所使用的镜像
image: java
  • network_mode:设置网络模式
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
  • ports:对外暴露的端口定义,和 expose 对应
ports:   # 暴露端口信息  - "宿主机端口:容器暴露端口"
- "8763:8763"
- "8763:8763"
  • links:将指定容器连接到当前连接,可以设置别名,避免ip方式导致的容器重启动态改变的无法连接情况
links:    # 指定服务名称:别名
- docker-compose-eureka-server:compose-eureka
  • volumes:卷挂载路径
volumes:
- /lib
- /var
  • logs:日志输出信息
--no-color          单色输出,不显示其他颜.
-f, --follow 跟踪日志输出,就是可以实时查看日志
-t, --timestamps 显示时间戳
--tail 从日志的结尾显示,--tail=200

Docker Compose 其它

更新容器

  • 当服务的配置发生更改时,可使用 docker-compose up 命令更新配置
  • 此时,Compose 会删除旧容器并创建新容器,新容器会以不同的 IP 地址加入网络,名称保持不变,任何指向旧容起的连接都会被关闭,重新找到新容器并连接上去

links

  • 服务之间可以使用服务名称相互访问,links 允许定义一个别名,从而使用该别名访问其它服务
version: '2'
services:
web:
build: .
links:
- "db:database"
db:
image: postgres
  • 这样 Web 服务就可以使用 db 或 database 作为 hostname 访问 db 服务了

链接:https://www.jianshu.com/p/658911a8cff3

Docker:Docker Compose 详解的更多相关文章

  1. Docker系列10—容器编排工具Docker Compose详解

    本文收录在容器技术学习系列文章总目录 1.Docker Compose 概述 Compose是一个用于定义和运行多容器Docker应用程序的工具.使用Compose,您可以使用Compose文件来配置 ...

  2. Docker常用命令详解

    docker ps 查看当前正在运行的容器 docker ps -a 查看所有容器的状态 docker start/stop id/name 启动/停止某个容器 docker attach id 进入 ...

  3. 【转】docker配置参数详解---/etc/docker/daemon.json完整参数

    docker-daemon.json各配置详解 { “api-cors-header”:"", ——————在引擎API中设置CORS标头 “authorization-plugi ...

  4. Docker网络模式详解

    一.Docker四种工作模式 安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络). none .hosthost:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用 ...

  5. CentOS7下如何正确安装并启动Docker(图文详解)

    我使用了CentOS 7操作系统,可以非常容易地安装Docker环境.假设,下面我们都是用root用户进行操作,执行如下命令进行准备工作: yum install -y yum-utils yum-c ...

  6. Apache Dolphin Scheduler - Docker Compose 详解

    Apache DolphinScheduler 是一个分布式去中心化,易扩展的可视化 DAG 工作流任务调度系统.简称 DS,包括 Web 及若干服务,它依赖 PostgreSQL 和 Zookeep ...

  7. (转)Docker入门——Dockerfile详解

    转:https://www.cnblogs.com/sorex/p/6481407.html 基本示例 FROM MAINTAINER LABEL RUN ADD COPY CMD ENTRYPOIN ...

  8. Docker 网络模式详解及容器间网络通信

    当项目大规模使用 Docker 时,容器通信的问题也就产生了.要解决容器通信问题,必须先了解很多关于网络的知识.Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜 ...

  9. Docker:DockerFile详解与实例

    基本结构 Dockerfile 由一行行命令语句组成,并且支持已 # 开头的注释行. 一般而言,Dockerfile 的内容分为四个部分: 基础镜像信息. 维护者信息. 镜像操作指令. 容器启动时执行 ...

随机推荐

  1. mock打桩测试

    pom依赖: <!-- https://mvnrepository.com/artifact/org.jmockit/jmockit --> <dependency> < ...

  2. body onload()事件和table insertRow()、tr insertCell()

    onload事件: 定义和用法: onload 事件会在页面或图像加载完成后立即发生. onload 通常用于 <body> 元素,在页面完全载入后(包括图片.css文件等等.)执行脚本代 ...

  3. FreeRTOS 任务挂起和恢复

    在使用RTOS的时候一个实时应用可以作为一个独立的任务.每个任务都有自己的运行环境, 不依赖于系统中其他的任务或者RTOS调度器. 任何一个时间点只能有一个任务运行,具体运行哪个任务是由RTOS调度器 ...

  4. Docker学习笔记(2)--Docker常用命令

    1. 查看docker信息(version.info) # 查看docker版本 $docker version # 显示docker系统的信息 $docker info 2. 对image的操作(s ...

  5. [Docker][ansible-playbook]3 持续集成环境之分布式部署

    预计阅读时间: 30分钟 本期解决痛点如下:1. 代码版本的多样性,编译环境的多样性如何解决?答案是使用docker,将不同的编译环境images统统打包到私有仓库上,根据需求进行下载,从宿主机上挂载 ...

  6. KubeEdge,一个Kubernetes原生边缘计算框架

    ​KubeEdge成为第一个Kubernetes原生边缘计算平台,Edge和云组件现已开源! 开源边缘计算正在经历其业界最具活力的发展阶段.如此多的开源平台,如此多的整合以及如此多的标准化举措!这显示 ...

  7. jFinal的小知识点总结

    sql批处理 // 批处理sql List<String> sqlList = new ArrayList<String>(); sqlList.add("delet ...

  8. python在算法题中判断输入结束(EOF)

    有些算法题是这样要求的,一行输入一行数据,然后没有规定我要输入多少行,你要自行判断文件结束EOF,否则是会runtime error的,因为oj内部都是用文件来进行读写的. 例如a+b,每一行输入a ...

  9. Ajax 的简介与使用

    一.什么是Ajax Ajax 的全称是 Asynchronous JavaScript and XML(即异步的 JavaScript 和 XML),是一种在无需重新加载整个网页的情况下,能够更新部分 ...

  10. ZZNU - OJ - 2080 : A+B or A-B【暴力枚举】

    2080 : A+B or A-B(点击左侧标题进入zznu原题页面) 时间限制:1 Sec 内存限制:0 MiB提交:8 答案正确:3 提交 状态 讨论区 题目描述 Give you three s ...