1. Docker Compose 简介
随着微服务以及分布式的飞速发展,一个分布式微服务系统里包含了许许多多的微服务,每一个服务都是一个单独的进程,如果我们用Docker来将微服务进行部署的话,在服务管理上就会出现一些麻烦,比如:需要使用docker build和docker run来启动我们的一个个微服务,每一个微服务可能在网络上要求是在同一个网段中等问题,而docker compose就是用来解决这些问题的。
Docker Compose是Docker容器中的一个编排工具,它可以对我们的容器进行批量的管理,比如:容器的批量创建,同时启动或停止等,而且通过docker compose来创建容器的话,docker会给这些容器分配在同一个网段中,从而可以让容器之间进行访问。
Docker Compose主要是通过一个yaml的配置文件来对容器进行编排的,在yaml文件里,我们可以配置数据库,微服务等容器,让他们一起运行或停止。
2. Docker Compose安装
Docker Compose是Docker里的一个开源项目,我们可以下载并使用。
1.下载Docker Compose
#-L后面是下载地址,v代表的是版本,-o表示存放地址
curl -L "https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2.授权
#+x 后面是文件的存放路径
sudo chmod +x docker-compose
3.测试是否安装成功
3. Docker Compose编排结构
Docker Compose主要分为三层,分别是工程,服务和容器。其中工程可以包括多个服务,服务里面可以包括多个容器。在我们编写一个Docker Compose工程时,在执行Docker Compose相关指令的这个目录下的使用文件组成了一个过程。
4. Docker Compose配置文件分析(yaml)
Docker Compose允许用户通过一个docker-compose.yml文件来定义一组相关联的应用容器为一个项目。一个标准的Docker-Compose文件应该包含version、services、networks 三大部分,其中version主要是声明compose的版本,service则是用来设置一个个服务,networks则是这个工程的网络声明。最关键的是services和networks两个部分。
相关参数以及命令详细参考: https://blog.csdn.net/crazymakercircle/article/details/121134684
version: '3.5' #容器
services: #服务
nacos1: #镜像
restart: always
image: nacos/nacos-server:${NACOS_VERSION}
container_name: nacos1
privileged: true
ports:
- "8001:8001"
environment:
NACOS_SERVER_IP: ${NACOS_SERVER_IP_1}
NACOS_APPLICATION_PORT: 8001
NACOS_SERVERS: ${NACOS_SERVERS}
volumes:
- ./logs_01/:/home/nacos/logs/
- ./data_01/:/home/nacos/data/
- ./config/:/home/nacos/config/
networks:
- ha-network-overlay
mysql:
image: mysql:8.0.26
container_name: mysql # container name
ports:
- "3307:3306" # external port 3307
volumes:
- /home/docker/mysql/data:/var/lib/mysql # 数据存放在/home/docker/mysql/data
- /home/docker/mysql/conf.d:/etc/mysql/conf.d # custom config
- /home/docker/mysql/log:/var/log/mysql # log
environment:
- MYSQL_ROOT_PASSWORD=root # init pwd
- TZ=GMT%2B8
restart: always # docker重启时,容器自动重启
networks:
- ha-network-overlay
networks:
ha-network-overlay:
external: true
常用的yaml配置参数(service下的参数):
-
image:指定镜像名称或镜像ID。
-
build:指定Dockerfile所在文件夹的路径。Compose将会利用他自动构建这个镜像,然后使用这个镜像。
-
command:容器启动后默认执行的命令。
-
links:链接到其他服务容器,可以使用服务名称或服务别名
-
external_links:链接到docker-compose.yml外部的容器,甚至并非是Compose管理的容器。
-
ports:暴露端口信息。
-
expose:暴露端口,与posts不同的是expose只可以暴露端口而不能映射到主机,只供外部服务连接使用
-
volumes:设置卷挂载的路径,和容器挂载那个是类似的。
-
environment:设置环境变量。
-
env_file:从文件中获取环境变量,可以为单独的文件路径或列表。
-
extends:基于已有的服务进行服务扩展。
-
net:设置网络模式。使用和docker client 的 --net 参数一样的值。
-
pid:和宿主机系统共享进程命名空间,打开该选项的容器可以相互通过进程id来访问和操作。
-
healthcheck:健康检查,这个非常有必要,等服务准备好以后再上线,避免更新过程中出现短暂的无法访问。其实大多数情况下健康检查的规则都会写在 Dockerfile 中
-
depends_on:依赖的服务,优先启动。
-
deploy:部署相关的配置都在这个节点下。
5. Docker Compose简单入门
1.首先准备两个jar包和相对应的dockerfile文件
adminDockerFile:
FROM java:8
# 拷贝文件并且重命名
ADD *.jar /admin-authorized.jar
EXPOSE 8087
ENTRYPOINT ["java","-jar","/admin-authorized.jar"]
orderDockerfile:
FROM java:8
# 拷贝文件并且重命名
ADD *.jar /order-list.jar
EXPOSE 8082
ENTRYPOINT ["java","-jar","/order-list.jar"]
2.编写docker-compose文件
version: "3.7"
services:
order-list:
#容器构建
build:
#容器构建相对路径/绝对路径
context: .
#指定构建的Dockerfile
dockerfile: orderDockerfile
#容器启动镜像
image: order-list
#容器启动时自定义的容器名称(一定要和注册服务的配置名一样)
container_name: order-list
#容器所在网络
networks:
- cloud
#容器映射端口
ports:
- "8082:8082"
#提高当前用户在容器里面的权限
privileged: true
admin-authorized:
#容器构建
build:
#容器构建相对路径/绝对路径
context: .
#指定构建的Dockerfile
dockerfile: adminDockerfile
#容器启动镜像
image: admin-authorized
#容器启动时自定义的容器名称(一定要和注册服务的配置名一样)
container_name: admin-authorized
#容器所在网络
networks:
- cloud
#容器映射端口
ports:
- "8087:8087"
#提高当前用户在容器里面的权限
privileged: true
#定义网络
networks:
#网络名
cloud:
#有就使用,没有就会新建网络(默认bridge)
external: true
3.执行docker-compose up --build命令,服务启动成功