docker-compose –- 单机多容器神器
学习本篇文章之前,请先了解上篇文章部署神器 – docker,一文带你从开发变运维废话不多说,直接开始正文。docker-compose 下载docker-compose官网下载,然后放到liunx服务器/usr/local/bin下面,并重命名为docker-composesudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-comp
·
学习本篇文章之前,请先了解上篇文章部署神器 – docker,一文带你从开发变运维
废话不多说,直接开始正文。
docker-compose 下载
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
测试是否安装成功
docker-compose 构建一个java进程
1.member-1.0.jar包一个,有如下接口
@GetMapping("/hello")
public String hello() {
return "hello!";
}
上传到服务器,接下来在同一目录准备Dockerfile
2.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"]
3.生成镜像
在jar目录,也就是Dockerfile目录下执行
#build一个镜像,相当于打包 . 表示生成镜像的Dockerfile目录
docker build -t member-image .
#查看镜像是否成功
docker images | grep member-image
如果出现生成镜像失败,请检查Dockerfile文件
4.准备docker-compose.yaml文件
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
5.启动容器
#启动容器
docker-compose up -d
#查看容器
docker-compose ps
Name Command State Ports
-------------------------------------------------------------
member01 sh ./bin/start.sh Up 0.0.0.0:8080->8080/tcp
6.访问
http://192.168.0.220:8080/hello,可以看到正常输出“hello”
同时部署多个服务,以及服务间的内网访问
docker-compose.yaml
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源码分析
心若不老,学习不停
更多推荐
已为社区贡献1条内容
所有评论(0)