以下内容来自于《深入浅出Docker》第九章内容,但是发布的时候选择翻译或者转载需要上链接,很麻烦,就直接选择原创了。
DC是一个基于Docker引擎进行安装的Python工具,可以使用户在一个声明式的配置文件中定义一个多容器的应用,即一个应用可以拆分成不同的功能部分,部署在多个容器中,但这些容器位于同一个主机上。
先说一下DC的安装吧,很简单,在官网扒拉的,就三条命令,正确返回版本值表示安装成功:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
但是有的时候linux连接github太慢了导致安装失败,所以备用办法是,直接用
pip install docker-compose
这个命令最好在root权限下执行,不然会报错,我的是这样。
安装好了工具之后,就来看看怎么用。
首先看一下DC的文件,Docker Compose通过一个声明式的配置文件描述整个应用,使用YAML文件定义多服务的应用,YAML是JSON的一个子集,因此也可以使用JSON;默认使用docker-compose.yml,可以使用-f参数指定具体文件。文件的格式是典型的key-value格式,示例文件如下:
version: "3.5"
services:
web-fe:
build: .
command: python app.py
ports:
- target: 5000
published: 5000
networks:
- counter-net
volumes:
- type: volume
source: counter-vol
target: /code
redis:
image: "redis:alpine"
networks:
counter-net:
networks:
counter-net:
volumes:
counter-vol:
文件第一行是version,是必须指定的,定义了Compose文件格式(主要是API)的版本,建议使用最新版本
services用于定义不同的应用服务,DC会将每个服务部署在各自的容器中,本实例中定义了两个服务,web-fe和redis,因此会部署两个容器,web-fe的服务定义中,
build: .指定docker基于当前目录下Dockerfile中定义的指令来构建一个新镜像,该镜像用于启动该服务的容器
command:python app.py 指定Docker在容器中执行名为app.py的Python脚本作为主程序。
ports: 指定Docker将容器内(-target)的5000端口映射到主机(published)的5000端口,这意味着发到Docker主机5000端口的流量会被转发到容器的5000端口,容
器中的应用监听5000端口。
networks: 使得Docker可以将服务连接到指定的网络上,这个网络应该是已经存在的,或者是在networks中定义的网络。对于overlay网络来说,还需要定义一个
attachable标志,这样独立的容器才可以连接上它。
volumes:指定Docker将counter-vol卷(source:)挂载到容器内的/code(target:)。counter-vol卷应该是已经存在的,或者在文件下方的volumes中定义的。
redis服务的定义相对比较简单:
image: "redis:alpine"使得docker基于redis:alpine镜像启动一个独立的名为redis的容器,这个镜像从dockerhub上面被拉取下来。
networks: 配置redis容器连接到 counter-net网络
由于两个服务都连接到 counter-net网络,因此它们可以通过名称解析到对方的地址了。
networks用于指引Docker创建新的网络,默认情况下,DC会创建bridge网络,这是单主机网络,只能实现同一主机容器的连接,可以使用driver属性指定不同网络类型。
volumes用于指引Docker来创建新的卷。
接下来进行实际演示:
在github上面拉取或者直接下载zip压缩包,将其解压后得到包含源码的文件夹,进入该文件夹,运行
docker-compose up &
&意味着在前端运行,运行后会把命令窗口返回给主机,而且也可以在命令行窗口看到程序运行时的日志,也可以添加-f参数指定yml的文件名,-d代表后台运行。运行后
可以在浏览器输入docker主机地址:5000,就可以看到网页了。
docker-compose down
关闭正在运行的容器,但是镜像和卷并不会被删除。
就记录这么多吧,接下来是docker swarm了。