Docker Compose是什么
首先Docker Compose并不是Docker本身的东西,而是一个项目,用来解决多容器的扩展。
使用 Compose 基本上是一个三步过程:
-
使用 定义您的应用程序的环境,
Dockerfile
以便它可以在任何地方复制。 -
定义组成您的应用程序的服务,
docker-compose.yml
以便它们可以在隔离的环境中一起运行。 -
运行
docker compose up
和 Docker compose command启动并运行你的整个应用程序。您也可以docker-compose up
使用 docker-compose 二进制文件运行。
就是用来批量编排容器的工具。
安装Compose
1,官网的:
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
国内的下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker- compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2,授权:
sudo chmod +x /usr/local/bin/docker-compose
3,测试:
docker-compose --version
--------------------------------OK
根据官网DEMO体验一番
一,创建脚本
-- -- 先创建一个文件夹:
#创建文件夹
mkdir composetest
--- --- --- --- ---
#进入文件夹
cd composetest
1.1. 按照官网给的脚本,编写一个python脚本
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 容器的主机名。我们使用 Redis 的默认端口6379
1.2,requirements.txt
在您的项目目录中创建另一个文件并将其粘贴到:
flask
redis
二、创建一个 Dockerfile
编写一个用于构建 Docker 映像的 Dockerfile。包含 Python 应用程序所需的所有依赖项和Python 本身。
在您的项目目录中,创建一个名为Dockerfile
并粘贴以下内容的文件:
# syntax=docker/dockerfile:1
FROM python:3.7-alpine #从python3.7镜像开始构建
WORKDIR /code #设置落脚点工作目录是 /code .
ENV FLASK_APP=app.py #设置flask 命令使用的环境变量,指向app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers #安装gcc和其他依赖
COPY requirements.txt requirements.txt #复制requirements.txt
RUN pip install -r requirements.txt #安装python依赖项
EXPOSE 5000 #容器端口
COPY . . #将.项目中的当前目录复制到.
CMD ["flask", "run"] #容器的默认命令设置为 flask run
三、创建docker-compose.yml
在 Compose 文件中定义服务
docker-compose.yml
在您的项目目录中创建一个名为的文件并粘贴以下内容
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
这个 Compose 文件定义了两个服务:web
和redis
.
网络服务
该web
服务使用从Dockerfile
当前目录中构建的映像。然后它将容器和主机绑定到暴露的端口5000
. 此示例服务使用 Flask Web 服务器的默认端口5000
.
Redis服务🔗
该redis
服务使用 从 Docker Hub 注册表中提取的公共Redis映像
四、在项目中docker-compose up
从您的项目目录,通过运行启动您的应用程序docker-compose up
-
Compose 会拉取一个 Redis 镜像,为您的代码构建一个镜像,并启动您定义的服务。在这种情况下,代码会在构建时静态复制到映像中。
-
在浏览器中输入 http://localhost:5000/ 以查看应用程序正在运行
3. 检测切换到另外一个终端,使用docker image ls
会发现多了redis 和 Python.
关于退出:
可以使用docker-compose down 或者ctrl + c 暴力退出
五、编辑 Compose 文件以添加绑定挂载
编辑docker-compose.yml
在项目目录添加 绑定安装的web
服务:
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
environment:
FLASK_ENV: development
redis:
image: "redis:alpine"
volumes- .
将主机上的项目目录(当前目录)挂载到/code
容器内部,允许您即时修改代码,而无需重新构建映像。
该environment
键设置 FLASK_ENV
环境变量,它告诉flask run
在开发模式下运行,并重新加载更改代码。这种模式应该只在开发中使用。
六、重新构建项目
再次输入docker-compose up进行重新构建
七、更新应用程序
由于应用程序代码现在使用卷挂载到容器中,因此您可以对其代码进行更改并立即查看更改,而无需重新构建映像。
更改问候语app.py
并保存。例如,将Hello World!
消息更改为Hello baby!
:
<span style="color:#33444d"><span style="background-color:#ffffff"><span style="color:#0c5176 !important"><span style="background-color:#f5f8fa !important"><code><span style="color:#8b008b">return</span> <span style="color:#cd5555">'Hello from Docker! I have been seen {} times.</span><span style="color:#cd5555">\n</span><span style="color:#cd5555">'</span>.format(count)</code></span></span></span></span>
八、其他命令
docker-compose up -d(后台命令)
如果您想在后台运行您的服务,您可以将-d
标志(用于“分离”模式)传递给docker-compose up
并用于docker-compose ps
查看当前正在运行的内容:
该docker-compose run
命令允许您为您的服务运行一次性命令。例如,要查看web
服务可用的环境变量 :
<span style="color:#33444d"><span style="background-color:#ffffff"><span style="color:#0c5176 !important"><span style="background-color:#f5f8fa !important"><code><span style="color:#555555">$</span> docker-compose run web env</code></span></span></span></span>