同福

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

介绍

介绍

前面福哥带着大家学会了使用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/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/a251ae0f1790ed63e855266d4725738f.png

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

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

总结

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

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