失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > docker 之容器编排工具Docker Compose

docker 之容器编排工具Docker Compose

时间:2022-08-12 22:18:15

相关推荐

docker 之容器编排工具Docker Compose

1.1 Docker Compose 简介

Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用

Compose文件来配置应用程序的服务。然后,使用单个命令,您可以从配置中创建并启动所有服务。

Compose非常适合开发,测试和登台环境以及CI工作流程。

(1)官方文档

Docker官网上提供了完整的文档

Compose的代码存储库位于GitHit

(2)使用Compose基本上是一个三步过程

定义您的应用程序环境,Dockerfile以便可以在任何地方进行复制。定义构成应用程序的服务,docker-compose.yml以便它们可以在隔离环境中一起运行。最后,运行docker-compose up和Compose将启动并运行整个应用程序。

(3)一个 docker-compose.yml 文件案例:

version: '2'

services:

web:

build: .

ports:

- "5000:5000"

volumes:

- .:/code

redis:

image: redis

有关Compose文件的详细信息,请参阅Compose文件参考

(4)Compose具有管理应用程序整个生命周期的命令:

启动,停止和重建服务查看正在运行的服务的状态流式传输运行服务的日志输出在服务上运行一次性命令

1.2 Docker Compose 安装

1.2.1 安装条件

(1)前提

Docker Compose 依靠Docker Engine 进行任何有意义的工作,因此请确保您已在本地或远程安装Docker Engine,具体取决于您的设置。

要以非root用户身份运行Compose,请参阅以非root用户身份管理Docker

(2)安装系统(主要讲linux、pip安装)

LinuxMacWindows备用安装选项(使用pip安装/安装为容器)

1.2.2 在Linux系统上安装Compose

(1)下载安装

在gitlab/docker/compose/releases上查询下载合适版本

我这里下载的是1.23.2 版本

$ sudo curl -L

/docker/compose/releases/download/1.23.2/docker-compose-Linux-

x86_64 -o /usr/local/bin/docker-compose

(2)添加执行权限

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

(3)安装完成,查询版本

$ docker-compose --versiondocker-compose version 1.23.2, build 1110ad01

1.2.3 备用安装选项(使用pip安装/安装为容器)

1.2.3.1 使用pip安装

可以使用pypi安装Compose pip。如果你安装使用pip,我们建议你使用 virtualenv,因为许多操作系统都有python系统包与docker-compose依赖项冲突。请参阅virtualenv教程开始使用。

$ pip install docker-compose

如果你没有使用virtualenv

$ sudo pip install docker-compose

注:需要6.0或更高版本的pip。

1.2.3.2 安装为容器

Compose也可以在一个容器内运行,来自一个小的bash脚本包装器。要将compose安装为容器,请运行此命令。如果此示例已过期,请务必将版本号替换为所需的版本号:

$ sudo curl -L --fail/docker/compose/releases/download/{{pose_version}}/run.sh -o /usr/local/bin/docker-compose$ sudo chmod +x /usr/local/bin/docker-compose

1.2.4 其他系统安装

1.2.4.1 在macOS上安装Compose

Docker Desktop for Mac和Docker Toolbox已经包含Compose和其他Docker应用程序,因此Mac用户无需单独安装Compose。Docker安装说明如下:

获取适用于Docker Desktop

获取Docker Toolbox(使用于旧系统)

1.2.4.2 在Windows系统上安装Compose

Docker Desktop for Windows和Docker Toolbox已经包含Compose和其他Docker应用程序,因此大多数Windows用户不需要单独安装Compose。Docker安装说明如下:

获取使用于Windows的Docker Desktop

获取Docker Toolbox(适用于旧系统)

如果您直接在Microsoft Windows Server 上运行Docker守护程序和客户端(使用于Windows Server 的Docker EE,则需要安装Docker Compose.为此,请按照此链接操作)

1.2.5 Docker Compose 升级

