compose是docker官方出品的一个python编写的容器编排工具,是启动容器的脚本,在脚本里指明启动容器的顺序,启动多少容器,每个容器的具体参数
1、对容器进行什么操作
答:启动容器,可以指定端口,卷,链接,使用哪个镜像等,平时我们使用命令行来指定,现在起文件来传参
2、对多少容器进行编排
答:1>=1
3、对多少台宿主机的容器进行编排操作
答:一台
Compose 文件是一个YAML文件,定义了 服务、 网络和 卷。Compose 文件的默认路径是./docker-compose.yml.
1、快速批量启动容器,效率高
2、不容易出错,可靠
安装compose前,必须安装docker引擎
1、到github上下载
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.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
2、授予Compose可执行权限
chmod +x /usr/local/bin/docker-compose
查看版本
docker-compose -v
1、为项目创建一个目录
mkdir composetest
cd composetest
2、在你的项目目录中创建一个名为app.py的文件,并将以下代码粘贴到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)
由于里面用到flsak和redis,所以需要下载这两个,创建一个requirements.txt
在你的项目目录中创建另一个文件并将其粘贴:
flask
redis
3、创建一个 Dockerfile
# syntax=docker/dockerfile:1
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"]
4、在您的项目目录中创建一个名为docker-compose.yml的文件并粘贴以下内容:
version: "3.9"
services:
web:
build: .
ports: #指定端口(默认)
- "5000:5000"
redis: #创建一个redis镜像
image: "redis:alpine"
yaml文件注意缩进,大小写敏感
这个 Compose 文件定义了两个服务:web和redis.
web
该web服务使用从Dockerfile当前目录中构建的映像。然后它将容器和主机绑定到暴露的端口5000. 此示例服务使用 Flask,Web 服务器的默认端口5000.
Redis服务 该redis服务使用 从 Docker Hub 注册表中提取的公共Redis映像。(若没有镜像会去下载)
5、使用 Compose 构建并运行您的应用程序
1、启动
docker-compose up
Compose 会拉取一个 Redis 镜像,为您的代码构建一个镜像,并启动您定义的服务。在这种情况下,代码会在构建时静态复制到映像中。
注意:如果出现,多半是因为挂起状态无法联网,请重启service docker restart
出现以下页面不用管,在开一个终端,因为前台在运行这个进程,前端资源没有被释放,请不要Ctrl+C停止,若不写前端被占有 up 的时候接选项 -d
2、在浏览器中输入 http://localhost:5000/ 以查看应用程序正在运行。
刷新页面。 数字应该递增。
3、切换到另一个终端窗口,然后输入docker image ls
以列出本地图像。
此时列出图像应返回redis和web。
4、停止应用程序,方法是在第二个终端的项目目录中运行docker-compose down
,或者在启动应用程序的原始终端中按 CTRL+C。
6、尝试一些其他命令
停止服务:
docker-compose stop
使用以下命令关闭所有内容,完全删除容器。传递–volumes给 Redis 容器使用的数据卷:
docker-compose down --volumes
docker-compose ps #查看当前正在运行的内容
docker-compose run
命令允许您为您的服务运行一次性命令。例如,要查看web服务可用的环境变量 :
docker-compose run web env