14、docker-compose

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

image-20211204150539037.png

第三步,给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

image-20211204151428194.png

②创建一个文件名字为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

image-20211204155935174.png

image-20211204160144313.png

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、访问

修改完成之后我们并没有重启还是在保持在上次访问的量

image-20211204160820897.png

修改后:

image-20211204161505484.png

进入容器我们看到数据已经挂载到容器目录的/code目录下

sudo docker exec -it 3045fdab0704 /bin/sh

image-20211204162115503.png

所以我么恩在这里做了改动,就回立即生效,通过flask

9、其他命令

后台运行

docker-compose up -d #后台启动
docker-compose ps #当前运行的应用
#docker-compose run允许您为您的服务运行一次性命令。例如,要查看哪些环境变量对web服务可用:
docker-compose run web env
docker-compose stop #停止应用

image-20211204162623496.png

image-20211204162651512.png

image-20211204162749891.png

10、特殊
#和docker-compose stop 还不一样
docker-compose down 
# 您可以使用down命令删除所有内容,完全删除容器--volumes也可以删除Redis容器使用的数据卷:
docker-compose down --volumes

image-20211204162850659.png

image-20211204163152657.png

链图片转存中…(img-oyV3EvfL-1645926003902)]

10、特殊
#和docker-compose stop 还不一样
docker-compose down 
# 您可以使用down命令删除所有内容,完全删除容器--volumes也可以删除Redis容器使用的数据卷:
docker-compose down --volumes

[外链图片转存中…(img-IMbepWEc-1645926003902)]

[外链图片转存中…(img-eGx1TEKu-1645926003903)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值