Docker compose

  • 简介
    • yaml 官方示例
  • 安装
    • 查看版本
      • docker-compose version
  • 卸载
  • 使用
    • 构建
    • 启动
      • docker-compose up
    • 停止
      • docker-compose stop
    • 停止并删除容器和网络
      • docker-compose down
  • 更多配置
  • yaml编写规则:
    • docker-compose.yml 核心所在
    • 启动顺序

简介

使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker builddocker run 等命令操作容器。

然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,这样效率很低,也不方便管理。

使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。

yaml 官方示例

https://docs.docker.com/compose/compose-file/compose-file-v3/#compose-file-structure-and-examples

depends_on:依赖关系,如 web 依赖 redis 和 db,通过 depends_on 表明关系。

version: "3.9"
services:web:build: .depends_on:- db- redisredis:image: redisdb:image: postgres

安装

Docker Compose 是 Docker 的一个开源项目,目前托管到了 GitHub,需要前往 GitHub 下载。

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

由于存放在 GitHub,国内网络限制导致不太稳定,不推荐使用。

推荐使用 道客 提供的 Docker 极速下载 进行安装。

curl -L https://get.daocloud.io/docker/compose/releases/download/v2.2.3/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

安装

[root@sail ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/v2.2.3/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
[root@sail ~]# cd /usr/local/bin/
[root@sail bin]# ls
docker-compose

这样即表示安装成功。

授权

[root@sail ~]# chmod +x /usr/local/bin/docker-compose

查看版本

docker-compose version

[root@sail bin]# docker-compose version
Docker Compose version v2.2.3

显示了版本即代表 Docker Compose 安装完成。

卸载

rm /usr/local/bin/docker-compose

由于 Linux 一切皆文件,删除此文件夹即可完成 Docker Compose 的卸载。

使用

构建

创建项目目录

[root@sail sail]# mkdir docker-compose
[root@sail sail]# cd docker-compose

创建 app.py

[root@sail docker-compose]# vim app.py
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():retries = 5while True:try:return cache.incr('hits')except redis.exceptions.ConnectionError as exc:if retries == 0:raise excretries -= 1time.sleep(0.5)
@app.route('/')
def hello():count = get_hit_count()return 'Hello World! I have been seen {} times.\n'.format(count)

redis 是应用容器中 redis 容器的主机名,在同一网络下可以通过服务名访问,端口默认 6379。

创建 requirements.txt

[root@sail docker-compose]# vim requirements.txt
[root@sail docker-compose]# cat requirements.txt
flask
redis

创建 Dockerfile

[root@sail docker-compose]# vim Dockerfile
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

创建 docker-compose.yml

[root@sail docker-compose]# vim docker-compose.yml
version: "3.3"
services:web:build: .ports:- "5000:5000"redis:image: "redis:alpine"

这个文件定义了两个服务:web 和 redis。

启动

docker-compose up

运行应用

在项目目录中,运行 docker-compose up 来启动应用程序。

第一次启动需要安装很多环境,比较缓慢。

[root@sail docker-compose]# docker-compose up

查看镜像

[root@sail docker-compose]# docker images

启动 Docker Compose 时,会自动拉取需要的镜像。

查看容器

[root@sail docker-compose]# docker ps

可以看到容器命名都带有数字,是因为需要集群管理,数字代表副本序号。

查看网络

[root@sail docker-compose]# docker network ls

项目中的内容都在同个网络下。

访问测试

[root@sail docker-compose]# curl localhost:5000
Hello World! I have been seen 1 times.
[root@sail docker-compose]# curl localhost:5000
Hello World! I have been seen 2 times.

Docker Compose 启动完成。

停止

docker-compose stop

示例

[root@sail docker-compose]# docker-compose stop
[+] Running 2/2⠿ Container docker-compose-redis-1  Stopped                                                                                                                    0.2s⠿ Container docker-compose-web-1    Stopped

停止并删除容器和网络

docker-compose down

docker-compose down 或者 ctrl + c
docker-compose通过编写docker-compose yml文件 可以通过compose一键启动或者停止!

将会删除启动的容器以及自动建的网络

示例

[root@sail docker-compose]# docker-compose down
[+] Running 3/3⠿ Container docker-compose-web-1    Removed                                                                                                                              10.2s⠿ Container docker-compose-redis-1  Removed                                                                                                                               0.2s⠿ Network docker-compose_default    Removed
[root@sail docker-compose]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@sail docker-compose]# docker network ls

可以看出,容器网络都被删除了。

更多配置

https://docs.docker.com/compose/compose-file/compose-file-v3/#compose-file-structure-and-examples


yaml编写规则:

官方配置文档:https://docs.docker.com/compose/compose-file/compose-file-v3/#depends_on

