使用docker-compose管理构建一整套docker服务

发表于 2023-04-05 12:14:23
阅读 73

介绍

介绍

前面福哥带着大家学会了使用Dockerfile搭建PHP运行环境、MySQL数据库、Redis数据库和Elasticsearch搜索引擎,大家应该发现了搭建这些服务的时候所进行的操作的步骤都是差不多的。那么按照技术人员追求简单、总结规则最后再技术革新的性格一定会创造一个简单、高效地做这些事情的方法。而今天我们要学习的docker-compose项目就是一个用来高效部署一整套运行环境的开源工具,它是一个基于go语言开发的项目,可以在github上面获取到。

今天福哥就带着大家一起学习一下这个工具docker-compose的使用技巧!

环境

操作系统
CentOS 7 x86_64 2009
服务器TFCentOS7x64
IP192.168.168.68
Docker18.06.3-ce, build d7080c1
Docker网络tfnet
docker-compose1.29.2

安装

安装

docker-compose是一个开源go语言项目,可以在github上面直接下载。

https://github.com/docker/compose

home/topic/2023/0809/21/19744bd63351ae7965d155d31d3d4abf.png

目前docker-compose已经推出了v2版本了,看了一下这个v2版本的程序文件都要40多兆,太大了!所以福哥还是选择了v1版本的最新版本1.29.2,福哥就下载它了!

https://github.com/docker/compose/tags?after=v2.0.0

home/topic/2023/0809/21/c7a5701972e391456404421b364fa86e.png

福哥的环境是CentOS7的64位系统,自然就选择Linux-x86_64这个下载了!

https://github.com/docker/compose/releases/tag/1.29.2

home/topic/2023/0809/21/2ded15f377c4fcbca3843650483b8b41.png

下载

这个下载速度是非常非常的缓慢的,还经常因为网速过低而中断。所以福哥这里用了一个while循环,不成功不罢休!

while [ ! -f /usr/sbin/docker-compose ] ; do curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64 -o /usr/sbin/docker-compose ; done

home/topic/2023/0809/22/bf13df38716615b7f0ebe0e79f807066.png

授权

下载的文件就是一个应用程序,我们只要授权可执行权限就可以使用了!

chmod +x /usr/sbin/docker-compose
docker-compose --version

home/topic/2023/0809/22/eab4ac5889d6bf03a6eef24fafaa739e.png

基本格式

语法

docker-compose的配置文件是用YAML格式编写的!默认的docker-compose配置文件就是在当前目录下放一个docker-compose.yml文件,docker-compose工具会自动调用它!

网络

docker-compose是用来管理一整套服务的工具,为了实现各个服务之间的网络访问通畅,docker-compose会强制创建一个docker的自定义网络network,并将全部服务都加入到这个自定义网络network里面。

这个自定义网络network可以让docker-compose自己创建,也可以使用我们创建好的一个。福哥使用的是前面创建的自定义网络tfnet。

networks:
  default:
    external:
      name: tfnet

服务

这是一个用docker-compose搭建的MySQL服务的配置信息!

services:
  mysql:
    build:
      dockerfile: Dockerfile
      context: ./dockerfile/mysql5.7
    image: registry.tongfu.net:5000/mysql:5.7-2.0.0
    container_name: tfmysql
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=abcdef
    volumes:
      - /tongfu.net/data/docker/data/tfmysql:/var/lib/mysql

福哥把这个MySQL的配置信息的参数逐个说明一下!

参数说明
mysql容器主机名称,对应启动容器命令参数就是“-h”
build当image镜像不存在的时候会根据build的参数动态创建image镜像
image容器镜像名称
container_name容器名称,对应启动容器命令参数就是“--name”
ports容器的映射端口,对应启动容器命令参数就是“-p”
environment容器的环境变量,对应启动容器命令参数就是“-e”
volumes容器映射宿主机目录的设置,对应启动容器命令参数就是“-v”

实例

这是福哥写了一个docker-compose的配置文件实例/tongfu.net/data/dockerfile/docker-compose.yml,这个配置文件把前面学习的PHP、MySQL、Redis和Elasticsearch服务都配置到里面了!

networks:
  default:
    external:
      name: tfnet

services:
  tfphp:
    build:
      dockerfile: Dockerfile
      context: ./tfphp7.4nginx
    image: registry.tongfu.net:5000/tfphp:7.4-nginx-1.0.0
    container_name: tfphp
    ports:
      - 80:80
    volumes:
      - /tongfu.net/data/docker/data/tfphp/html:/var/www/html

  tfmysql:
    build:
      dockerfile: Dockerfile
      context: ./tfmysql5
    image: registry.tongfu.net:5000/tfmysql:5.7-1.0.0
    container_name: tfmysql
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=abcdef
    volumes:
      - /tongfu.net/data/docker/data/tfmysql:/var/lib/mysql

  tfredis:
    build:
      dockerfile: Dockerfile
      context: ./tfredis
    image: registry.tongfu.net:5000/tfredis:6.0-1.0.0
    container_name: tfredis
    ports:
      - 6379:6379
    volumes:
      - /tongfu.net/data/docker/data/tfredis:/var/lib/redis

  tfelasticsearch:
    build:
      dockerfile: Dockerfile
      context: ./tfelasticsearch
    image: registry.tongfu.net:5000/tfelasticsearch:6-1.0.0
    container_name: tfelasticsearch
    ports:
      - 9200:9200
    volumes:
      - /tongfu.net/data/docker/data/tfelasticsearch:/usr/share/elasticsearch/data

