简化容器化部署:docker-compose,构建和管理多容器应用的终极指南

目录

一、docker-compose安装

开始安装

在安装过程中,可能会出现一个错误,这里我们忽略这个错误

启动Docker桌面

开机自动启动

二、docker-compose使用流程

1、docker-compose使用流程

1) 规划目录

2) 编写docker-compose.yml文件

        服务定义: Compose 文件中的每个顶级键定义一个服务。每个服务可以基于一个 Docker 镜像运行,并包含特定的配置,如端口映射、环境变量等。

3) 创建容器

4)查看创建好的容器

2、docker-compose常用管理操作

三、docker-compose.yml文件

1、整体结构

2、容器名称下面的指令

案例: 配置web集群


        根据上期容器化奇迹:打开创新之门,加速业务发展的秘密武器,受到了广泛的欢迎,看来还是有许多小伙伴对容器非常感兴趣,那么在这片文章里,我会详细给大家聊聊一款容器的编排工具,docker-compose

我先来给大家介绍一下,什么是docker-compose

      1、docker-compose就像一张大章鱼,把docker比做成一个一个的集装箱,这个大章鱼有很多触手管控着这么多的集装箱,这个大章鱼是一个用于定义和运行多容器 Docker 应用程序的工具。通过使用docker-compose,你可以使用简单的 YAML 文件定义整个应用程序的服务、网络和卷等配置,然后使用单个命令启动或停止整个应用程序。

        2、这里要注意了,docker-compose只是一款单机版的容器编排工具,也就是说它只能在本地服务器操作,无法实现夸服务器管理容器,当然这也是有办法解决的,敬请关注下一篇文章:掌握Kubernetes:构建弹性、可扩展、自动化的容器化部署与管理

一、docker-compose安装

下载地址:小编这里使用Debian操作系统

https://docs.docker.com/desktop/install/debian/

开始安装

apt install gnome-terminal

apt-get update

apt-get install ./docker-desktop-<version>-<arch>.deb

在安装过程中,可能会出现一个错误,这里我们忽略这个错误

N: Download is performed unsandboxed as root, as file '/home/user/Downloads/docker-desktop.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

启动Docker桌面

systemctl --user start docker-desktop
docker compose version
Docker Compose version v2.17.3

docker --version
Docker version 23.0.5, build bc4487a

docker version
Client: Docker Engine - Community
 Cloud integration: v1.0.31
 Version:           23.0.5
 API version:       1.42
<...>

开机自动启动

systemctl --user enable docker-desktop

二、docker-compose使用流程

1、docker-compose使用流程

1) 规划目录
[root@localhost ~]# mkdir /opt/demoCompose
2) 编写docker-compose.yml文件
[root@localhost demoCompose]# cat docker-compose.yml 
version: '3'
services:
    web:
      image: nginx
    redis:
      image: redis
        服务定义: Compose 文件中的每个顶级键定义一个服务。每个服务可以基于一个 Docker 镜像运行,并包含特定的配置,如端口映射、环境变量等。

        version: '3' 这里代表版本是3的版本

        services: 定义一个服务

        web:服务的名称(自己随便定义,没有什么要求)

        image: nginx: 镜像使用nginx镜像,为了提高速度建议提前准备好此镜像

3) 创建容器
[root@localhost demoCompose]# docker compose up -d

容器命名规则:

当前目录_容器名称_数字

4)查看创建好的容器
[root@localhost demoCompose]# docker compose ps -a
       Name                      Command               State    Ports  
-----------------------------------------------------------------------
democompose_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp
democompose_web_1     /docker-entrypoint.sh ngin ...   Up      80/tcp 

2、docker-compose常用管理操作

  • 创建容器
# docker-compose up -d

参数:
	1) --scale web=2
          横向扩展,将名称为web的容器启动两个
	
	2)-f选项
		默认名称为docker-compose.yml文件,-f可指定其他文件名,不建议使用
  • 查看容器
# docker-compose ps
  • 容器启动管理操作
# docker compose {start|stop|restart}
  • 停止并删除容器
# docker-compose down
  • 查看容器的进程信息
# docker-compose top
  • docker-compose build

当目录下的dockerfile发生变动时,默认情况下,docker-compose并不会重构镜像,需要执行该命令手动重新构建,再执行docker-compose up -d重建容器

[root@localhost testCompose]# tree ./
./
├── docker-compose.yml
├── Dockerfile
├── file01.txt
└── file02.txt
[root@localhost testCompose]# cat docker-compose.yml 
version: '3'
services:
   web_server:
       build: ./
[root@localhost testCompose]# cat Dockerfile 
FROM nginx:latest

ADD file01.txt /tmp
ADD file02.txt /tmp

三、docker-compose.yml文件

注意:编写这个文件的时候要严格根据yml语法进行,否则会出现错误

1、整体结构

  • services
    • 描述创建容器信息
  • networks
    • 定义容器网络信息
  • volumes
    • 定义数据卷
version: "3"
services:
    容器名称:
        .........
        .........
    容器名称:
        .............
        .............
networks:
volumes:

2、容器名称下面的指令

  • 指定镜像名称
image: 镜像名称
  • 指定数据卷,持久化存储
volumes:
    - 物理目录:容器目录
    - 物理目录:容器目录
  • 创建容器时,执行的操作
command: "shell命令"
  • 指定容器的网络连接
links:
    - 容器名称:别名
  • 发布服务
    ports:
        - 物理机端口:容器端口
  • 指定容器的服务端口
    expose:
        - 端口
  • 传递环境变量
    environment:
        key: value
        key: value
  • 定义容器的依赖关系
    depends_on:
        - 容器名称
        - 容器名称
  • 定义容器部署参数
    deploy: 
    	replicas: 3

    参数说明:

  • replicas
    1. 指定容器的副本数
  • 容器的资源限制
    resources:		
        limits:
    		cpus: "0.50"
    		memory: 50M
    	reservations:
    		cpus: "0.25"
    		memory: 20M

    参数说明:

  • limits: 硬限制
  • reservations: 软限制
  • 容器进行健康状态检测
    healthcheck:
    	test: ["CMD", "curl", "-f", "http://localhost"]
    	interval: 10s
    	timeout: 10s
    	retries: 3
    	start_period: 40s
  • 容器网络模式
    network_mode: "bridge"
    network_mode: "host"
    network_mode: "none"

    案例: 配置web集群

    [root@localhost webCompose]# pwd
    /root/webCompose
    [root@localhost webCompose]# tree ./
    ./
    ├── docker-compose.yml
    ├── haproxy.cfg
    ├── webA
    │   └── index.html
    └── webB
        └── index.html
    global
           maxconn 2000
           nbproc 4
           daemon
    
    defaults
           retries 3
           timeout connect 5s
           timeout client 10s
           timeout server 30s
           timeout check 2s
    
    listen web_service
           bind 0.0.0.0:8888
           mode http
           balance roundrobin
           server web01 webA:80
           server web02 webB:80
    version: "3"
    services:
        webA:
          image: nginx:1.14
          expose:
             - 80
          volumes:
             - ./webA/index.html:/usr/local/nginx/html/index.html
        webB:
          image: nginx:1.14
          expose:
             - 80
          volumes:
             - ./webB/index.html:/usr/local/nginx/html/index.html
        web_haproxy:
          image: haproxy
          depends_on:
              - webA
              - webB
          links:
              - webA:webA
              - webB:webB
          volumes:
              - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
          ports:
             - 80:8888

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清汤鸡蛋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值