docker 三剑客之Compose

Docker Compose是Docker官方的开源项目,用于快速编排容器集群。它通过docker-compose.yml文件定义并运行多容器应用,解决微服务部署和管理问题。本文介绍了Compose的概念,如服务和服务组合,并提供了安装及实践操作步骤,包括创建服务、配置文件详解、启动与停止服务以及常用命令。
摘要由CSDN通过智能技术生成

一、docker Compose简介

Compose 项目是Docker官方的开源项目,负责实现Docker容器集群的快速编排,开源代码在https://github.com/docker/compose 上。

我们知道使用Dockerfile模板文件可以让用户很方便的定义一个单独的应用容器,其实在工作中,经常会碰到需要多个容器相互配合来完成的某项任务情况,例如工作中的web服务容器本身,往往会在后端加上数据库容器,甚至会有负责均衡器,比如LNMP服务。

Compose 就是来做这个事情的,它允许用户通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。

  • 微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,很不方便。
  • docker compose是一种编排服务,基于python语言实现,是一个用于在docker上定义并运行复杂应用的工具,可以让用户在集群中部署分布式应用。
  • 用户可以很容易的用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建,
  • 解决了容器与容器之间如何管理编排的问题。

docker Compose中有两个重要的概念:

  • 服务(service):一个应用的容器,实际上可以包括若干运行的相同镜像的容器实例。
  • 项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml中定义。

二、docker compose实践

Docker compose方式安装:
方式1:curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose #官方推荐,但是慢
chmod +x /usr/local/bin/docker-compose
方式2 :wget http://mirrors.aliyun.com/docker-toolbox/linux/compose/1.21.2/docker-compose-Linux-x86_64

下载好后放到/usr/local/bin/路径下,改名为docker-compose
赋予执行权限:chmod +x /usr/local/bin/docker-compose
在这里插入图片描述
1.创建一个空目录

[root@node2 bin]# mkdir -p ~/compose
[root@node2 bin]# cd ~/compose/
[root@node2 compose]# ls

2.编辑一个.yml文件

  • docker-compose.yml属性:
  • image: 指定镜像名称或镜像id,如果本地镜像不存在,compose将会尝试拉取这个镜像。
  • build:指定dockfile所在文件夹的路径,compose将会利用它自动构建这个镜像,然后使用这个镜像。
  • command:覆盖容器启动后默认执行的命令。
  • links:链接到其他服务中的容器。
  • ports:端口映射
  • expose:暴露端口信息
  • volumes:卷挂载路径设置
[root@node2 compose]# vim docker-compose.yml
[root@node2 compose]# cat docker-compose.yml 
web1:
  image:  nginx
  volumes:
    - ./web1:/usr/share/nginx/html

web2:
  image:  nginx
  volumes:
    - ./web2:/usr/share/nginx/html

haproxy:
  image:  haproxy
  volumes:
    - ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
  expose:
    - 80
  ports:
    - "80:80"
  links:
    - web1
    - web2

镜像的拉取:

[root@node2 compose]# docker pull haproxy
Using default tag: latest
latest: Pulling from library/haproxy
bc51dd8edc1b: Already exists 
ec04e5fc10ca: Pull complete 
0c1dae5c47d0: Pull complete 
Digest: sha256:6f921726b32ac07177885c8ed180d07d0da322aecc11b1ade75c4aa31ee686a8
Status: Downloaded newer image for haproxy:latest

3.在compose目录下建立所需其他目录

[root@node2 compose]# mkdir haproxy web1 web2
[root@node2 compose]# ls
docker-compose.yml  haproxy  web1  web2
[root@node2 compose]# echo web1 > web1/index.html
[root@node2 compose]# echo web2 > web2/index.html
[root@node2 compose]# cd haproxy/
[root@node2 haproxy]# ls
[root@node2 haproxy]# vim haproxy.cfg
[root@node2 haproxy]# cat haproxy.cfg 
global
        maxconn         65535
        stats socket    /var/run/haproxy.stat mode 600 level admin
        log             127.0.0.1 local0
        uid             200
        gid             200
        #chroot          /var/empty
        daemon
defaults
        mode            http
        log             global
        option          httplog
        option          dontlognull
        monitor-uri     /monitoruri
        maxconn         8000
        timeout client  30s
        retries         2
        option redispatch
        timeout connect 5s
        timeout server  5s
        stats uri       /admin/stats
