构建三步骤:
- 编写Dockerfile文件
- docker build 命令构建镜像
- docker run 根据镜像运行容器实例
不废话,直接上案例,这是本人在公司使用的打镜像方式,与上面的构建步骤略有不同。
以下文件都是在同一个目录文件夹下!!!
1、编写Dockerfile文件,通过Dockerfile文件将jar包打成镜像
FROM:
基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是FROM
EXPOSE:
当前容器对外暴露出的端口
ENTRYPOINT:
用来指定一个容器启动时要运行的命令,类似于 CMD 指令,但是ENTRYPOINT不会被docker run后面的命令覆盖, 而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序
#方式一:
FROM openjdk:8
EXPOSE 9099
ENTRYPOINT ["sh","/usr/data/run.sh"]
---------------------------------------
#方式二:
FROM openjdk:8-jre
#把jar包添加到镜像中
Add app.jar /usr/data/app.jar
#设置时区
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
EXPOSE 8088
CMD java -jar /usr/data/app.jar
2、编写执行脚本(方式二不用)
很简单,就是执行jar包的命令
vim run.sh
java -jar /usr/data/app.jar
3、通过dockerfile构建镜像
将jar包上传至Dockerfile文件同一目录下,执行docker build
格式:
docker build -f Dockerfile路径 -t 镜像名称:版本号 .
docker build -f /home/xxx/Dockerfile -t app:1.0.0 .
注意最后有一个 “ . ” !!!
看到Successfully镜像就构建成功了。
4、查看镜像
docker images
5、运行docker镜像
docker run
-it --log-opt max-size=1024m
--log-opt max-file=31 --restart=always
-d --name=app-service
-p 9099:9099
-v /home/xxx:/usr/data #本地Dockerfile所在的文件目录挂载到容器内
-v /etc/localtime:/etc/localtime:ro
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/bin/docker:/usr/bin/docker
app:1.0.0
-------------------------------------------
docker run -d --restart=always --privileged=true -p 80:80 --name=app app:latest
查看启动的容器
docker ps
6、将压缩成tar包镜像下载到本地
# XXX是你刚生成的镜像
docker save XXX:1.0 | gzip > XXX_1.0.tar.gz
7、将镜像部署到另一个docker容器里
docker load -i XXX_1.0.tar.gz