当我们的微服务是部署到容器中的时候,若服务较多,那么一个个的启动就会比较麻烦。此外还会遇到顺序的问题,服务都部署到容器了,那么mysql、redis、nacos了一般也就在容器了,我们启动服务时,mysql、redis、nacos这些是要提前启动好的。为了解决这些问题,我们可以使用docker-compose.yml文件编排容器。
1. 微服务做成docker镜像
首先呢,我们需要将我们的微服务做成Docker镜像。这一步我们需要Dockerfile文件。
1.1 Dockerfile文件
jdk环境呢,docker hub上有官方的基于openjdk的java镜像,我们可以直接用此作为底层包。
也可以参考前面Dockerfile的应用,自己制作jdk环境,还可以加其他自己想要的功能。
参考:DockerFile使用
使用官方的java环境,Dockerfile简单的是这样的:
sudo mkdir -p /home/soft/jar/
cd /home/soft/jar
# 将我们的jar包拷贝到这个目录
# 在此目录新建Dockerfile文件
sudo vim Dockerfile
写入以下内容:
FROM java:8
LABEL author="zrb" version="1.2"
LABEL description="admin server image"
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
#设置时区 根据情况看是否需要
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 将jar包添加到容器中并更名为xxx.jar
ADD boot-admin-server.jar admin-server.jar
RUN bash -c 'touch /admin-server.jar'
# 运行jar包
ENTRYPOINT ["java", "-jar", "-Dfile.encoding=utf-8", "-Dspring.config.location=classpath:/application-local.yml", "/admin-server.jar"]
#暴露9009端口
EXPOSE 9009
我的目录是这样的:
1.2 运行命令,生成镜像
命令:
sudo docker build -t admin:1.2 .
镜像构建成功以后,我们run测试一下:
sudo docker run -it --name admin admin:1.2
build
run
test
2. docker-compose.yml编排微服务
编写myserver.yml
文件:
version: "3.9"
services:
admin:
image: admin:1.2
hostname: admin-server
container_name: admin-server
ports:
- "9009:9009"
#volumes:
# - /app/microService:/data
networks:
zrb_network:
ipv4_address: 192.168.20.50
# 有先后顺序,需要这个
depends_on:
- redis6
- mysql6
redis6:
hostname: redis6
container_name: redis6
image: redis
ports:
- "6479:6379"
volumes:
- /home/soft/redis6/redis.conf:/etc/redis/redis.conf
- /home/soft/redis6/data:/data
networks:
zrb_network:
ipv4_address: 192.168.20.51
command: redis-server /etc/redis/redis.conf
mysql6:
image: mysql
hostname: mysql6
container_name: mysql6
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'db2021'
TZ: Asia/Shanghai
ports:
- "3396:3306"
volumes:
- /home/soft/mysql6/log:/var/log/mysql
- /home/soft/mysql6/data:/var/lib/mysql
- /home/soft/mysql6/conf/my.cnf:/etc/mysql/my.cnf
- /home/soft/mysql6/mysql-files:/var/lib/mysql-files
networks:
zrb_network:
ipv4_address: 192.168.20.52
networks:
# 这里网络是提前创建的,且定义了ip,所以这里直接拿来用,这么写
zrb_network:
external: true
检查启动
sudo docker compose -f myserver.yml config -q
sudo docker compose -f myserver.yml up
1684917749701.png
网友评论