介绍
介绍
前面福哥带着大家学会了使用Dockerfile搭建PHP运行环境、MySQL数据库、Redis数据库和Elasticsearch搜索引擎,大家应该发现了搭建这些服务的时候所进行的操作的步骤都是差不多的。那么按照技术人员追求简单、总结规则最后再技术革新的性格一定会创造一个简单、高效地做这些事情的方法。而今天我们要学习的docker-compose项目就是一个用来高效部署一整套运行环境的开源工具,它是一个基于go语言开发的项目,可以在github上面获取到。
今天福哥就带着大家一起学习一下这个工具docker-compose的使用技巧!
环境
操作系统 | CentOS 7 x86_64 2009 |
服务器 | TFCentOS7x64 |
IP | 192.168.168.68 |
Docker | 18.06.3-ce, build d7080c1 |
Docker网络 | tfnet |
docker-compose | 1.29.2 |
安装
安装
docker-compose是一个开源go语言项目,可以在github上面直接下载。
https://github.com/docker/compose
目前docker-compose已经推出了v2版本了,看了一下这个v2版本的程序文件都要40多兆,太大了!所以福哥还是选择了v1版本的最新版本1.29.2,福哥就下载它了!
https://github.com/docker/compose/tags?after=v2.0.0
福哥的环境是CentOS7的64位系统,自然就选择Linux-x86_64这个下载了!
https://github.com/docker/compose/releases/tag/1.29.2
下载
这个下载速度是非常非常的缓慢的,还经常因为网速过低而中断。所以福哥这里用了一个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
授权
下载的文件就是一个应用程序,我们只要授权可执行权限就可以使用了!
chmod +x /usr/sbin/docker-compose docker-compose --version
基本格式
语法
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
删除旧容器
接着我们要把前面几课创建的PHP、MySQL、Redis和Elasticsearch服务的容器删除掉,否则docker-compose会报错说容器名称冲突了!
docker-compose up -d
docker rm -f tfphp docker rm -f tfmysql docker rm -f tfredis docker rm -f tfelasticsearch
启动
这个启动实际上是将配置文件里的全部服务都启动起来,启动顺序默认按照services下面的服务列表从上到下逐个启动,服务所使用的镜像如果不存在则会先创建这个镜像。
启动服务组,已经启动服务的不做处理。
docker-compose up -d
启动服务组,强制重新创建服务所需镜像,已经启动的服务不做处理。
docker-compose up -d --build
启动服务组,强制重新创建服务所需镜像,强制重新创建服务的容器。
docker-compose up -d --build --force-recreate
检查一下MySQL、Redis的联通情况!
测试MySQL,http://192.168.168.68/tfmysql.php,没有问题!
测试Redis,http://192.168.168.68/tfredis.php,也没有问题!
重构镜像
重构全部服务依赖的镜像。
docker-compose build
重构指定服务依赖的镜像。
docker-compose build tfphp
重建服务
重建全部服务的容器。
docker-compose up -d --force-recreate
重建指定服务的容器。
docker-compose up -d --force-recreate tfphp
日志
查看全部服务的日志。
docker-compose logs
查看指定服务的日志。
docker-compose logs tfphp
跟踪指定服务的日志。
docker-compose logs -f tfphp
跟踪指定服务的日志并且从最后若干行开始。
docker-compose logs -f --tail 6 tfmysql
停止
停止服务组,删除服务组内全部服务容器。
docker-compose down
删除残留服务
福哥先把服务组的服务都启动起来!
docker-compose up -d
然后福哥把docker-compose.yml里的tfphp服务配置信息删除掉,这时再次启动服务组的时候docker-compose会警告说有个残留的tfphp服务。
docker-compose up -d
如果要删除这些服务,可以使用“--remove-orphans”选项。
docker-compose up -d --remove-orphans
总结
今天福哥带着大家学习了Docker容器管理工具docker-compose的使用技巧,在单服务器部署服务docker-compose完全可以应付,而且管理起来非常简单~~
那么要是多台服务器上面部署服务用什么工具会比较好呢?后面福哥会教给大家使用k8s(kubernetes)来管理多台服务器组成的服务器集群,敬请期待~~