概述
docker-compose就是docker容器的编排工具,主要就是解决相互有依赖关系的多个容器的管理。
-
Compose简介
Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。
Docker-Compose是一个容器编排工具。通过一个.yml或.yaml文件,将所有的容器的部署方法、文件映射、容器端口映射等情况写在一个配置文件里,执行docker-compose up命令就像执行脚本一样,一个一个的安装并部署容器。
-
Compose 使用的三个步骤
- 使用Dockerfile定义你的应用依赖的镜像;
- 使用docker-compose.yml定义你的应用(APP)具有的服务,并在隔离环境中一起运行;
- 最后通过docker-compose up命令创建并运行整个应用程序; -
注:docker-compose将所管理的容器分为3层结构:project service container
docker-compose.yml组成一个project,project里包括多个service,每个service定义了容器运行的镜像(或构建镜像),网络端口,文件挂载,参数,依赖等,每个service可包括同一个镜像的多个容器实例。
即 project 包含 service ,service 包含 container
-
-
Compose 安装
Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:Releases · docker/compose · GitHub。
运行第一个命令来下载 Docker Compose 的当前稳定版本或者通过执行第二个命令,高速安装 Docker Compose
-
$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
$ curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
将可执行权限应用于二进制文件:
-
$ sudo chmod +x /usr/local/bin/docker-compose
创建软链:
-
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功:
-
$ docker-compose --version docker-compose version 1.24.1, build 4667896b
注意: 对于 alpine,需要以下依赖包: py-pip,python-dev,libffi-dev,openssl-dev,gcc,libc-dev,和 make。
-
-
编写docker-compose.yml
docker-compose.yml 的配置案例如下(配置参数参考下文):-
# yaml 配置实例 version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redis volumes: logvolume01: {}
-
-
Compose使用
1、创建一个测试目录:
-
$ mkdir composetest $ cd composetest
在测试目录中创建一个名为 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 = 5 while True: try: return cache.incr('hits') except redis.exceptions.ConnectionError as exc: if retries == 0: raise exc retries -= 1 time.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。
在 composetest 目录中创建另一个名为 requirements.txt 的文件,内容如下:
-
flask redis
2、创建 Dockerfile 文件
在 composetest 目录中,创建一个名为 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 COPY . . CMD ["flask", "run"]
Dockerfile 内容解释:
- FROM python:3.7-alpine: 从 Python 3.7 映像开始构建镜像
- WORKDIR /code: 将工作目录设置为 /code
- ENV:设置 flask 命令使用的环境变量
- RUN apk add --no-cache gcc musl-dev linux-headers: 安装 gcc,以便诸如 MarkupSafe 和 SQLAlchemy 之类的 Python 包可以编译加速
- COPY requirements.txt requirements.txt :复制 requirements.txt
RUN pip install -r requirements.txt : 安装 Python 依赖项 - COPY . .: 将 . 项目中的当前目录复制到 . 镜像中的工作目录
- CMD ["flask", "run"]: 容器提供默认的执行命令为:flask run
-
3、创建 docker-compose.yml
在测试目录中创建一个名为 docker-compose.yml 的文件,然后粘贴以下内容:
# yaml 配置
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
该 Compose 文件定义了两个服务:web 和 redis。
- web:该 web 服务使用从 Dockerfile 当前目录中构建的镜像。然后,它将容器和主机绑定到暴露的端口 5000。此示例服务使用 Flask Web 服务器的默认端口 5000
- redis:该 redis 服务使用 Docker Hub 的公共 Redis 映像
4、使用 Compose 命令构建和运行您的应用
在测试目录中,执行以下命令来启动应用程序:
docker-compose up
如果你想在后台执行该服务可以加上 -d 参数:
docker-compose up -d
-
docker-compose命令
官网地址:Redirecting…
注意:以下都需要在docker-compose.yml所在目录下执行,且名字就是默认的docker-compose.yml,否则需要加上 -f yml地址
Eg: docker-compose -f /usr/docker/docker-compose1.yml ps
* 表示常用
docker-compose pull:拉取服务里定义的镜像
docker-compose ps :列出project所有运行容器(容器名 = 目录名_service_index index表示容器序数,从1开始)
docker-compose build:构建/重新构建所有镜像
docker-compose start [服务名称]:启动已存在但未运行的所有或单个service
docker-compose up -d(相当于 build + start ) :构建(容器)并启动(容器)整个project的所有service (-d:后台进程)
docker-compose stop [服务名称]:停止运行的service
docker-compose rm -f [服务名称]:删除已停止的所有或单个service(-f :强制删除)
docker-compose down -v(相当于 stop + rm ):停止并移除整个project的所有services
(-v :删除挂载卷和volunme的链接)
docker-compose logs [服务名称]:查看服务内所有或单个容器日志输出
docker-compose run service command:在某个服务上运行命令
docker-compose exec --index=2 [服务名称] sh:进入到某个容器
(--index:2 :当服务内有多个容器时,需要指定第几个,默认是第一个)
docker-compose restart [服务名称]: 重启服务
docker-compose config:验证和查看compose文件
docker-compose images:列出所用的镜像
docker-cpmpose scale:设置服务个数(docker-compose scale web=2 worker=3 )
docker-compose pause [服务名称]:暂停服务
docker-compose unpause [服务名称]:恢复服务
原文链接:docker-compose详解_懒的去其的博客-CSDN博客_docker-compose
常见流程:
启动:创建docker-compose.yml -> docker-compose pull -> docker-compose up -d
更新:docker-compose down -v -> docker-compose pull -> docker-compose up -d
当某个service的Dockerfile改变时,即镜像发生改变需要重新生成时,如果仅仅是docker-compose.yml改变,只需要up重新启动project即可
最后
以上就是鲤鱼身影为你收集整理的Docker Compose的全部内容,希望文章能够帮你解决Docker Compose所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复