Docker compose
Docker compose
- 简介
- yaml 官方示例
- 安装
- 查看版本
- docker-compose version
- 卸载
- 使用
- 构建
- 启动
- docker-compose up
- 停止
- docker-compose stop
- 停止并删除容器和网络
- docker-compose down
- 更多配置
- yaml编写规则:
- docker-compose.yml 核心所在
- 启动顺序
简介
使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build
、docker 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相关推荐
- Docker compose 容器编排
1. 概述 问题:如果要使用 Docker 运行 LNMP 架构,那么 Nginx.MySQL.PHP. Linux三个服务运行在一个容器里,还是运行在多个容器里呢? 答案是都可以. 你可以分别放在三 ...
- Docker核心技术之Docker Compose
一.Docker Compose 简介 Docker Compose是什么? Docker Compose是一个能一次性定义和管理多个Docker容器的工具. 详细地说: Compose中定义和启动的 ...
- Docker Compose 1.18.0 之服务编排详解
一个使用Docker容器的应用,通常由多个容器组成.使用Docker Compose,不再需要使用shell脚本来启动容器.在配置文件中,所有的容器通过services来定义,然后使用docker-c ...
- Centos7 Docker Compose部署mysql5.7
1 . 创建docker-compose.yml文件 version: '3' services:mysql:restart: alwaysimage: mysql:5.7.22container_n ...
- Docker Compose安装
一 . Docker Compose概述 Docker Compose是一个用于定义和运行多个容器Docker应用程序的工具.使用Compose,您可以使用YAML文件来配置应用程序的服务.然后 , ...
- Docker(八):Docker Compose
Docker Compose Compose 简介 Compose 是用于定义和运行多容器 Docker 应用程序的工具.通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务.然 ...
- Docker compose多容器管理
前言 Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器(contaienr). Docker Compose 运行的目录下的所有文件(doc ...
- Docker Compose—简化复杂容器应用的利器
Compose是用于定义和运行复杂Docker应用的工具.你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成. 1. 安装Docker和Compo ...
- Spring Boot 2.0(五):Docker Compose + Spring Boot + Nginx + Mysql 实践
我知道大家这段时间看了我写关于 docker 相关的几篇文章,不疼不痒的,仍然没有感受 docker 的便利,是的,我也是这样认为的,I know your felling . 前期了解概念什么的确实 ...
- Windows 系统安装Docker Compose 步骤
参考 Docker Compose official 官方安装指南: https://docs.docker.com/compose/install/ 实际上到目前为止还不能直接在Windows上安装 ...
最新文章
- flutter git 拉不起来_「干货」Flutter开发环境配置备忘录
- 【转】Loadrunner入门(《软件性能测试过程详解与案例剖析》)
- java加密解密代码_base64位加密解密原理及js代码实现
- 「场景化」增长的践行者:探寻大数据时代的商业变革
- 2019编译ffepeg vs_2020/5-Win10下ffmpeg最简编译方法
- 临床医学与计算机考研哪个好考,临床医学考研院校难度概况
- java sleep 循环_while循环中的Thread.sleep()
- A Spy in the Metro UVA - 1025
- 学习日记2、easyui treeGrid属性及时间
- String字符串工具类 StringUtils.java
- 什么叫侧面指纹识别_屏幕指纹技术最强的3款全面屏手机,指纹识别技术手机你喜欢吗?...
- go语言--正则表达式过滤数据--通过文件获取数据
- Python设计模式:旁观者模式
- Python根据歌曲id爬取网易云音乐歌词
- Java语言设计文本查找器和文本编辑器
- ReflectionException: There is no setter for property named ‘createTime‘ in ‘class XXX‘
- javascript面向对象的三大特性
- 图论-度序列可图性判断(Havel-Hakimi定理)
- NanoPC-T4|Android-Q 色温调节
- 《Frustum PointNets for 3D Object Detection from RGB-D Data》中文翻译
热门文章
- 麒麟系统开机出现死机,找不到可用打印机处理方法
- tensorflow自己实现SGD功能
- 518PHP漏洞,ThinkPHP5 核心类 Request 远程代码漏洞分析
- Linux 字符设备驱动结构(一)—— cdev 结构体、设备号相关知识解析
- 解决cmd或IDEA启动数据库时:发生系统错误5 拒绝访问的方案
- 【C#语言】MDI窗体
- 关于一场“信任危机”
- Nodejs入门 (四) 包管理工具(npm、cnpm、yarn、nvm)
- InvalidateRect只是增加重绘区域,在下次WM_PAINT的时候才生效
- 少林绝技是不评成果的—成果导向应当废除