李优秀 发表于 2024-8-5 03:44:13

Docker Compose - 安装和基本使用

一、概述

Compose 是一个用于界说和运行多容器 Docker 应用步伐的工具。Compose 用 YAML 文件设置应用步伐的服务。使用单一命令,可以从 YAML 文件设置中创建并启动所有服务。适用于所有环境生产、开发、测试以及 CI/CD 工作流程。
Compose的使用三步:


[*]使用 Dockerfile 自界说应用步伐的环境,便于在任何地方复制它;
[*]使用 docker-compose.yml 界说构成的应用步伐的服务,便于隔离环境中一起运行;
[*]运行 docker-compose up 命令启动并运行整个应用步伐。

二、Docker Compose与Docker关系

2.1 Docker Compose(容器编排工具)

界说:Docker Compose 是一个用于界说和运行多容器 Docker 应用的工具。
功能:


[*]多容器管理:允许用户在一个YAML文件中界说和管理多个容器
[*]服务编排:设置容器间的网络和依赖关系
[*]一键部署:使用docker-compose up命令启动、停止和重修服务
用途:简化多容器应用的设置和管理,适用于开发、测试和生产环境中的复杂应用。
2.2 Docker(容器平台)

界说:一个开放源代码的容器化平台,允许开发者将应用及其依赖打包进轻量级、可移植的容器中。
功能:


[*]容器化:将应用和其运行环境封装在一个容器中
[*]镜像管理:创建、存储和分发容器镜像
[*]容器运行:可以运行在任何支持Docker的环境中
用途:提供一个标准化的方式打包和运行应用,确保应用在不同环境中的一致性和可移植性。
2.3 两者关系


[*]Docker 是 Docker Compose 的条件,Docker Compose 是为了简化使用 Docker 时多容器应用的管理和部署而设计的。
[*]两者之间相辅相成,Docker 提供容器化的焦点功能,Docker Compose 则管理这些容器的组合和交互。
[*]两者面向不同用户,Docker 面向任何需要容器化应用的用户,Docker Compose 则面向需要同时管理多个容器的开发者和运维团队。
2.4 两者版本兼容

Compose版本Docker版本3.819.03.0+3.718.06.0+3.618.02.0+3.517.12.0+ 3.4
17.09.0+3.317.06.0+3.217.04.0+3.11.13.1+3.01.13.0+2.417.12.0+2.317.06.0+2.21.13.0+2.11.12.0+2.01.10.0+
三、Compose 安装

1.查看docker版本:
# docker --version
Docker version 24.0.7, build afdd53b 2.下载docker-compose软件:
# wget https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 3.移动下载软件到/usr/local/bin/docker-compose覆盖旧版本:
# mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
mv: overwrite ‘/usr/local/bin/docker-compose’? y 4.赋予实行权限:
# chmod +x /usr/local/bin/docker-compose
5.测试安装是否乐成:
# docker-compose --version
Docker Compose version v2.16.0 6.卸载docker compose:
# rm -f /usr/local/bin/docker-compose
四、Docker Compose--文件基本布局

        Docker Compose 文件是 Docker Compose 工具的焦点,用于界说和设置多容器 Docker 应用。接纳 YAML格式编写。
docker-compose.yml设置案例:
version: "3.9"
services:
    web:
      build: .
      ports:
      - "8000:5000"
      volumes:
      - .:/code
      - logvolume01:/var/log
      links:
      - redis
    redis:
      image: redis
volumes:
logvolume01: {}   文件设置解释阐明:


[*]version:指定 Compose 文件格式yaml的规则版本,版本决定可用的设置选项
[*]service:界说了应用中的服务,每个服务可以使用不同的镜像、环境设置和依赖关系

[*]web:自己构建的镜像

[*]build:用于构建镜像,指定构建镜像的 dockerfile 的上下文路径
[*]ports:映射容器和宿主机的端口
[*]volumes:挂载本地目录到指定容器目录,用于数据持久化或在容器之间共享数据
[*]links:与redis服务连接


[*]redis:构建指定镜像redis

[*]image:从指定的镜像中启动容器,可以是存储仓库、标签以及镜像 ID

[*]volumes:用于数据持久化和共享的数据卷界说,常用于数据库存储、设置文件、日志等数据的持久化

五、基本使用--案例

目录布局:
   # tree counter-app-master
├── app.py    #应用步伐代码(Python Flask应用)
├── docker-compose.yml    #compose文件,界说Docker部署应用
├── Dockerfile    #界说构建web-fe服务所使用的镜像
└── requirements.txt    #应用所依赖的Python包
1.界说应用步伐依赖项:
# mkdir counter-app-master    #创建测试目录
# cd counter-app-master
# vim 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 "What's up Docker Deep Divers! You've visited me {} times.\n".format(count)

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)
        上述此示例中,redis 是应用步伐网络上的 redis 容器的主机名,所以使用默认端口6379。