docker-compose.yml 核心所在

#三层
version: "3.9" #版本
services: #服务web:images:bulid:ports:network:...redis:...mysql:...
#第三层 其他配置 网络、数据卷、全局配置
networks:frontend:backend:
volumes:db-data:
configs:

启动顺序

version: "3.9"
services:web: # 3build: .depends_on:- db- redisredis: # 2image: redisdb: # 1image: postgres

官网练习 compose一键部署wordpress
https://docs.docker.com/samples/wordpress/

Docker compose相关推荐

  1. Docker compose 容器编排

    1. 概述 问题:如果要使用 Docker 运行 LNMP 架构,那么 Nginx.MySQL.PHP. Linux三个服务运行在一个容器里,还是运行在多个容器里呢? 答案是都可以. 你可以分别放在三 ...

  2. Docker核心技术之Docker Compose

    一.Docker Compose 简介 Docker Compose是什么? Docker Compose是一个能一次性定义和管理多个Docker容器的工具. 详细地说: Compose中定义和启动的 ...

  3. Docker Compose 1.18.0 之服务编排详解

    一个使用Docker容器的应用,通常由多个容器组成.使用Docker Compose,不再需要使用shell脚本来启动容器.在配置文件中,所有的容器通过services来定义,然后使用docker-c ...

  4. Centos7 Docker Compose部署mysql5.7

    1 . 创建docker-compose.yml文件 version: '3' services:mysql:restart: alwaysimage: mysql:5.7.22container_n ...

  5. Docker Compose安装

    一 .  Docker Compose概述 Docker Compose是一个用于定义和运行多个容器Docker应用程序的工具.使用Compose,您可以使用YAML文件来配置应用程序的服务.然后 , ...

  6. Docker(八):Docker Compose

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

  7. Docker compose多容器管理

    前言 Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器(contaienr). Docker Compose 运行的目录下的所有文件(doc ...

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

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

  9. Spring Boot 2.0(五):Docker Compose + Spring Boot + Nginx + Mysql 实践

    我知道大家这段时间看了我写关于 docker 相关的几篇文章,不疼不痒的,仍然没有感受 docker 的便利,是的,我也是这样认为的,I know your felling . 前期了解概念什么的确实 ...

  10. Windows 系统安装Docker Compose 步骤

    参考 Docker Compose official 官方安装指南: https://docs.docker.com/compose/install/ 实际上到目前为止还不能直接在Windows上安装 ...

最新文章

  1. flutter git 拉不起来_「干货」Flutter开发环境配置备忘录
  2. 【转】Loadrunner入门(《软件性能测试过程详解与案例剖析》)
  3. java加密解密代码_base64位加密解密原理及js代码实现
  4. 「场景化」增长的践行者:探寻大数据时代的商业变革
  5. 2019编译ffepeg vs_2020/5-Win10下ffmpeg最简编译方法
  6. 临床医学与计算机考研哪个好考,临床医学考研院校难度概况
  7. java sleep 循环_while循环中的Thread.sleep()
  8. A Spy in the Metro UVA - 1025
  9. 学习日记2、easyui treeGrid属性及时间
  10. String字符串工具类 StringUtils.java
  11. 什么叫侧面指纹识别_屏幕指纹技术最强的3款全面屏手机,指纹识别技术手机你喜欢吗?...
  12. go语言--正则表达式过滤数据--通过文件获取数据
  13. Python设计模式:旁观者模式
  14. Python根据歌曲id爬取网易云音乐歌词
  15. Java语言设计文本查找器和文本编辑器
  16. ReflectionException: There is no setter for property named ‘createTime‘ in ‘class XXX‘
  17. javascript面向对象的三大特性
  18. 图论-度序列可图性判断(Havel-Hakimi定理)
  19. NanoPC-T4|Android-Q 色温调节
  20. 《Frustum PointNets for 3D Object Detection from RGB-D Data》中文翻译

热门文章

  1. 麒麟系统开机出现死机,找不到可用打印机处理方法
  2. tensorflow自己实现SGD功能
  3. 518PHP漏洞,ThinkPHP5 核心类 Request 远程代码漏洞分析
  4. Linux 字符设备驱动结构(一)—— cdev 结构体、设备号相关知识解析
  5. 解决cmd或IDEA启动数据库时:发生系统错误5 拒绝访问的方案
  6. 【C#语言】MDI窗体
  7. 关于一场“信任危机”
  8. Nodejs入门 (四) 包管理工具(npm、cnpm、yarn、nvm)
  9. InvalidateRect只是增加重绘区域,在下次WM_PAINT的时候才生效
  10. 少林绝技是不评成果的—成果导向应当废除