使用docker-compose
Compose 项目是 Docker 官方的开源项目, 负责实现对 Docker 容器集群的快速编排。
1、创建一个应用
就创建一个最基本的SpringBoot项目,就一个接口 /v1/hello
返回一个 hello字符串。
2、编写Dockerfile
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT [ "sh", "-c", "java -Dspring.profiles.active=$PROFILES $JAVA_OPTS $APP_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
3、编写docker-compose.yml
version: '3' #版本号必须是一个字符串
services:
# 服务名
demo4docker:
# 如果不使用镜像,那就指定上下文路径去构建
build:
# 上下文路径
context: .
# 指定dockerfile脚本
dockerfile: Dockerfile
# 构建镜像过程中的参数
args:
JAR_FILE: "demo4docker-1.0.jar"
# 若指定了容器名称,则服该服务无法扩展,因为默认是 项目名称_服务名称_序号。
container_name: deom4docker_container
# 环境变量,相当于docker run -e
environment:
JAVA_OPTS: "-Xms128m -Xmx256m -Xmn64m -Duser.timezone=GMT+8"
PROFILES: dev
# 绑定端口,相当于docker run -p
ports:
- "23211:8888"
4、准备执行环境并启动
1、创建一个文件夹,把Dockerfile,docker-compose.yml和你的jar包放在里面
2、在这个文件夹下执行 docker-compose up
这个文件夹叫什么,你的项目就叫什么
[seefly@centos-10 demo]$ docker-compose up
Building demo4docker
Step 1/5 : FROM openjdk:8-jdk-alpine
---> a3562aa0b991
Step 2/5 : VOLUME /tmp
---> Using cache
---> 37afe44fef97
Step 3/5 : ARG JAR_FILE
---> Using cache
---> d17161f7dfd2
Step 4/5 : COPY ${JAR_FILE} app.jar
---> 435ced7b9b8f
Step 5/5 : ENTRYPOINT [ "sh", "-c", "java -Dspring.profiles.active=$PROFILES $JAVA_OPTS $APP_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
---> Running in 9c2d0f4f40f5
Removing intermediate container 9c2d0f4f40f5
---> dabbf54aca75
Successfully built dabbf54aca75
Successfully tagged demo_demo4docker:latest
Creating deom4docker_container ... done
Attaching to deom4docker_container
容器日志....
5、其他基本命令
注意,下面这些命令的执行必须在docker-compose.yml同一个目录下,否则需要用-f指定这个文件在哪。
- docker-compose build [options] [services...] 构建或重新构建服务。
- docker-compose config 验证脚本语法是否正确,跟nginx -t差不多
- docker-compose up [options] [service]
默认情况下,up指令会停止当前启动的容器,并使用compose文件重新创建容器。
- --no-deps
只重新创建指定的服务容器 - --no-recreate 如果容器已经存在了,就不重新创建
- --force-recreate 强制重新创建,不能与上面的recreate一起使用
- --no-build 不自动构建缺失的服务镜像。
- --no-deps
- docker-compose stop demo4docker 停止服务中的所有容器,可以通过start重新启动
- docker-compose start [services...] 启动已经存在的服务
- docker-compose rm [SERVICE_NAME] 删除指定服务或所有服务下的容器,使用 -f 强制删除运行状态的。
- docker-compose restart [options] [SERVICES...] 重启指定或所有的服务。