docker镜像原理思考
思考:
1、docker 镜像本质是什么?
2、docker中centos镜像为什么只有200M,而一个centos操作系统的ios文件几个G。
3、docker中tomcat镜像为什么有500M,而一个tomcat安装包只有70多M。
1.操作系统组成部分
2.docker镜像原理
docker镜像是由特殊的文件系统叠加而成
最低端是bootfs,并使用宿主机的bootfs
第二层是root文件系统rootfs,称为base image
然后再往上可以叠加其他的镜像文件
3.镜像制作
1、容器转为镜像
docker commit 容器id 镜像名称:版本号
压缩成压缩文件
docker save -o 压缩文件名称 镜像名称:版本号
还原
docker load -i 压缩文件名称
目录挂载的不生效
4.dockerfile
dockerfile 是一个文本文件
包含了一条条指令
每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
包含了Dockerfile 关键字,都是大写的。
5案例
案例1需求自定义centos7镜像。要求:
1、默认登录路径为/usr;
2、可以使用vim命令
实现步骤
(1)定义一个父镜像:FROM centos:7
(2)定义作者信息 MAINTAINER tc <tc@qq.com>s
(3)执行安装vim命令:run yum install -y vim
(4)设置默认工作路径:WORKDIR /usr
(5)定义容器启动执行的命令:CMD /bin/bash
(6)通过dockfile构建镜像:docker bulid -f dockerfile文件路径 -t 镜像名称:版本
实际步骤
mkdir docker-files
vim centos-dockerfile
写入:
FROM centos:7
MAINTAINER tc <tc@qq.com>s
run yum install -y vim
WORKDIR /usr
CMD /bin/bash
WQ保存退出。
docker build -f ./centos_dockerfile -t tc_centos:1
-t :指定镜像名字和版本
docker run -it --name=c2 tc_centos:1 .
案例2:需求定义一个dockerfile,部署spring boot项目
实现步骤:
(1)定义一个父镜像:FROM java:8
(2)定义作者信息 MAINTAINER tc <tc@qq.com>s
(3) 将jar包添加到容器:ADD sprintboot.jar app.jar
(4) 定义容器启动执行的命令:CMD java -jar app.jar
(5)通过dockfile构建镜像:docker bulid -f dockerfile文件路径 -t 镜像名称:版本
准备工作
localhot:8080/hello
打包sprintboot 项目,会生成一个架包。
放入到linux服务器。
cd ~ 到目录看到架包
实际步骤
mv hello.jar ./docker-files
cd docke-flies
vim sprintboot_dockerfile
写入:
FROM java:8
MAINTAINER tc <tc@qq.com>s
ADD hello.jar app.jar
CMD java -jar app.jar
wq
docker bulid -f ./sprintboot_dockerfile -t app .
默认为最新版本
docker run -id app
端口映射
docker run -id -p 9000:8080 app
docker ps -a查看一下
访问测试
宿主机ip:9000/hello