一、安装Docker compose
Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:Releases · docker/compose · GitHub。
运行以下命令以下载 Docker Compose 的当前稳定版本:
curl -L "https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
如果连不上安装不了用安装包
下载解压后移动为/usr/local/bin/docker-compose
将可执行权限应用于二进制文件:
[root@manager ~]# chmod +x /usr/local/bin/docker-compose
创建软链:
[root@manager ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功:
[root@manager ~]# docker-compose --version
Docker Compose version v2.4.1
二、开始使用 Docker Compose
第 1 步:设置
定义应用程序依赖项。
1.为项目创建一个目录:
[root@manager ~]# mkdir composetest ; cd composetest ; pwd
2.创建一个名为 app.py的文件
在这个例子中,redis是redis容灾在应用程序网络中使用的主机名,我们使用redis的默认端口:6379
[root@manager composetest]# vim app.py
[root@manager composetest]# cat 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)
3.在工程目录中创建另一个文件,命名为requirements.txt,包含以下内容。
[root@manager composetest]# vim requirements.txt
[root@manager composetest]# cat requirements.txt
flask
redis
第 2 步:创建一个Dockerfile
在这个步骤里,我们通过编写Dockerfile来创建一个Docker镜像,这个镜像包括所有python和python运行所需要的组件。
在工程目录里,创建一个名为Dockerfile的文件,内容如下:
[root@manager composetest]# vim Dockerfile
[root@manager composetest]# cat 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
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
- 这个Dockerfile的含义如下
- 以python:3.7-alpine为基础镜像开始构建
- 设置工作路径为/code
- 为flask设置环境变量
- 安装gcc和其他依赖
- 复制requirements.txt到工作目录,运行python依赖
- 开放容器的5000端口
- 复制当前目录到工作目录
- 设置容器默认执行命令为
flask run
第 3 步:在Compose文件中定义服务
在工程目录下创建一个名为docker-compose.yml的文件,内容如下:
[root@manager composetest]# vim docker-compose.yml
[root@manager composetest]# cat docker-compose.yml
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
这个compose文件定义了两个服务:web和redis
Web服务
web服务使用的是由当前目录下Dockerfile构建的镜像,将主机的8000端口绑定了容器的5000端口。
Redis服务
redis服务使用公共镜像Redis。
第 4 步:使用Compose构建和运行程序
1.在工程目录中,运行docker-compose up以启动应用程序
docker-compose up -d #后台运行
[root@manager composetest]# docker-compose up
2.在浏览器中输入宿主机IP:8000可以看到APP正在运行

3.刷新页面数值会增加

4.复制一个新的终端窗口,输入docker images ls 查看本地镜像列表
5.新终端下在工程目录下运行docker-compose down可以关闭当前的应用程序。或者载程序运行的终端下按CTRL+C也能终端正在运行的程序。
第 5 步:编辑Compose文件来添加存储卷
新volumes键将主机上的项目目录(当前目录挂载到容器的/code安装到容器的,允许您动态修改代码,而无需重建映像。 这 environment键设置 FLASK_ENV环境变量,以告知flask run在开发中运行模式并在更改时重新加载代码。 这种模式应该只在开发中使用。
[root@manager composetest]# vim docker-compose.yml
[root@manager composetest]# cat docker-compose.yml
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
environment:
FLASK_ENV: development
redis:
image: "redis:alpine"
第 6 步:重新构建并运行APP
docker-compose up
1247

被折叠的 条评论
为什么被折叠?



