一、Docker的最小镜像hello-world

1、docker  pull 下载hello-world镜像

docker  pull   hello-world

2、docker  images  查看hello-world镜像信息

docker  images  hello-world

3、docker   run   hello-world 运行

Docker你好!

此消息显示您的安装似乎工作正常。

为了生成这个消息,Docker采取了以下步骤:

1 Docker客户端联系Docker守护进程。

2 Docker守护进程从Docker中心提取“hello-world”映像。

(amd64)

3所示。Docker守护进程从运行的映像创建了一个新容器

可执行文件,生成您当前正在读取的输出。

4所示。Docker守护进程将输出流到发送它的Docker客户机

你的终端。

为了尝试更有野心的东西,你可以运行一个Ubuntu容器:

$ docker运行- ubuntu bash

使用免费的Docker ID共享图片、自动化工作流程等:

https://hub.docker.com/

更多的例子和想法,请访问:

https://docs.docker.com/get-started/

4、Dockerfile 是镜像的描述文件,定义了如何构建 Docker 镜像

docker pull 后对应的镜像文件在:/var/lib/docker/image/

ll /var/lib/docker/image/overlay2/imagedb/content/sha256/

b2c2ab6dcf2e526597d0a5fc506f123088e6572a8a656f04cea86d4f559c66e9

bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b

docker images

Dockerfile只是用来生成镜像的,镜像中不会包含Dockerfile,这就像源码和程序的关系一样。

