DockerCompose
可以基于Compose
文件帮我们快速的部署分布式应用,不需要我们手动一个个创建和运行容器。
Compose
文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
# Compose 文件格式有3个版本,分别为1, 2.x 和 3.x
# 目前主流的为 3.x 其支持 docker 1.13.0 及其以上的版本
version: "3.0" # 当前DockerCompose文件版本
services: # 具体的服务定义
mysql: # mysql的配置,启动的容器命名为mysql
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- "/tmp/mysql/data:/var/lib/mysql"
- "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
javaapp: # 某个java工程的配置(启动的容器命名为javaapp)
build: .
ports:
- "8999:8999"
把上面mysql的配置和启动mysql镜像运行命令比较:
# mysql 镜像启动命令
docker run \ # 创建并运行一个容器
--name mysql \ # 给容器个名字叫mysql
-e MYSQL_ROOT_PASSWORD=root \ # 设置mysql登录,密码为root
-p 3306:3306 # 把宿主机3306端口和容器的3306端口相关联
-v /mysql/conf/myLocal.cnf:/etc/mysql/conf.d \ # 宿主myLocal.cnf文件挂载到容器conf.d文件
-v /mysql/data:/var/lib/musql \ # 宿主data目录挂载到容器mysql目录
-d \ # 后台运行
mysql:5.7.25 # 需要启动的镜像名称
Compose
文件中的mysql
相当于--name mysql
image: mysql:5.7.25
就相当于运行命令中对镜像名称的指定environment
相当于-e
Compose
文件中没有配置-p
端口映射,是因为微服务中的mysql
只需要给微服务内部使用,无需暴露。
volumes
相当于-v
Compose
文件中没有和运行命令-d
后台运行的配置,因为默认就是后台运行,无需配置。mysql
镜像运行命令其实和Compose
中的指令是可以做到一一对一关系的。
这不就是把镜像运行命令写到了Compose
文件当中吗。
这是Compose
文件中典型的从已有镜像创建并运行容器的配置写法。
把上面javaapp的配置和把java工程构建成镜像并运行命令比较:
# 基于Dockerfike构建镜像
docker build -t javaapp:1.0 .
# 运行上面构建的镜像
docker run --name javaapp -p 8999:8999 -d javaapp:1.0
Compose
文件中javaapp
就相当于构建命令和运行命令中的javaapp
Compose
文件中build
就相当于构建命令中的docker build
Compose
文件中.
就相当于构建命令中的.
,都代表当前目录下构建镜像Compose
文件中 - "8999:8999"
相当于运行命令中的-p 8999:8999
,把宿主机端口和容器端口相关联Compose
文件中没有和运行命令-d
后台运行的配置,因为默认就是后台运行,无需配置。Compose
文件中没有配置java
工程的镜像名称,因为就是直接运行构建出来的镜像,已经能唯一确定了其实DockerCompose
就是把镜像构建和镜像运行等命令,转换成指令封装到Compose
文件当中。
上面命令和指令的对应关系记不住也没关系。
配置的时候可以查看官方文档:
https://docs.docker.com/compose/compose-file/
文档里各种配置都写的一清二楚。
部署前需要先进入需要部署的微服务的目录下执行:
# up 就是启动
# -d 代表后台运行
# 整体就是按docker-compose.yml中配置的信息去部署微服务
docker-compose up -d
访问DockerCompose在github上的发布版本
此时最新版是2.10.2
, 就以它为例。
docker-compose
二进制文件#命令解释:
# 从https://github.com/docker/compose/releases/download/2.10.2/docker-compose拉取二进制文件
# 拉取的文件所放的位置为/usr/local/bin/ 并重命名为docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.10.2/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
# 上面安装出问题就安装下面的
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.10.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
点击2.10.2
版本下的docker-compose-linux-x86_64
下载文件。
把文件docker-compose-linux-x86_64
重命名文件为docker-compose
。
重命名完成后使用finallshell
把文件上传到Linux
的 /usr/local/bin/
目录下。
chmod +x /usr/local/bin/docker-compose
docker-compose version
能正常显示版本号之后。发现打docker-compose
命令的时候,按tab
键并不能帮我们补全命令。
如果使用docker-compose
一键部署集群的话,这个命令是非常常用的。没有提示很不方便。
因此可以执行下面命令,让docker-compose
命令也可以被Linux
自动提示。
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
如果执行命令一直卡着下载不下来,是因为解析不了域名raw.githubusercontent.com
只需要在当前服务器的host
文件中追加一句ip
和域名的映射关系即可
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
DockerCompose
的卸载非常简单,只需要删除docker-compose
的二进制文件就行了。
就是当初我们上传上来的那个docker-compose
没有后缀的文件。
cd /usr/local/bin/
rm -rf /usr/local/bin/docker-compose