Docker镜像的原理
思考:
- Docker镜像本质是什么?—它就是一个文件Dockerfile[ 写着一条一条得到命令]
- Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个G?
- Docker中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有10多MB?
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会在最顶层加载一个读写文件系统作为容器
总结:
5.2 镜像制作
自定义镜像:提供了两种方式: 第一种:基于容器来制作 第二种: 通过dockerfile文件来制作[重要]
第一种 容器转为镜像:只能在已有的镜像的容器上进行制作新镜像—–了解
步骤: 把现有的镜像–运行成一个容器—修改容器中的内容—>变成镜像—把镜像压缩文件—>交给其他人—变成本地镜像
演示:
docker commit 容器id 镜像名:版本号 [把指定的容器变成镜像]
docker save -o 压缩文件名 镜像名:版本号 [把指定的镜像压缩为一个压缩文件]
docker load -i 压缩文件名 【把压缩文件变成本地镜像】
5.3 dockerfile的概念[重要]
- Dockerfile是一个文本—任意一个镜像都是通过dockerfile来制作
- 文件包含了一条条的指令
- 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
- 对于开发人员:可以为开发团队提供一个完全一致的开发环境
- 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了
- 对于运维人员:在部署时,可以实现应用的无缝跨平台移植
5.4 Dockerfile关键字
5.5 Dockerfile案例
案例1
编辑dockerfile文件
[root@hecs-33111 docker-files]# vim centos_dockerfile
FROM centos:7
MAINTAINER ykq <2300316070@qq.com>
RUN yum install -y vim
WORKDIR /usr
CMD ["/bin/bash"]
构建镜像
[root@hecs-33111 docker-files]# docker build -f centos_dockerfile -t aaa_centos:1 .
-f:表示dockerfile文件
-t: 镜像名称版本号
.: 必须加上
创建容器
docker run -it --name=aaa_centos aaa_centos:1 /bin/bash
案例2
准备好springboot jar包并传至宿主机的根目录
创建docker-files目录,并把jar包移动进去
创建dockerfile文件并编辑
FROM java:8
MAINTAINER ykq <2300316070@qq.com>
ADD demo-qy158-0.0.1-SNAPSHOT.jar app.jar
CMD java -jar app.jar
根据dockerfile制作镜像
docker build -f ./springboot_dockerfile -t app .
启动并做端口映射
docker run -id -p 9000:8080 app
成功访问
案例3
需求: Centos7镜像具备vim+ifconfig+jdk8
FROM centos
MAINTAINER zzyy
ENV MYPATH /usr/local
WORKDIR $MYPATH
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u161-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u161-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_161
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
把本地镜像上传阿里远程镜像仓库
作为开发: 我们需要把自己的项目—-通过dockerfile 变成一个镜像—-上传到远程仓库【hub.docker或者阿里云镜像仓库】
作为测试:
作为运维: 从远程仓库下载镜像—通过镜像运行容器。部署项目。
采用:阿里云镜像仓库
© 版权声明
文章版权归作者所有,未经允许请勿转载,侵权请联系 admin@trc20.tw 删除。
THE END