一、Docker Compose介绍
-
服务:一个应用的容器,实际上可以包括若干相同镜像的容器实例
-
项目:由一组关联的应用容器组成的一个完整业务单元
二、Docker Compose安装
2.1、Compose安装--二进制包安装
2.2、Compose安装--pip安装(推荐)
三、常用命令
docker-compose命令格式:docker-compose [-f=<arg>...][options][COMMAND][ARGS...]参数:
-f,--file FILE:指定模板文件,默认为docker-compose.yml,可以多次指定 -p,--project-name NAME:指定项目名称,默认将使用所在目录名称作为项目名 --x-networking:使用Docker的可插拔网络后端特性 --x-network-driver DRIVER:指定网络后端的驱动,默认为bridge --verbose:输出更多调试信息 -v,--version:打印版本并退出 --log-level LEVEL:设置日志级别DEBUG/INFO/WARNING/ERROR/CRITICAL
四、docker-compose.yml
4.0、docker-compose.yml
实例
# yaml 配置实例,指定了3个web服务:web1、web2、web3
version: '2'
services:
web1:
image: nginx
ports:
- "6061:80"
container_name: "web1"
networks:
- dev
web2:
image: nginx
ports:
- "6062:80"
container_name: "web2"
networks:
- dev
- pro
web3:
image: nginx
ports:
- "6063:80"
container_name: "web3"
networks:
- pro
networks:
dev:
driver: bridge
pro:
driver: bridge
container_name: my-web-container
4.6、devices:指定设备的映射关系
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
dns_search: example.com
dns_search:
- dc1.example.com
- dc2.example.com
extra_hosts:
- "googledns:8.8.8.8"
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
nproc: 65535
nofile:
soft: 20000
hard: 40000
4.22、entrypoint:覆盖容器默认的 entrypoint
entrypoint: /code/entrypoint.sh
4.23、restart
-
no:是默认的重启策略,在任何情况下都不会重启容器。
-
always:容器总是重新启动。
-
on-failure:在容器非正常退出时(退出状态非0),才会重启容器。
-
unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
restart: "no"
restart: always
restart: on-failure
restart: unless-stopped
4.24、secrets:存储敏感数据,例如密码:
version: "3.1"
services:
mysql:
image: mysql
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/my_secret
secrets:
- my_secret
secrets:
my_secret:
file: ./my_secret.txt
五、docker-compose使用
1、准备
$ mkdir composetest
$ cd composetest
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)
2、创建 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"]
-
FROM python:3.7-alpine: 从 Python 3.7 映像开始构建镜像。
-
WORKDIR /code: 将工作目录设置为 /code。
-
设置 flask 命令使用的环境变量。
-
RUN apk add --no-cache gcc musl-dev linux-headers: 安装 gcc,以便诸如 MarkupSafe 和 SQLAlchemy 之类的 Python 包可以编译加速
-
复制 requirements.txt 并安装 Python 依赖项。
-
COPY . .: 将 . 项目中的当前目录复制到 . 镜像中的工作目录。
-
CMD ["flask", "run"]: 容器提供默认的执行命令为:flask run。
3、创建 docker-compose.yml
docker-compose.yml 配置文件:文章来源:https://www.toymoban.com/news/detail-500871.html
# yaml 配置
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
该 Compose 文件定义了两个服务:web 和 redis。文章来源地址https://www.toymoban.com/news/detail-500871.html
-
web:该 web 服务使用从 Dockerfile 当前目录中构建的镜像。然后,它将容器和主机绑定到暴露的端口 5000。此示例服务使用 Flask Web 服务器的默认端口 5000 。
-
redis:该 redis 服务使用 Docker Hub 的公共 Redis 映像。
4、使用 Compose 命令构建和运行您的应用
到了这里,关于5.4、docker-compose的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!