基本操作

进入docker-compose目录

首先我们切到docker-compose.yml所在的目录/tongfu.net/data/dockerfile/,这样就免得每次执行docker-compose命令时候还得输入配置文件路径了!

cd /tongfu.net/data/dockerfile/
ls docker-compose.yml

home/topic/2023/0809/22/346484789608a252f25e3e50477fea50.png

删除旧容器

接着我们要把前面几课创建的PHP、MySQL、Redis和Elasticsearch服务的容器删除掉,否则docker-compose会报错说容器名称冲突了!

docker-compose up -d

home/topic/2023/0809/22/a251ae0f1790ed63e855266d4725738f.png

docker rm -f tfphp
docker rm -f tfmysql
docker rm -f tfredis
docker rm -f tfelasticsearch

home/topic/2023/0809/22/f313efa350e1eed66f031b409b0d795e.png

启动

这个启动实际上是将配置文件里的全部服务都启动起来,启动顺序默认按照services下面的服务列表从上到下逐个启动,服务所使用的镜像如果不存在则会先创建这个镜像。

启动服务组,已经启动服务的不做处理。

docker-compose up -d

home/topic/2023/0809/22/c5706ef6b4d9865296c065890f6e70b7.png

启动服务组,强制重新创建服务所需镜像,已经启动的服务不做处理。

docker-compose up -d --build

home/topic/2023/0809/22/9e3cd43baca848164d9ab81c9cb69767.png

启动服务组,强制重新创建服务所需镜像,强制重新创建服务的容器。

docker-compose up -d --build --force-recreate

home/topic/2023/0809/22/93e80c7da583067cf02fcbeecea89b57.png检查一下MySQL、Redis的联通情况!

测试MySQL,http://192.168.168.68/tfmysql.php,没有问题!

home/topic/2023/0809/22/7b6f6aa13638abc16759e9cf200a034b.png

测试Redis,http://192.168.168.68/tfredis.php,也没有问题!

home/topic/2023/0809/22/f8abf3c0227b27682c2e62fdb4d7ca5e.png

重构镜像

重构全部服务依赖的镜像。

docker-compose build

home/topic/2023/0809/22/fb9785157872a33cd876625f5fa47667.png

重构指定服务依赖的镜像。

docker-compose build tfphp

home/topic/2023/0809/22/4db759c437f7b3e331cacb0ba97db3d1.png

重建服务

重建全部服务的容器。

docker-compose up -d --force-recreate

home/topic/2023/0809/22/1431270419d0bdfd59e69d9adede8ff8.png

重建指定服务的容器。

docker-compose up -d --force-recreate tfphp

home/topic/2023/0809/22/ecc164705c9feb61d629f30836509634.png

日志

查看全部服务的日志。

docker-compose logs

home/topic/2023/0809/22/35332af34f534b81b0b70ad7c2a16474.png

查看指定服务的日志。

docker-compose logs tfphp

home/topic/2023/0809/22/3976f45467042f6371bfc2c48d00d6f1.png

跟踪指定服务的日志。

docker-compose logs -f tfphp

home/topic/2023/0809/22/3dedab59e06e84299a8a5ab7a4d03f19.png

跟踪指定服务的日志并且从最后若干行开始。

docker-compose logs -f --tail 6 tfmysql

home/topic/2023/0809/22/b66a5489011aacf92abac34fa7240c33.png

停止

停止服务组,删除服务组内全部服务容器。

docker-compose down

home/topic/2023/0809/22/56f5938be5db8023376e9381a3071c95.png

删除残留服务

福哥先把服务组的服务都启动起来!

docker-compose up -d

home/topic/2023/0809/22/7d882eda2477e667685c214aeaec758d.png然后福哥把docker-compose.yml里的tfphp服务配置信息删除掉,这时再次启动服务组的时候docker-compose会警告说有个残留的tfphp服务。

docker-compose up -d

home/topic/2023/0809/22/8401008745b03c99116e1011a14cf757.png

如果要删除这些服务,可以使用“--remove-orphans”选项。

docker-compose up -d --remove-orphans

home/topic/2023/0809/22/cdd02c553bd6dd31fbf1d08284181962.png

总结

今天福哥带着大家学习了Docker容器管理工具docker-compose的使用技巧,在单服务器部署服务docker-compose完全可以应付,而且管理起来非常简单~~

那么要是多台服务器上面部署服务用什么工具会比较好呢?后面福哥会教给大家使用k8s(kubernetes)来管理多台服务器组成的服务器集群,敬请期待~~