ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Docker】镜像原理 镜像制作 DockerFile

2021-02-18 21:00:57  阅读:141  来源: 互联网

标签:容器 centos DockerFile jar 镜像 Docker dockerfile docker


为什么一个centos镜像只有两百多兆,而tomcat镜像五百多兆

先说说操作系统

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)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,隐藏多层的存在,我们看来只是存在一个文件系统。
所以tomcat镜像大小有五百多兆,是因为里面还包含了jdk和centos的镜像
而centos镜像复用了宿主机的bootfs 下载的只有rootfs 所以小很多
一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像称为基础镜像。
所以tomcat→jdk(父镜像)→centos(基础镜像)因此整个向外暴露是五百多兆。
镜像是只读的,当从一个镜像启动容器时, 所以docker会在镜像上面加载一个可读可写的文件系统作为容器

docker镜像本质就是一个分层系统

镜像制作

注意:容器转镜像 容器里面文件不会消失 但是容器挂载的镜像卷会消失

容器转为镜像:

docker commit 容器id 镜像名称:版本号

镜像压缩(镜像不能传输 所以做好的镜像):

docker save -o 压缩文件名称 镜像名称:版本号

镜像压缩文件解压成镜像:

docker load -i 压缩文件名称

在这里插入图片描述

dockerfile

docker就是一个文本文件 包含了一条条的指令
每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
为开发、测试。运维提供完全一致的开发环境 只需要通过一个dockerfile文件构建出相同的镜像

dockerfile关键字

FROM	指定父镜像  基于哪个镜像image构建
RUN		容器创建的时候执行一段命令 
CMD		容器启动的时候执行的命令
COPY	创建容器是复制文件到镜像
ADD		添加文件到镜像还会自动解压 还可以添加远程的
ENV		设置环境变量 启动容器时 -e参数可以覆盖ENV设置的环境变量
VOIUME	启动容器时挂载目录到容器里面 
EXPOSE	暴露端口
WORKDIR	设置进入容器时的路径

案例:自定义一个centos7镜像 默认登录路径为/usr 并且可以使用vim

# 定义父镜像
FROM centos:7
# 定义作者信息
MAINTAINER  itheima <itheima@itcast.cn>
# 执行安装vim命令
RUN yum install -y vim
# 定义默认的工作目录
WORKDIR /usr
# 定义容器启动执行的命令
CMD /bin/bash
# 通过dockerfile构建镜像
docker bulid –f dockerfile文件路径 –t 镜像名称:版本

docker build -f ./centos_docker(dockerfile文件) -t mycentos:1.1(镜像名称和版本号) .(寻址路径)

案例:java程序做成一个镜像
1.先package 打包成jar包 hello.jar
2.创建一个hello_dockerfile 写入下面数据

# 定义父镜像
FROM java:8
# 定义作者信息
MAINTAINER  itheima <itheima@itcast.cn>
# 将jar包添加到容器
ADD hello.jar app.jar
# 定义容器启动执行的命令
CMD java –jar app.jar
# 通过dockerfile构建镜像
docker bulid –f dockerfile文件路径 –t 镜像名称:版本

标签:容器,centos,DockerFile,jar,镜像,Docker,dockerfile,docker
来源: https://blog.csdn.net/Skyey_6/article/details/113852884

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有