Docker Compose学习

Docker Compose是什么

首先Docker Compose并不是Docker本身的东西,而是一个项目,用来解决多容器的扩展。

Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。借助 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用单个命令,从配置中创建并启动所有服务
Compose 适用于所有环境:生产、登台、开发、测试以及 CI 工作流。 

使用 Compose 基本上是一个三步过程:

  1. 使用 定义您的应用程序的环境,Dockerfile以便它可以在任何地方复制。

  2. 定义组成您的应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。

  3. 运行docker compose up和 Docker compose command启动并运行你的整个应用程序。您也可以docker-compose up使用 docker-compose 二进制文件运行。

就是用来批量编排容器的工具。

安装Compose

1,官网的:

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/1.25.5/docker- compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

2,授权:

sudo chmod +x /usr/local/bin/docker-compose

3,测试:

docker-compose --version

--------------------------------OK

根据官网DEMO体验一番

一,创建脚本

  -- -- 先创建一个文件夹:

#创建文件夹
mkdir composetest 
--- --- --- --- ---
#进入文件夹
cd composetest

1.1. 按照官网给的脚本,编写一个python脚本

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)

在此示例中,redis是应用程序网络上的 redis 容器的主机名。我们使用 Redis 的默认端口6379

1.2,requirements.txt在您的项目目录中创建另一个文件并将其粘贴到:

flask
redis

二、创建一个 Dockerfile

编写一个用于构建 Docker 映像的 Dockerfile。包含 Python 应用程序所需的所有依赖项和Python 本身。

在您的项目目录中,创建一个名为Dockerfile并粘贴以下内容的文件:

# syntax=docker/dockerfile:1
FROM python:3.7-alpine                      #从python3.7镜像开始构建
WORKDIR /code                               #设置落脚点工作目录是 /code .
ENV FLASK_APP=app.py                        #设置flask 命令使用的环境变量,指向app.py
ENV FLASK_RUN_HOST=0.0.0.0                  
RUN apk add --no-cache gcc musl-dev linux-headers   #安装gcc和其他依赖
COPY requirements.txt requirements.txt       #复制requirements.txt  
RUN pip install -r requirements.txt          #安装python依赖项
EXPOSE 5000                                  #容器端口
COPY . .                                     #将.项目中的当前目录复制到. 
CMD ["flask", "run"]                         #容器的默认命令设置为 flask run

 三、创建docker-compose.yml

在 Compose 文件中定义服务

docker-compose.yml在您的项目目录中创建一个名为的文件并粘贴以下内容

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

这个 Compose 文件定义了两个服务:webredis.

网络服务

web服务使用从Dockerfile当前目录中构建的映像。然后它将容器和主机绑定到暴露的端口5000. 此示例服务使用 Flask Web 服务器的默认端口5000.

Redis服务🔗

redis服务使用 从 Docker Hub 注册表中提取的公共Redis映像

四、在项目中docker-compose up

从您的项目目录,通过运行启动您的应用程序docker-compose up

  1. Compose 会拉取一个 Redis 镜像,为您的代码构建一个镜像,并启动您定义的服务。在这种情况下,代码会在构建时静态复制到映像中。

  2. 在浏览器中输入 http://localhost:5000/ 以查看应用程序正在运行

     3. 检测切换到另外一个终端,使用docker image ls

会发现多了redis 和 Python.

关于退出:

可以使用docker-compose down 或者ctrl + c 暴力退出

五、编辑 Compose 文件以添加绑定挂载 

 编辑docker-compose.yml在项目目录添加 绑定安装web服务:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
  redis:
    image: "redis:alpine"

volumes- .将主机上的项目目录(当前目录)挂载到/code容器内部,允许您即时修改代码,而无需重新构建映像。

environment键设置 FLASK_ENV环境变量,它告诉flask run在开发模式下运行,并重新加载更改代码。这种模式应该只在开发中使用。

六、重新构建项目

再次输入docker-compose up进行重新构建

 七、更新应用程序

由于应用程序代码现在使用卷挂载到容器中,因此您可以对其代码进行更改并立即查看更改,而无需重新构建映像。

更改问候语app.py并保存。例如,将Hello World! 消息更改为Hello baby!

<span style="color:#33444d"><span style="background-color:#ffffff"><span style="color:#0c5176 !important"><span style="background-color:#f5f8fa !important"><code><span style="color:#8b008b">return</span> <span style="color:#cd5555">'Hello from Docker! I have been seen {} times.</span><span style="color:#cd5555">\n</span><span style="color:#cd5555">'</span>.format(count)</code></span></span></span></span>

  

八、其他命令

docker-compose up -d(后台命令)

如果您想在后台运行您的服务,您可以将-d标志(用于“分离”模式)传递给docker-compose up并用于docker-compose ps查看当前正在运行的内容:

docker-compose run命令允许您为您的服务运行一次性命令。例如,要查看web服务可用的环境变量 :

<span style="color:#33444d"><span style="background-color:#ffffff"><span style="color:#0c5176 !important"><span style="background-color:#f5f8fa !important"><code><span style="color:#555555">$</span> docker-compose run web env</code></span></span></span></span>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值