Docker学*笔记(五)-Docker Compose

发布于:2021-10-22 10:22:12

背景

很多应用是很复杂的,需要多个容器共同支持,任何复杂的系统可能需要启动的容器数量也很庞大,我们需要从Dockerfile build image或者docker hub拉取多个image,要创建并管理多个container,这个工作量是巨大的,docker compose应运而生


Docker Compose是什么

Docker Compose帮我们启动错综复杂的容器,开发测试人员只要提供一份docker-compose.yml文件即可,如图:


Docker Compose是一个基于docker的命令行工具可以通过一个yml文件定义多容器的docker应用通过一条命令docker-compose up就可以根据yml文件的定义去创建管理多个容器

例如我们运行一个WordPress,需要运行两个容器,一个运行WordPress,一个运行mysql服务,我们可以如下编写docker-compose.yml:


version:3.4
services:
wordpress:
image:wordpress
ports:
--8080:80
environment:
WORDPRESS_DB_HOST:mysql
WORDPRESS_DB_PASSWORD:root
networks:
-mybridge

mysql:
image:mysql
environment:
MYSQL_ROOT_PASSWORD:root
MYSQL_DATABASE:wordpress
volumes:
-mysql-data:/var/lib/mysql
networks:
-mybridge

volumes:
mysql-data:

networks
mybridge:
driver:bridge

通过运行docker-compose up命令启动yml文件,就可以启动两个service(container)组成一个WordPress服务。


docker-compose.yml有三个核心概念


services

一个service代表一个containeservice的启动类似docker run,可以指定network和volumevolumes

定义容器使用的存储networks

定义容器使用的网络

docker-compose updocker run之间的关系,对于一个简单的docker-compose.yml:


services
db:
image:mysql
volumes:
- "db-data:/var/lib/mysql/data"
networks:
- mynet

运行上述docker-compose.yml就相当于运行:


docker run -d --network mynet -v db-data:/var/lib/mysql/data mysql
Docker Compose安装

(1)下载


sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

(2)赋予可执行权限


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

(3)测试安装结果


docker-compose --version
Docker Compose相关命令

docker-compose up
(docker-compose up -d) # 后台运行
docker-compose stop # 停止
docker-compose start # 启动
docker-compose ps # 列出compose容器
docker-compose exec xxx bash # 进入compose容器内

docker-compose方便快速拓展,例如将某个服务中的web服务水*拓展成三个,可以通过如下命令:


docker-compose up --scale web=3 -d
容器编排-Docker Swarm简介

以上所说的docker compose是建立在一个物理机器上的容器启动,如果多个物理机运行多个容器的时候docker-compose就显得有些捉襟见肘,这时候docker官方提供了Swarm来帮助我们管理多个容器,Docker Swarm是我们可以通过一个命令行管理多个物理机上的docker容器,如图:

Docker Swarm可以帮助我们:


管理多个物理机的多个docker容器方便容器的横向拓展自动回复down掉的容器在不影响业务的情况下更新容器监控追踪多个容器保护隐私数据等……

根据多个物理机我们可以搭建一个swarm集群,通过swarm运行service相当于运行一个容器(和docker compose类似),会随机在swarm节点上创建,对应命令为:


docker service create --name myswarm xxx/xxx

在容器编排技术中,Swarm,Kubernetes,Mesos各有所长,Swarm是docker原生的api,上手快速使用简单。但是在功能和社区活跃度上比不上Kubernetes,Mesos,docker+kubernetes是目前大部分公司运维团队容器编排使用的技术,后续会学*kubernetes。

相关推荐

最新更新

猜你喜欢