Dockerfile镜像详解——(五)
Dockerfile官方文档: https://docs.docker.com/engine/reference/builder/
一、Docker镜像原理
-
操作系统组成部分:
进程调度子系统
进程通信子系统
内存管理子系统
设备管理子系统
文件管理子系统
网络通信子系统
作业控制子系统Linux文件系统由bootfs和rootfs两部分组成
bootfs:包含bootloader(引导加载程序)和kernel(内核)
rootfs:root文件系统,包含的就是Linux系统中的/dev、/proc、/bin、/etc等标准的目录和文件
解释:不同的Linux发行版,bootfs基本一样,而rootfs不同,如ubuntu、centos等;
-
镜像
-Docker镜像是由特殊的文件系统叠加而成;
-最底端是bootfs,并使用宿主机的bootfs;
-第二层是root文件系统rootfs,称为base image;
-然后再往上可以叠加其他的镜像文件;
-统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些提供一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统;
-一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像;
-当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器;
二、Docker镜像制作
-
1、方式一:容器转为镜像
#docker commit 容器id 镜像名称:版本号 docker commit 6e2f950a2911 mysqlImage:1.0 #docker save -o 压缩文件名称 镜像名称:版本号 docker save -o mysqlImage.tar mysqlImage:1.0 #docker load -i 压缩文件名称 docker load -i mysqlImage.tar # 注意:容器本身挂载的目录不会生效,需要单独执行挂载目录命令
-
2、方式二:dockerfile
Dockerfile是一个文本文件
包含了一条条的指令
每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
对于开发人员:可以为开发团队提供一个完全一致的开发环境
对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像
对于运维人员:在部署时,可以实现应用的无缝移植
Dockerfile指令查看:https://hub.docker.com
三、Dockerfile实战案例
- 创建Dockerfile文件,内容如下
#Spring boot jar包部署实现步骤: # 1、定义父镜像:FROM java:8 # 2、定义作者信息:MAINTAINER rat # 3、将jar包添加到容器:ADD jar包名称 新名称 # 4、定义容器启动执行的命令:CMD java -jar jar包新名称 # 5、通过dockerfile构建镜像:docker bulid -f dockerfile 文件路径 -t 镜像名称:版本 #----------------------------------文件内容开始---------------------------------- FROM java:8 MAINTAINER rat ADD springboot.jar springboot.jar CMD java -jar springboot.jar #----------------------------------文件内容结束----------------------------------
- 构建镜像、启动镜像
#最后执行dockerfile构建镜像命令 docker bulid -f dockerfile /home/docker_file/springboot -t springboot:1.0 # 释:可以使用docker images查看 # docker run -id -p 8080:8080 springboot 启动等