学习本篇文章之前,请先了解上篇文章部署神器 – docker,一文带你从开发变运维
废话不多说,直接开始正文。
docker-compose官网下载,然后放到liunx服务器/usr/local/bin下面,并重命名为docker-compose
#通过命令下载 最好去官网看对应的版本
wget https://github.com/docker/compose/releases/download/v2.7.0/docker-compose-linux-x86_64
#网络不行的情况 自己去官网下载
sudo mv docker-compose-linux-x86_64 /usr/bin/docker-compose
# 添加可执行权限
sudo chmod +x /usr/bin/docker-compose
最后执行docker-compose -v
测试是否安装成功
@GetMapping("/hello")
public String hello() {
return "hello!";
}
上传到服务器,接下来在同一目录准备Dockerfile
#使用公有仓库的jdk镜像
FROM openjdk:8
#服务名称
ENV APP_NAME member
ENV XMS Xms128m
ENV XMX Xmx2048m
#环境
ENV PROFILE dev
USER root
#在镜像中创建该目录
RUN mkdir -p /app/${APP_NAME}
#设定为工作目录 相当于cd到这个目录下
WORKDIR /app/${APP_NAME}
#设置时间
ENV TZ Asia/Hong_Kong
#服务Dockerfile文件目录下的jar复制到当前目录
COPY *.jar /app/${APP_NAME}/${APP_NAME}.jar
#启动语句
CMD ["sh", "-c", "java -jar -${XMS} -${XMX} /app/${APP_NAME}/${APP_NAME}.jar --spring.profiles.active=${PROFILE}"]
FROM openjdk:8
USER root
RUN mkdir -p /app/member-service
WORKDIR /app/member-service
ENV TZ Asia/Hong_Kong
#只写了启动命令,其他通过挂载共享进容器
CMD ["sh", "-c", "java -jar -Xms128m -Xmx2048m /app/member-service/member-1.0.jar --spring.profiles.active=test"]
在jar目录,也就是Dockerfile目录下执行
#build一个镜像,相当于打包 . 表示生成镜像的Dockerfile目录
docker build -t member-image .
#查看镜像是否成功
docker images | grep member-image
如果出现生成镜像失败,请检查Dockerfile文件
version: '3.7'
services:
member01:
#镜像名
image: member-image
#容器名
container_name: member01
#端口映射
ports:
- "8080:8080"
#日志目录挂载
volumes:
- /root/member/logs:/app/member/logs
#如果Dockerfile只有启动命令时,就需要把Jar也挂载过去,后续更新不用删除容器
#- /root/member:/app/member
#单独创建的网络
networks:
- my-net
networks:
my-net:
external: true
#启动容器
docker-compose up -d
#查看容器
docker-compose ps
Name Command State Ports
-------------------------------------------------------------
member01 sh ./bin/start.sh Up 0.0.0.0:8080->8080/tcp
http://192.168.0.220:8080/hello,可以看到正常输出“hello”
version: '3.7'
services:
member01:
image: member-image
container_name: member01
#端口映射
ports:
- "8080:8080"
#日志目录挂载
volumes:
- /root/member/logs:/app/member/logs
#单独创建的网络
networks:
- my-net
nginx01:
#从公网直接获取的镜像 默认不填版本号就拉最新的也就是 nginx:latest
#如果需要其他版本好的格式为 nginx:1.19.7
image: nginx
container_name: nginx01
#端口映射
ports:
- "80:80"
#单独创建的网络
networks:
- my-net
networks:
my-net:
external: true
执行 docker-compose up -d
就可启动成功了,同时启动了两个服务
关于内网访问,我们可以这样试。在上面刚创建的两个服务,我们进入到java服务所在的容器:
#进入容器
docker exec -it member01 /bin/sh
#我们在java的容器中ping一下nginx
ping nginx01
可以正常ping通,反之一样。不过需要保证两者在一个网络下,或者直接采用的是宿主机网络
以上就是docker-compose –- 单机多容器神器的全部内容了。
下一篇:Java 集合 – List接口实现之ArrayList、LinkedList源码分析
心若不老,学习不停