docker-compose
一、简绍
官方地址:
https://docs.docker.com/compose/
官方介绍
Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration. To learn more about all the features of Compose, see [the list of features](https://docs.docker.com/compose/#features).
Compose works in all environments: production, staging, development, testing, as well as CI workflows. You can learn more about each case in [Common Use Cases](https://docs.docker.com/compose/#common-use-cases).
Using Compose is basically a three-step process:
1. Define your app’s environment with a `Dockerfile` so it can be reproduced anywhere.
2. Define the services that make up your app in `docker-compose.yml` so they can be run together in an isolated environment.
3. Run `docker compose up` and the [Docker compose command](https://docs.docker.com/compose/cli-command/) starts and runs your entire app. You can alternatively run `docker-compose up` using the docker-compose binary.
通过官方介绍我们读到了:
第一段读到了
- docker compose 是用来定义或者去启动docker多容器的应用
- 要想使用docker compose,你需要使用ymal文件去配置你的应用服务
- 最后你去使用一个简单的命令去创建或则开启你的所有服务
- 了解更多特性:https://docs.docker.com/compose/#features
第二段我们了解到
- docker compose可以在所有环境中进行工作
- 常见用例:https://docs.docker.com/compose/#common-use-cases
第三段我们可以读到
使用compose需要三个步骤:
- 使用Dockerfile去定义我们应用的环境,他可以放在任何地方
- 在docker-compose中定义组成应用的服务。这样它们就可以在一个隔离的环境中一起运行。
- 启动docker应用使用docker compose up 或docker compose up --build
- 命令学习地址:https://docs.docker.com/compose/cli-command/
docker-compose.yml的简单列子
# 版本,当前我们使用的compose版本
version: "3.9" # optional since v1.27.0
#服务,这个服务里边配置了两个应用,其中一个是web另一个是redis
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
#其他配置,下边这个配置是卷挂载
volumes:
logvolume01: {}
了解更多有关compose稳健配置的信息,参见官网地址:https://docs.docker.com/compose/compose-file/
Compose有一些命令用于管理应用程序的整个生命周期:
- Start, stop, and rebuild services 开始、暂停和重新构建服务
- View the status of running services 查看运行服务的状态
- Stream the log output of running services 流化运行服务的日志输出
- Run a one-off command on a service 在服务器上运行一次命令
二、安装docker compose
安装compose要有docker环境,这个是大前提
开始安装在linux系统上
第一步,下载docker compose
# 这个是国外的下载地址,可能会下载失败或则下载速度很慢
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/v2.2.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
第二步,查看版本号
docker-compose --version
第三步,给compose执行权限
sudo chmod +x /usr/local/bin/docker-compose
三、卸载docker compose
两种方式
- 使用curl去卸载:
sudo rm /usr/local/bin/docker-compose
- 使用pid
pip uninstall docker-compose
四、开启docker 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)
③创建名为requirements.txt的文件,编辑内容为:
flask
redis
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
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
3、编写docker-compose.yml文件
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
4、使用docker-compose up命令来构建运行项目
docker-compose up
5、绑定挂载
编辑docker-compose.yml文件绑定挂载
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
# 多了这儿两个配置,一个是数据卷挂载,一个是环境
volumes:
- .:/code
environment:
FLASK_ENV: development
redis:
image: "redis:alpine"
新的卷键将主机上的项目目录(当前目录)挂载到容器内的/code,允许您动态地修改代码,而不必重新构建映像。环境键设置FLASK_ENV环境变量,该变量告诉flask run在开发模式下运行,并在更改时重新加载代码。这种模式只能在开发中使用。
6、重新启动运行
docker-compose up
7、更新应用程序
由于现在使用卷将应用程序代码挂载到容器中,因此您可以对其代码进行更改并立即看到更改,而无需重新构建映像。
return 'Hello from Docker! I have been seen {} times.\n'.format(count)
8、访问
修改完成之后我们并没有重启还是在保持在上次访问的量
修改后:
进入容器我们看到数据已经挂载到容器目录的/code目录下
sudo docker exec -it 3045fdab0704 /bin/sh
所以我么恩在这里做了改动,就回立即生效,通过flask
9、其他命令
后台运行
docker-compose up -d #后台启动
docker-compose ps #当前运行的应用
#docker-compose run允许您为您的服务运行一次性命令。例如,要查看哪些环境变量对web服务可用:
docker-compose run web env
docker-compose stop #停止应用
10、特殊
#和docker-compose stop 还不一样
docker-compose down
# 您可以使用down命令删除所有内容,完全删除容器--volumes也可以删除Redis容器使用的数据卷:
docker-compose down --volumes
链图片转存中…(img-oyV3EvfL-1645926003902)]
10、特殊
#和docker-compose stop 还不一样
docker-compose down
# 您可以使用down命令删除所有内容,完全删除容器--volumes也可以删除Redis容器使用的数据卷:
docker-compose down --volumes
[外链图片转存中…(img-IMbepWEc-1645926003902)]
[外链图片转存中…(img-eGx1TEKu-1645926003903)]