Docker(4) 制作镜像
一。docker build,使用Dockerfile文件自动化制作镜像。
1.编写Dockerfile文件
vim Dockerfile
# 基础镜像使用java FROM java:8 # 作者 MAINTAINER yy # VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp VOLUME /tmp # 将jar包添加到容器中并更名为app.jar ADD demo-0.0.1-SNAPSHOT.jar app.jar # 运行jar包 RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
解释:
java:8是指Docker Hub上官方提供的java镜像,版本号是8也就是jdk1.8,有了这个基础镜像后,Dockerfile可以通过FROM指令直接获取它的状态——也就是在容器中java是已经安装的,接下来通过自定义的命令来运行Spring Boot应用:
VOLUME指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat默认使用/tmp作为工作目录。效果就是在主机的/var/lib/docker目录下创建了一个临时文件,并连接到容器的/tmp。
将项目的jar文件作为app.jar添加到容器
RUN表示在新创建的镜像中执行一些命令,然后把执行的结果提交到当前镜像。这里使用touch命令来改变文件的修改时间,Docker创建的所有容器文件默认状态都是“未修改”。这对于简单应用来说不需要,不过对于一些静态内容(比如:index.html)的文件就需要一个“修改时间”。
EXPOSE 容器暴露端口
ENTRYPOINT 应用启动命令 参数设定
2.上传文件Dockerfile和demo-0.0.1-SNAPSHOT.jar到服务器的同一目录下
3.将jar包打包为镜像
docker build -t srpingbootdemo:yy . ----------打包镜像
[root@localhost docker-build]# docker build -t springbootdemo . Sending build context to Docker daemon 2.56kB Step 1/6 : FROM java:8 ---> d23bdf5b1b1b Step 2/6 : MAINTAINER yy ---> Running in 8bc3ec99cc4b Removing intermediate container 8bc3ec99cc4b ---> 27596ecbc4a0 Step 3/6 : VOLUME /tmp ---> Running in f543dbd852fd Removing intermediate container f543dbd852fd ---> d97684dcdb7a Step 4/6 : ADD demo-0.0.1-SNAPSHOT.jar app.jar ---> 2ff822597872 Step 5/6 : RUN bash -c 'touch /app.jar' ---> Running in 4a1dafe24a93 Removing intermediate container 4a1dafe24a93 ---> 9e99256a6bd1 Step 6/6 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ---> Running in 23995d8597ec Removing intermediate container 23995d8597ec ---> a932202f69ca Successfully built a932202f69ca Successfully tagged springbootdemo:latest [root@localhost docker-build]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE springbootdemo latest a932202f69ca 16 seconds ago 643MB nginx yy 18fdcae238b6 2 hours ago 133MB
打包完成后,可以docker images查看镜像
4. 运行镜像
[root@localhost docker-build]# docker run -d -p 8082:8081 springbootdemo 994b80a87bbbe53c569ae5e0c66c876e41141cadbc97495363a6c675e2e8e811
前台http://192.168.31.211:8082/hello就能访问了
5. 将镜像导出文件,可以在别的服务器运行
也可以推送到私服,别的服务器直接拉去
docker save -o springbootdemo.tar springbootdemo ---------保存为本地文件
docker load -i springbootdemo.tar 导入镜像
6.查看日志的方式
方式一:docker logs 容器id
方式二:数据卷的形式
docker run -d -v /home/vincent/logs/:/logs/ -p 8081:8080 springbootdemo:y1
前边的是宿主机中日志的目录,后边是容器中日志文件的输出目录