解决使用Docker Compose管理容器的问题

在Docker的设计中,一个容器只运行一个应用。但是目前的绝大多数应用系统都不是一个应用就可以组成的。虽然之前提到了容器间互相连接、交换数据的方法,使用这些方法也确实能搭建起一个完整应用系统的容器群。但是,需要执行很多命令,需要考虑很多应用和容器间的关系,而Docker Compose正是为了解决这些复杂的操作。

解决容器管理问题

就拿最简单的例⼦来说吧,如果我们要为我们的应⽤容器准备⼀个 MySQL 容器和⼀个 Redis 容器,那么在每次启动时,我们先要将 MySQL 容器和 Redis 容器启动起来,再将应⽤容器运⾏起来。这其中还不要忘了在创建应⽤容器时将容器⽹络连接到 MySQL 容器和 Redis 容器上,以便应⽤连接上它们并进⾏数据交换。

这还不够,如果我们还对容器进⾏了各种配置,我们最好还得将容器创建和配置的命令保存下来,以便下次可以直接使⽤。

如果我们要想让这套体系像 docker run 和 docker rm 那样⾃如的进⾏⽆痕切换,那就更加⿇烦了,我们可能需要编写⼀些脚本才能不⾄于被绕到命令的⽑线球⾥。

其实核⼼还是缺少⼀个对容器组合进⾏管理的东西。

Docker Compose

Docker Compose :多容器定义和运行软件。在Docker Compose中,根据一个配置文件,将所有与应用系统相关的应用和对应的容器进行配置,再根据Docker Compose提供的命令进行启动,就可以解决上面说的多容器之间的复杂问题。 Docker Compose可以理解为是将多个容器的运行方式和配置固化,类似与Dockerfile 对于镜像的作用。

安装Docker Compose

#下载
curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

#设置权限
chmod +x /usr/local/bin/docker-compose

#查看安装后的信息
docker-compose version

Docker Compose的基本使用

Docker Compose的核心是它的配置文件,是一个基于YAML格式的文件。与Dockerfile采用Dockerfile这个名字作为镜像构建定义的默认文件名一样,Docker Compose的配置文件也有一个默认的文件名docker-compose.yml
一个简单的配置内容

version: '3'
services:
	webapp:
		build: ./image/webapp
		ports:
			- "5000:5000"
		volumes:
			- ./code:/code
			- logvolume:/var/log
		links:
			- mysql
			- redis
	redis:
		image: redis:3.2
	mysql:
		image: mysql:5.7
		environment:
			- MYSQL_ROOT_PASSWORD=my-secret-pw
volumes:
	logvolume: {}

Docker Compose 配置⽂件⾥可以包含许多内容,从每个容器的各个细节控制,到⽹络、数据卷等的定义。

version是Docker Compose的版本号,最新的是3。services是配置的核心,定义了容器的各项细节。每个services代表的是一个应用集群的配置

启动和停止

启动
docker-compose up,会根据配置文件创建配置的所有容器、网络、数据卷等内容,并将它们启动。与docker run命令类似,并且都是前台启动,如果要以守护进程方式启动也需要加-d

docker-compose up -d

docker-compose up会默认识别当前控制台所在目录的docker-compose.yml文件,如果要指定目录可以通过-f命令,指定项目名可以通过-t命令

docker-compose -f ./compose/docker-compose.yml -p myapp up -d

停止
docker-compose down命令用于停止所有容器,并将它们删除,同时删除网络等配置。也就是⼏乎将这个 Docker Compose 项⽬的所有影响从 Docker 中清除。

容器命令

这些命令看上去都和 Docker Engine 中对单个容器进⾏操作的命令类似,我们来看⼏个常见的。
在 Docker Engine 中,如果我们想要查看容器中主进程的输出内容,可以使⽤ docker logs 命令。⽽由于在 Docker Compose 下运⾏的服务,其命名都是由 Docker Compose ⾃动完成的,如果我们直接使⽤docker logs 就需要先找到容器的名字,这显然有些⿇烦了。我们可以直接使⽤ docker-compose logs 命令来完成这项⼯作。

docker-compose logs nginx

同理,在 Docker Compose 还有⼏个类似的命令可以单独控制某个或某些服务。
通过 docker-compose createdocker-compose startdocker-compose stop 我们可以实现与 docker createdocker startdocker stop 相似的效果,只不过操作的对象由 Docker Engine 中的容器变为了 Docker Compose 中的服务。

到此这篇关于使用Docker Compose管理容器的文章就介绍到这了,更多相关Docker Compose管理容器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(解决使用Docker Compose管理容器的问题)