如果从Compose 1.2或更早版本升级,请在升级Compose后删除或迁移现有容器。这是因为,从版本1.3开始,Compose使用Docker标签来跟踪容器,并且需要重新创建容器以添加标签。

如果Compose检测到没有标签创建的容器,它将拒绝运行,因此您最终不会使用两组。如果要继续使用现有容器(例如,因为它们具有要保留的数据卷),可以使用Compose 1.5.x使用以下命令迁移它们:

docker-compose migrate-to-labels

或者,如果您不担心保留它们,可以将它们删除。撰写只是创建新的。

docker container rm -f -v myapp_web_1 myapp_db_1 ...

1.2.6 Docker Compose 卸载

正常系统安装卸载:

sudo rm /usr/local/bin/docker-compose

pip安装卸载:

pip uninstall docker-compose

1.3 一个完整的Docker Compose 运用演示

1.3.1 compose 准备

(1)创建compose 工作目录

[root@localhost ~]# mkdir composetest[root@localhost ~]# cd composetest/

(2)创建一个app.py文件,后面在项目目录中调用文件

[root@localhost composetest]# vim app.pyimport timeimport redisfrom flask import Flaskapp = 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)if __name__ == "__main__":app.run(host="0.0.0.0", debug=True)

注:redis是应用程序网络上redis容器的主机名。我们使用Redis的默认端口6379。

(3)创建requirements.txt 项目目录中调用的另一个文件

[root@localhost composetest]# vim requirements.txtflaskredis

1.3.2 创建Dockerfile,用于启动一个简单的容器

创建一个名为的文件Dockerfile

[root@localhost composetest]# vim DockerfileFROM python:3.4-alpineADD . /codeWORKDIR /codeRUN pip install -r requirements.txtCMD ["python", "app.py"]

注:从Python 3.4映像开始构建映像。详细的dockerfile用法详见:Docker系列07—Dockerfile 详解

将当前目录添加.到/code映像中的路径中。将工作目录设置为/code。安装Python依赖项。将容器的默认命令设置为python app.py。

1.3.3 在Compose文件中定义服务

创建docker-compose.yml项目目录中调用的文件

[root@localhost composetest]# vim docker-compose.ymlversion: '3'services:web:build: .ports:- "5000:5000"redis:image: "redis:alpine"

此Compose文件定义了两个服务,web和redis。该web服务:

使用从Dockerfile当前目录中构建的图像。将容器上的公开端口5000转发到主机上的端口5000。我们使用Flask Web服务器的默认端口5000。

该redis服务使用从Docker Hub注册表中提取的公共 Redis映像。

1.3.4 使用Compose构建并运行您的应用程序

(1)在项目目录中,启动应用程序 docker-compose up

[root@localhost composetest]# docker-compose upRecreating composetest_web_1 ... doneStarting composetest_redis_1 ... doneAttaching to composetest_redis_1, composetest_web_1redis_1 | 1:C 15 Jan 07:03:23.107 # oO0OoO0OoO0Oo Redis is startingoO0OoO0OoO0Ooredis_1 | 1:C 15 Jan 07:03:23.107 # Redis version=5.0.3, bits=64,commit=00000000, modified=0, pid=1, just startedredis_1 | 1:C 15 Jan 07:03:23.107 # Warning: no config file specified,using the default config. In order to specify a config file use redis-server/path/to/redis.confredis_1 | 1:M 15 Jan 07:03:23.108 * Running mode=standalone, port=6379.redis_1 | 1:M 15 Jan 07:03:23.108 # WARNING: The TCP backlog setting of511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lowervalue of 128.redis_1 | 1:M 15 Jan 07:03:23.108 # Server initializedredis_1 | 1:M 15 Jan 07:03:23.108 # WARNING overcommit_memory is set to 0!Background save may fail under low memory condition. To fix this issue add'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command'sysctl vm.overcommit_memory=1' for this to take effect.redis_1 | 1:M 15 Jan 07:03:23.108 # WARNING you have Transparent HugePages (THP) support enabled in your kernel. This will create latency and memoryusage issues with Redis. To fix this issue run the command 'echo never >/sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your/etc/rc.local in order to retain the setting after a reboot. Redis must berestarted after THP is disabled.redis_1 | 1:M 15 Jan 07:03:23.108 * DB loaded from disk: 0.000 secondsredis_1 | 1:M 15 Jan 07:03:23.108 * Ready to accept connections