# The public 'www' address in the DMZ
frontend public
        bind            *:80
        default_backend dynamic
# The static backend backend for 'Host: img', /img and /css.
backend dynamic
        balance         roundrobin
        server          n1 web1:80 check inter 1000
        server          n2 web2:80 check inter 1000

查看一下compose目录下的结构

[root@node2 compose]# tree .
.
├── docker-compose.yml
├── haproxy
│   └── haproxy.cfg
├── web1
│   └── index.html
└── web2
    └── index.html

4.创建并开启服务
查看帮助:
在这里插入图片描述在这里插入图片描述

[root@node2 compose]# docker-compose up -d  #创建并开启服务
Creating compose_web1_1 ... done
Creating compose_web2_1 ... done
Creating compose_haproxy_1 ... done
[root@node2 compose]# docker-compose logs
Attaching to compose_haproxy_1, compose_web1_1, compose_web2_1
haproxy_1  | [NOTICE] 042/083346 (1) : New worker #1 (6) forked
[root@node2 compose]# docker ps  #查看状态
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES
bff276502db4        haproxy             "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp   compose_haproxy_1
9835df7260c8        nginx               "nginx -g 'daemon of…"   About a minute ago   Up About a minute   80/tcp               compose_web1_1
3433a0456a05        nginx               "nginx -g 'daemon of…"   About a minute ago   Up About a minute   80/tcp               compose_web2_1

5.测试:
在这里插入图片描述在这里插入图片描述6.优化
先把原来的服务停下来:

[root@node2 compose]# docker-compose down
Stopping compose_haproxy_1 ... done
Stopping compose_web1_1    ... done
Stopping compose_web2_1    ... done
Removing compose_haproxy_1 ... done
Removing compose_web1_1    ... done
Removing compose_web2_1    ... done

文件修改

[root@node2 compose]# vim docker-compose.yml
[root@node2 compose]# cat docker-compose.yml 
version: '3'
services:
  web1:
    image:  nginx
    volumes:
      - web-data:/usr/share/nginx/html
    networks:
      - my_net
  
  web2:
    image:  nginx
    volumes:
      - web-data:/usr/share/nginx/html
    networks:
      - my_net
  haproxy:
    image:  haproxy
    volumes:
      - ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
    expose:
      - 80
    ports:
      - "80:80"
    
    networks:
      - my_net
volumes:
  web-data:

networks:
  my_net:

再次创建并开启服务:

[root@node2 compose]# docker-compose up -d
Creating network "compose_my_net" with the default driver
Creating volume "compose_web-data" with default driver
Creating compose_haproxy_1 ... done
Creating compose_web1_1    ... done
Creating compose_web2_1    ... done

查看:

[root@node2 compose]# docker-compose ps
      Name                     Command               State         Ports       
-------------------------------------------------------------------------------
compose_haproxy_1   /docker-entrypoint.sh hapr ...   Up      0.0.0.0:80->80/tcp
compose_web1_1      nginx -g daemon off;             Up      80/tcp            
compose_web2_1      nginx -g daemon off;             Up      80/tcp            
[root@node2 compose]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
90816287c3f2        bridge              bridge              local
1ace4cfd4af2        compose_my_net      bridge              local
972e5e6c0508        host                host                local
8eeae59b9f3d        none                null                local
[root@node2 compose]# docker volume ls
DRIVER              VOLUME NAME
local               compose_web-data

查看数据卷并修改默认发布页面:

[root@node2 compose]# docker inspect webdata
[
    {
        "CreatedAt": "2020-02-10T22:04:18+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/webdata/_data",
        "Name": "webdata",
        "Options": {},
        "Scope": "local"
    }
]
[root@node2 compose]# cd /var/lib/docker/volumes/compose_web-data/_data
[root@node2 _data]# ls
50x.html  index.html
[root@node2 _data]# rm -rf index.html 
[root@node2 _data]# vim index.html
[root@node2 _data]# curl localhost
hahaha
[root@node2 _data]# curl localhost
hahaha
[root@node2 _data]# curl localhost
hahaha

附:docker compose常用命令

build构建或重新构建服务
kill强制停止服务容器
logs查看服务的输出
port打印绑定的公共端口
ps列出所有容器
pull拉取服务所需镜像
rm删除停止的服务器
up构建并启动容器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值