-
编写DockerFile文件
FROM lwieske/java-8 #容器元信息,帮助信息,Metadata,类似于代码注释 MAINTAINER [email protected] # 容器内部环境变量 ENV TZ=Asia/Shanghai ENV JAVA_OPTS="-Xms128m -Xmx256m" RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 创建目录 RUN mkdir -p /api-blog # 工作目录 WORKDIR /api-blog # 暴露端口 EXPOSE 81 # 将本地Jar添加到Docker镜像中 【Jar包位置】 【容器内部位置】 ADD ./Blog-api-0.0.1-SNAPSHOT.jar ./ # 睡眠5秒 启动Jar包 CMD sleep 5;java $JAVA_OPTS "-Dfile.encoding=UTF-8" -jar Blog-api-0.0.1-SNAPSHOT.jar
-
编写
docker-compose.yml
version: '2' services: # docker-compose build 启动的名称 api-blog: # 构建DockerFile镜像 build: # 指定DockerFile文件位置 context: ./build/api-blog # 配置Docker启动自动启动 restart: always # 镜像启动后 容器名称 container_name: api-blog # 镜像名称 image: api-blog # 端口映射 宿主机端口:容器端口 ports: - "81:81" # 文件挂载,主要将Jar产生的日志映射到宿主机上 volumes: - "./build/api-blog/logs:/api-blog/log/"
-
看一下每个文件存放的位置
[root home]# tree -L 3 . ├── build │ ├── api-blog │ │ ├── Blog-api-0.0.1-SNAPSHOT.jar │ │ ├── Dockerfile │ │ └── logs ├── docker-compose.yml
-
项目打包
# 打包命令 mvn clean -Dmaven.test.skip=true package
-
使用
scp
将Jar上传至服务器# 拷贝文件 被拷贝文件 目标目录 scp -P 22 ./target/Blog-api-0.0.1-SNAPSHOT.jar 服务器用户名@服务器IP:/home/build/api-blog
-
在服务器上进行镜像编译与启动容器
建议在
docker-compose.yml
目录下进行操作# 次命令将 yml中api-blog 指定的 DockerFile 构建为镜像 并启动 docker-compose up --build -d api-blog
最后,可以将4,5,6步骤的命令汇聚为一个shell
脚本
#!/usr/bin/env bash
# 编译Maven项目
mvn clean -Dmaven.test.skip=true package
# 拷贝文件 被拷贝文件 目标目录
scp -P 22 ./target/Blog-api-0.0.1-SNAPSHOT.jar 服务器用户名@服务器IP:/home/build/api-blog
# ssh连接服务器 执行命令
ssh 服务器用户名@服务器IP -p 22 'cd /home; docker-compose up --build -d api-blog; sleep 5s; docker logs -f api-blog'