dockerfile的作用以及定义dockerfile,发布springboot项目

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

一 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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值