一 dockerfile的原理
1.1 dockfile的原理
1.dockerfile镜像的本质是什么?
答: 是一个分层的镜像文件系统
2.docker中的一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要有几个G呢?
centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,剩余的只有rootfs和其它镜像层,大概也就200MB
3.docker中一个tomcat镜像为什么有500MB,而一个tomcat的安装包只有70多MB?
答:由于docker中镜像是分层的,tomcat虽然只有70多MB,但它需要依赖父镜像和基础镜像,所有整个对外暴露的tomcat镜像大小500多MB
1.2 dockfile
dockefile是一个文本文件,包含了一条条的指令,每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像。
对于开发人员:可以为开发团队提供一个完全一致的开发环境。
二 制作镜像
2.1.容器转镜像方式1
docker commit 容器名称|容器id:版本号
docker save -o 压缩文件名称 镜像id|镜像名称:版本号
docker load -i 压缩文件名称
2.2 .容器转镜像方式2 :dockerfile
定义dockerfile,发布springboot项目
2.2.1 操作步骤
定义父镜像FROM java:8
定义作者信息:MAINTAINER itheima <itheima@itcast.cn>
将jar包添加到容器: ADD springboot.jar app.jar
定义容器启动执行的命令:CMD java–jar app.jar 通过dockerfile构建镜像:docker bulid –f dockerfile文件路径 –t 镜像名称:版本
2.2.2 案例
1.创创建镜像
1将jar包上传到制定目录下:
[root@localhost java-spring]# ls
app-dockerfile java-dockerfile springboot-hello-0.0.1-SNAPSHOT.jar
2.在此目录下,创建dockerfile文件,这里为app-dockerfile,内容如下
FROM java:8
MAINTAINER boc-ljf qq-712893434
VOLUME /tmp
ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
说明:
ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar
这条命令为: springboot-hello-0.0.1-SNAPSHOT.jar 为我们原始jar包,app.jar 打成容器jar包中起的别名
3.打成镜像
app-dockerfile 为上一步起的dockerfile的文件名称
app-master:这里随意起的镜像名称
[root@localhost java-spring]# docker build -f app-dockerfile -t app-master .
Sending build context to Docker daemon 17.57 MB
Step 1/5 : FROM java:8
---> d23bdf5b1b1b
Step 2/5 : MAINTAINER boc-ljf qq-712893434
---> Using cache
---> cb96ebf9e467
Step 3/5 : VOLUME /tmp
---> Using cache
---> 6eaee5ec06ca
Step 4/5 : ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar
---> 22fb696cdb4a
Removing intermediate container bafaf59cee07
Step 5/5 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar app.jar
---> Running in 648c6d05c52a
---> 30dd423a43ab
Removing intermediate container 648c6d05c52a
Successfully built 30dd423a43ab
4.docker images
[root@localhost java-spring]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
app-master latest 30dd423a43ab 7 seconds ago 661 MB
java-spt-demo latest cee613b3d935 11 minutes ago 661 MB
docker.io/mysql 5.7.29 5d9483f9a7b2 20 months ago 455 MB
docker.io/java 8 d23bdf5b1b1b 4 years ago 643 MB
docker.io/tomcat 8.5.6 14b94bb71f89 5 years ago 333 MB
5. 创建容器
注意 参数app-master 为上一步做好的镜像名称,不能随便起名称
[root@localhost java-spring]# docker run -id --name=c7 -p 9000:8080 app-master
091479cc5da7cf6541adb45608d9ae4d1eac4f4b94cf2d459a012db9f33bf147
然后docker ps -a
6.进入容器
[root@localhost java-spring]# docker exec -it c7 /bin/bash
root@091479cc5da7:/# ls
app.jar bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@091479cc5da7:/# which java
/usr/bin/java
root@091479cc5da7:/# java -version
openjdk version "1.8.0_111"
OpenJDK Runtime Environment (build 1.8.0_111-8u111-b14-2~bpo8+1-b14)
OpenJDK 64-Bit Server VM (build 25.111-b14, mixed mode)
root@091479cc5da7:/#
7.关闭防火墙
root@localhost java-spring]# systemctl stop firewalld
[root@localhost java-spring]#
8.访问
使用宿主机的ip,设定对外的端口,上下文路径,进行访问

http://192.168.1.248:9000/hello

本文详细介绍了Dockerfile的原理,包括其作为分层镜像文件系统的特点,以及为何Docker镜像相比ISO文件体积更小。同时,通过实例展示了如何使用Dockerfile制作镜像,包括定义父镜像、添加应用和设置启动命令等步骤,并通过`docker build`命令构建镜像。此外,还讲解了如何从容器创建镜像的两种方法。最后,演示了运行容器、查看镜像及访问应用的全过程。

被折叠的 条评论
为什么被折叠?



