1.什么是Composer
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose 使用的三个步骤:
- 使用 Dockerfile 定义应用程序的环境。
- 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 最后,执行 docker-compose up 命令来启动并运行整个应用程序。
docker-compose.yml 的配置案例如下(配置参数参考下文):
2.Docker Composer安装及配置
Linux
Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:Releases · docker/compose · GitHub。
运行以下命令以下载 Docker Compose 的当前稳定版本:
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
要安装其他版本的 Compose,请替换 1.24.1。
将可执行权限应用于二进制文件:
sudo chmod +x /usr/local/bin/docker-compose
创建软链:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功:
$ docker-compose --version
安装结构
实例(一):
创建rabbitmq容器
编写docker-compose.yml文件:(编写容器相关配置)
version: '3'
services:
rabbitmq:
image: rabbitmq:3.8-management # 镜像文件
container_name: rabbitmq # 容器名为'rabbitmq'
hostname: my-rabbit # 主机名(集群的时候需要这个)
restart: always # 设置docker重启时容器也重启
environment: # 设置环境变量,相当于docker run命令中的-e
TZ: Asia/Shanghai
LANG: en_US.UTF-8
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: 123456
volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
- "./rabbitmq/data:/var/lib/rabbitmq"
- "./rabbitmq/log:/var/log/rabbitmq" # 防止log日志报failed to open log file
ports: # 配置端口映射
- "5672:5672" # 生产者、消费者通信的端口
- "15672:15672" # 管理面板的端口
上面的Compose文件就描述一个项目,安装rabbitmq使用公众镜像
载编写docker-compose.yml文件目录下。使用docker-compose命令启动容器
docker-compose up -d
运行结果
docker-compose进阶
集群部署
部署cloud微服务利用dokcer-compose部署
- 实现思路查看提供的cloud微服务的文件夹,编写docker-compose文件
- 修改自己的cloud项目,将数据库,nacos地址都命名docker-compose中的服务名
- 使用maven工具打包,将项目中的每个微服务都打包为app.jar
- 将打包好的app.jar拷贝到clolud中的每一个对应的目录中
- 将cloud上传 至虚拟机,利用docker-compose up -d部署
compose文件
目录结构,我们不发布完,只发布byft-gateway,byft-auth,byft-admin三个模块
内容如下:
version: "3.2"
services:
nacos:
image: nacos/nacos-server
environment:
MODE: standalone
ports:
- "8848:8848"
adminservice:
build: ./byft-admin/admin-boot
authservice:
build: ./byft-auth
gateway:
build: ./byft-gateway
ports:
- "10010:10010"
# 在docker-compose.yml 目录下运行docker-compose命令即可
docker-compose up -d
注
byft-gateway网关Dockerfile配置
FROM openjdk:8-jre
MAINTAINER byft liuhao@qq.com
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层,从而保证容器存储层的无状态化
# 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp
# 复制jar至镜像
ADD target/byft-gateway.jar app.jar
ENTRYPOINT ["java", "-Xmx128m", "-Djava.security.egd=file:/dev/./urandom","-Dcsp.sentinel.app.type=1", "-jar", "/app.jar"]
EXPOSE 9999
byft-admin服务Dockerfile配置
# 基础镜像
FROM openjdk:8-jre
# 维护者信息
MAINTAINER byft <liuhao@qq.com>
# 设置容器时区为当前时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层
# 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp
# 复制主机文件至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下
ADD target/admin-boot.jar app.jar
# 容器启动执行命令
ENTRYPOINT ["java", "-Xmx512m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
# 声明容器提供服务端口
EXPOSE 8800
byft-auth授权服务Dockerfile配置
FROM openjdk:8-jre
MAINTAINER byft liuhao@qq.com
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层,从而保证容器存储层的无状态化
# 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp
# 复制jar到镜像
ADD target/byft-auth.jar app.jar
ENTRYPOINT ["java", "-Xmx128m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
EXPOSE 8000