在Docker Hub(https://hub.docker.com)上找到你想要的镜像,里面都会有生成此镜像的Dockerfile以及相关文件在Github上的地址,可以在那里面找到。

二、Docker的base 镜像

base 镜像通常是各种 Linux 发行版的 Docker 镜像。

Linux 操作系统由内核空间和用户空间组成。

内核空间是 kernel,Linux 刚启动时会加载 bootfs 文件系统,之后 bootfs 会被卸载掉。

用户空间的文件系统是 rootfs,包含我们熟悉的 /dev, /proc, /bin 等目录。

对于 base 镜像来说,底层直接用 Host 的 kernel,自己只需要提供 rootfs 就行了。

1、docker   pull  centos 下载CentOS镜像

2、docker images  centos 查看CentOS镜像信息

base 镜像提供的是最小安装的 Linux 发行版

支持运行多种 Linux OS

不同 Linux 发行版的区别主要就是 rootfs。

3、说明:

a、base 镜像只是用户空间与发行版一致,kernel 版本与发型版是不同的。

① 查看Host kernel

uname  -r

② 启动并进入 CentOS 容器

docker  run  -it  centos

③ 验证容器是 CentOS 8.1的镜像

cat /etc/redhat-release

④ 验证容器的 kernel 版本与 Host 一致

uname  -r

b、容器只能使用 Host 的 kernel,并且不能修改。

三、Docker的镜像分层结构

1、分层结构的优势----资源共享

有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。

2、Docker的Copy-on-Write 特性

直观表现为多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,比如 /etc 下的文件,这时其他容器的 /etc 是不会被更改的。

容器的修改会被限制在单个容器内。

  1. 容器层与镜像层

当容器启动时,一个新的可写层被加载到镜像的顶部。

这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。

所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。

只有容器层是可写的,容器层下面的所有镜像层都是只读的。

镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。

容器层中,用户看到的是一个叠加之后的文件系统。

4、分解动作

添加文件

在容器中创建文件时,新文件被添加到容器层中。

读取文件

在容器中读取某个文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,打开并读入内存。

修改文件

在容器中修改已存在的文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。

删除文件

在容器中删除文件时,Docker 也是从上往下依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。

只有当需要修改时才复制一份数据,这种特性被称作 Copy-on-Write

容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改

docker stop 优雅地停止容器

docker stop 容器ID或容器名

参数 -t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态

docker stop -t=60 容器ID或容器名

docker kill

docker kill 容器ID或容器名 :直接关闭容器

四、构建镜像

Docker 提供了两种构建镜像的方法:

docker commit 命令    和  Dockerfile 构建文件(推荐使用)

1、Dockerfile 构建镜像

Dockerfile 是一个文本文件,记录了镜像构建的所有步骤

新建Dockerfile文件

vi  Dockerfile

# This my first CentOS Dockerfile

# Version 1.0

# Base images 基础镜像

FROM centos

#MAINTAINER 维护者信息

MAINTAINER zola

#ENV 设置环境变量

#ADD  文件放在当前目录下,拷过去会自动解压

#RUN 执行以下命令

RUN yum install -y wget

#WORKDIR 相当于cd

#EXPOSE 映射端口

#CMD 运行以下命令

docker   build  -t  centos-with-wget  .

注意1、运行 docker build 命令,-t 将新镜像命名为 ubuntu-with-vi-dockerfile,命令末尾的 . 指明 build context 为当前目录。Docker 默认会从 build context 中查找 Dockerfile 文件,我们也可以通过 -f 参数指定 Dockerfile 的位置

注意2、首先 Docker 将 build context 中的所有文件发送给 Docker daemon。build context 为镜像构建提供所需要的文件或目录。

Dockerfile 中的 ADD、COPY 等命令可以将 build context 中的文件添加到镜像。此例中,build context 为当前目录 /root,该目录下的所有文件和子目录都会被发送给 Docker daemon。

所以,使用 build context 就得小心了,不要将多余文件放到 build context,特别不要把 /、/usr 作为 build context,否则构建过程会相当缓慢甚至失败。

注意3、在上面的构建过程中,我们要特别注意指令 RUN 的执行过程。Docker 会在启动的临时容器中执行操作,并通过 commit 保存为新的镜像。

2、docker images 查看镜像信息

3、查看镜像分层结构

是通过在 base 镜像的顶部添加一个新的镜像层而得到的。

这个新镜像层的内容由 RUN  yum install -y wget 生成。

docker history 命令来验证

docker history 会显示镜像的构建历史,也就是 Dockerfile 的执行过程。

docker history  centos-with-wget

与centos做对比

docker history  centos

微信连接:https://mp.weixin.qq.com/s/EKTjOGVwA5OuwVie4LWOPQ

详情请见,微信公众号

Docker学习,从hello-word到Dockerfile创建镜像相关推荐

  1. Docker学习之路 用commit命令创建镜像

    Docker学习之路 用commit命令创建镜像 docker 74k 次阅读 · 读完需要 7 分钟 假期快要结束了,干点正事,接着Docker的学习. 构建镜像 构建镜像的两种方法: 使用dock ...

  2. docker学习笔记(四)——Dockerfile创建自定义镜像

    用Dockerfile创建docker,注意下,建议在空文件夹下创建 本篇我们将完成: 1.用Dockerfile创建docker 2.端口映射 3.卷挂载,即docker目录挂载到宿主机 1.用Do ...

  3. 实战:Docker容器虚拟化技术(使用DockerFile构建镜像并搭建 swarm+compose集群)5

    实战:Docker容器虚拟化技术 (使用DockerFile构建镜像并搭建 swarm+compose集群)5 要求: 使用DockerFile构建镜像并搭建 swarm+compose集群 在Swa ...

  4. Dockerfile创建镜像

    Dockerfile创建镜像 Dockerfile常见的命令 Dockerfile就是用来构建docker镜像的源码,是一些命令的组合,编写dockerfile可以定制化docker image. 镜 ...

  5. docker学习笔记(五)如何创建自己的阿里云镜像仓库(这是2021版的阿里云教程)

    参考:汤小洋老师的教学视频 docker学习笔记(一)[docker 介绍.卸载.安装.配置加速] docker学习笔记(二)docker常用命令 docker学习笔记(三)镜像 docker学习笔记 ...

  6. [转]Docker基础-使用Dockerfile创建镜像

    本文转自:https://www.cnblogs.com/jie-fang/p/7927643.html 1.基本结构 Dockerfile由一行行命令语句组成,并支持以#开头的注释行.例如: # T ...

  7. Docker(2):使用Dockerfile创建支持SSH服务的镜像

    1.创建工作目录 # mkdir sshd_ubuntu # ls 在其中,创建Dockerfile和run.sh文件 # cd sshd_ubuntu/ # touch Dockerfile run ...

  8. Docker学习笔记——Java及Tomcat Dockerfile

    1.Java Dockerfile 创建项目目录java,目录下上传所需java版本压缩包,并创建Dockerfile文件,项目结构如下: java -Dockerfile -jdk-8u111-li ...

  9. Docker学习总结(27)——Dockerfile详解

    Docker可以从Dockerfile中一步一步的读取指令来自动的创建镜像,常使用Dockerfile来创建用户自定义的镜像.格式如下: # Comment INSTRUCTION arguments ...

最新文章

  1. IOS开发CALayer隐式动画
  2. tf.train.examle函数
  3. 校友邮箱_freeCodeCamp校友网络:FCC校友的自主指导网络
  4. 【C++】C++类的学习(五)——纯虚函数与抽象类
  5. Ubuntu15.10使用mysql
  6. C# 计算代码执行时间
  7. cocopod升级1.6.0bate问题
  8. winxp计算机语言改为英语,系统之家xp系统语言设置将英文版改为中文的方法
  9. 【Soil texture】土壤质地计算器
  10. 洛谷每日三题之第三天(第四天补做)
  11. jPBC 2.0.0配置与测试(补充版)
  12. xshell中文免费下载及安装 (内附xshell下载链接以及安装步骤)
  13. 基于hadoop的商品推荐系统_[零基础入门推荐系统(1)]基于用户和基于物品的协同过滤方法(python代码实现)...
  14. maven打jar包时报update interval of XXX has elapsed or updates are force
  15. DCMTK读取dicom图像
  16. N1盒子Armbian折腾记
  17. 基于SeedUbuntu16.04的缓冲区溢出实验
  18. HTML版的使用three.js加载obj和mtl文件并上贴图
  19. 什么是计算机素质教育,计算机教育在素质教育中的作用
  20. 【C语言】测试4 循环程序设计

热门文章

  1. RabbitMQ 服务异步通信 -- 入门案例(消息预存机制)、SpringAMQP、发布订阅模式(FanoutExchange、DirectExchange、TopicExchange)、消息转换器
  2. 汇编语言电子琴实验c语言,电子琴实验及报告.docx
  3. Hudi 0.11.0 + Flink1.14.4 + Hive + Flink CDC + Kafka 集成
  4. 取上个月的月初和月末
  5. 【sklearn报错解决方案】UndefinedMetricWarning: Precision is ill-defined and being set to 0.0
  6. 信号完整性之玻纤效应
  7. PESTEL分析模型(转载)
  8. 第四十一期-ARM Linux内核的系统调用(1)
  9. 从零开始搭建仿抖音短视频App-数据库选型和Navicat数据导入
  10. Chaikin细分曲线