(2)浏览器查询本机IP地址的5000端口,验证

(3)刷新页面,数字应该增加

(4)另开一个终端,查看镜像验证

[root@localhost harbor]# docker image lsREPOSITORY TAG IMAGE ID CREATED SIZEcomposetest_web latest ca6d50ca9694 About aminute ago 77.2MBredis alpine b42dc832c855 3 weeksago 40.9MBpython 3.4-alpine bb81744a76cf 3 weeksago 65.8MB

(5)关闭服务

在新开的终端docker-compose down,或者在启动应用程序的原始终端中按CTRL + C来停止应用程序。

1.3.5 修改compose 配置,添加存储卷

[root@localhost composetest]# vim docker-compose.ymlversion: '3'services:web:build: .ports:- "5000:5000"volumes:- .:/coderedis:image: "redis:alpine"

注:新volumes密钥将主机上的项目目录(当前目录)/code安装到容器内,允许您动态修改代码,而无需重建映像。

1.3.6 测试存储卷

(1)重新启动compose

[root@localhost composetest]# docker-compose upRecreating composetest_web_1 ... doneStarting composetest_redis_1 ... doneAttaching to composetest_redis_1, composetest_web_1redis_1 | 1:C 15 Jan 07:03:23.107 # oO0OoO0OoO0Oo Redis is startingoO0OoO0OoO0Ooredis_1 | 1:C 15 Jan 07:03:23.107 # Redis version=5.0.3, bits=64,commit=00000000, modified=0, pid=1, just startedredis_1 | 1:C 15 Jan 07:03:23.107 # Warning: no config file specified,using the default config. In order to specify a config file use redis-server/path/to/redis.confredis_1 | 1:M 15 Jan 07:03:23.108 * Running mode=standalone, port=6379.

(2)在宿主机的存储卷上,修改代码

[root@localhost composetest]# vim app.pyreturn 'Hello World! I am along! I have been seen {} times.\n'.format(count)

将Hello World! 邮件更改为Hello World! I am along!

(3)再在浏览器刷新,验证成功

1.3.7 docker-compose 其他命令

(1)在后台运行服务,-d(用于“分离”模式)

[root@localhost composetest]# docker-compose up -dStarting composetest_web_1 ... doneStarting composetest_redis_1 ... done

(2)使用docker-compose ps以查看当前正在运行的内容

[root@localhost composetest]# docker-compose psName Command State Ports -------------------------------------------------------------------------------------composetest_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp composetest_web_1 python app.py Up 0.0.0.0:5000->5000/tcp

(3)docker-compose run命令允许您为服务运行一次性命令。例如,要查看web服务可用的环境变量:

[root@localhost composetest]# docker-compose run web envPATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME=3848578f8fffTERM=xtermLANG=C.UTF-8GPG_KEY=97FC712E4C024BBEA48A61ED3A5CA953F73C700DPYTHON_VERSION=3.4.9PYTHON_PIP_VERSION=18.1HOME=/root

(4)停止服务

[root@localhost composetest]# docker-compose stopStopping composetest_web_1 ... doneStopping composetest_redis_1 ... done

(5)使用该down 命令完全删除容器。加--volumes 参数还可以删除Redis容器使用的数据卷

[root@localhost composetest]# docker-compose down --volumesRemoving composetest_web_run_18e4bbaa4b33 ... doneRemoving composetest_web_1 ... doneRemoving composetest_redis_1 ... doneRemoving network composetest_default

如果觉得《docker 之容器编排工具Docker Compose》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。