在测试目录中创建名为 requirements.txt 的文件:
# cat requirements.txt
flask
redis 2.编写Dockerfile文件:
redis# cat Dockerfile
FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]   Dockerfile文档逐行解释阐明:


[*]从 Python 3.6 镜像开始构建
[*]将当前目录拷贝到容器/code目录下
[*]界说容器工作目录为/code
[*]安装 Python 依赖项
[*]容器默认实行命令
3.编写docker-compose.yml文件界说服务:
# cat docker-compose.yml
version: "3.5"
services:
web-fe:
    build: .
    command: python app.py
    ports:
      - target: 5000
      published: 5000
    networks:
      - counter-net
    volumes:
      - type: volume
      source: counter-vol
      target: /code
redis:
    image: "redis:alpine"
    networks:
      counter-net:

networks:
counter-net:

volumes:
   一级key解释阐明:


[*]version:界说 compose 文件格式的版本
[*]services:界说不同的应用服务,上述界说web前端服务以及redis缓存数据库服务。Docker compose会将每个服务部署为一个容器,且会将key作为容器名字的一部分
[*]networks:创建新的网络,默认自动创建bridge网络。此网络只能实现与同一主机容器连接
[*]volumes:创建新卷
    二级key解释阐明:
web-fe服务指令解释阐明:


[*]build:. 代表基于当前目录,. 下Dockerfile中界说的指令构成一个新镜像,该镜像将被用于启动该服务的容器
[*]command:在容器中实行名为app.py的Python脚本作为主步伐,所以在Dockerfile中将满足镜像中包含app.py及Python
[*]ports:容器内的5000端口映射到主机5000端口
[*]networks:指定服务连接的网络,且指定的网络需要存在,或是在一级key中的networks中界说过
[*]volumes:将counter-vol卷挂载到容器/code,且指定卷counter-vol需要存在,或是在一级key中的volumes中界说过
redis服务指定解释阐明:


[*]image:基于redis:alpine镜像启动一个独立名为redis的容器
[*]networks:设置redis容器连接counter-net网络
4.启动应用步伐:
# docker-compose up    #前台启动
[+] Building 143.1s (9/9) FINISHED
=> load build definition from Dockerfile                                          0.1s
...
counter-app-master-web-fe-1|* Restarting with stat
counter-app-master-web-fe-1|* Debugger is active!
counter-app-master-web-fe-1|* Debugger PIN: 127-376-714
# docker-compose up -d    #后台启动
[+] Running 2/2
⠿ Container counter-app-master-redis-1   Started                                             0.9s
⠿ Container counter-app-master-web-fe-1Started                                             1.2s
查看镜像、容器、网络及卷:
# docker images
REPOSITORY                  TAG       IMAGE ID       CREATED          SIZE
counter-app-master-web-fe   latest    da547efce15a   52 minutes ago   55.1MB
redis                     alpine    3900abf41552   2 years ago      32.4MB
# docker ps
CONTAINER ID   IMAGE                     COMMAND                  CREATED          STATUS         PORTS                                       NAMES
775de272840c   counter-app-master-web-fe   "python app.py"          52 minutes ago   Up 2 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   counter-app-master-web-fe-1
60badb2d9db4   redis:alpine                "docker-entrypoint.s…"   52 minutes ago   Up 2 minutes   6379/tcp                                    counter-app-master-redis-1
# docker network ls
NETWORK ID   NAME                           DRIVER    SCOPE
2d11a73f849e   bridge                           bridge    local
7bc0ef96bf07   counter-app-master_counter-net   bridge    local
303bac79a650   host                           host      local
f08b7d46c61e   none                           null      local
# docker volume ls
DRIVER    VOLUME NAME
local   counter-app-master_counter-vol 测试访问效果:每革新一次页面,计数将叠加
https://i-blog.csdnimg.cn/blog_migrate/7ba3341fdb738586d2fa4397e325e0dd.png

六、常用命令



[*]启动服务:
        docker-compose up    #在前台启动服务
        docker-compose up -d    #启动服务在配景运行
        docker-compose up --build    #重新构建服务


[*]停止并移除服务、网络、卷和默认镜像:
        docker-compose down    #停止并移除服务
        docker-compose down -v    #停止服务并移除卷


[*]暂停服务:
        docker-compose pause


[*]取消暂停服务:
        docker-compose unpause


[*]查看服务日志:
        docker-compose logs    #查看所有服务日志
        docker-compose logs -f    #实时查看日志


[*]启动服务:
        docker-compose start


[*]停止服务:
        docker-compose stop


[*]重启服务:
        docker-compose restart


[*]查看当前服务状态:
        docker-compose ps


[*]进入配景运行的容器:
        docker-compose exec 容器名 /bin/sh


[*]拉取镜像:
        docker-compose pull


[*]构建镜像:
        docker-compose build


[*]删除或停止容器:
        docker-compose rm


[*]本地体系和容器之间复制文件/文件夹:
        docker-compose cp

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Docker Compose - 安装和基本使用