Docker学习,从hello-word到Dockerfile创建镜像
一、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 是不会被更改的。
容器的修改会被限制在单个容器内。
- 容器层与镜像层
当容器启动时,一个新的可写层被加载到镜像的顶部。
这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。
只有容器层是可写的,容器层下面的所有镜像层都是只读的。
镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。
容器层中,用户看到的是一个叠加之后的文件系统。
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创建镜像相关推荐
- Docker学习之路 用commit命令创建镜像
Docker学习之路 用commit命令创建镜像 docker 74k 次阅读 · 读完需要 7 分钟 假期快要结束了,干点正事,接着Docker的学习. 构建镜像 构建镜像的两种方法: 使用dock ...
- docker学习笔记(四)——Dockerfile创建自定义镜像
用Dockerfile创建docker,注意下,建议在空文件夹下创建 本篇我们将完成: 1.用Dockerfile创建docker 2.端口映射 3.卷挂载,即docker目录挂载到宿主机 1.用Do ...
- 实战:Docker容器虚拟化技术(使用DockerFile构建镜像并搭建 swarm+compose集群)5
实战:Docker容器虚拟化技术 (使用DockerFile构建镜像并搭建 swarm+compose集群)5 要求: 使用DockerFile构建镜像并搭建 swarm+compose集群 在Swa ...
- Dockerfile创建镜像
Dockerfile创建镜像 Dockerfile常见的命令 Dockerfile就是用来构建docker镜像的源码,是一些命令的组合,编写dockerfile可以定制化docker image. 镜 ...
- docker学习笔记(五)如何创建自己的阿里云镜像仓库(这是2021版的阿里云教程)
参考:汤小洋老师的教学视频 docker学习笔记(一)[docker 介绍.卸载.安装.配置加速] docker学习笔记(二)docker常用命令 docker学习笔记(三)镜像 docker学习笔记 ...
- [转]Docker基础-使用Dockerfile创建镜像
本文转自:https://www.cnblogs.com/jie-fang/p/7927643.html 1.基本结构 Dockerfile由一行行命令语句组成,并支持以#开头的注释行.例如: # T ...
- Docker(2):使用Dockerfile创建支持SSH服务的镜像
1.创建工作目录 # mkdir sshd_ubuntu # ls 在其中,创建Dockerfile和run.sh文件 # cd sshd_ubuntu/ # touch Dockerfile run ...
- Docker学习笔记——Java及Tomcat Dockerfile
1.Java Dockerfile 创建项目目录java,目录下上传所需java版本压缩包,并创建Dockerfile文件,项目结构如下: java -Dockerfile -jdk-8u111-li ...
- Docker学习总结(27)——Dockerfile详解
Docker可以从Dockerfile中一步一步的读取指令来自动的创建镜像,常使用Dockerfile来创建用户自定义的镜像.格式如下: # Comment INSTRUCTION arguments ...
最新文章
- IOS开发CALayer隐式动画
- tf.train.examle函数
- 校友邮箱_freeCodeCamp校友网络:FCC校友的自主指导网络
- 【C++】C++类的学习(五)——纯虚函数与抽象类
- Ubuntu15.10使用mysql
- C# 计算代码执行时间
- cocopod升级1.6.0bate问题
- winxp计算机语言改为英语,系统之家xp系统语言设置将英文版改为中文的方法
- 【Soil texture】土壤质地计算器
- 洛谷每日三题之第三天(第四天补做)
- jPBC 2.0.0配置与测试(补充版)
- xshell中文免费下载及安装 (内附xshell下载链接以及安装步骤)
- 基于hadoop的商品推荐系统_[零基础入门推荐系统(1)]基于用户和基于物品的协同过滤方法(python代码实现)...
- maven打jar包时报update interval of XXX has elapsed or updates are force
- DCMTK读取dicom图像
- N1盒子Armbian折腾记
- 基于SeedUbuntu16.04的缓冲区溢出实验
- HTML版的使用three.js加载obj和mtl文件并上贴图
- 什么是计算机素质教育,计算机教育在素质教育中的作用
- 【C语言】测试4 循环程序设计
热门文章
- RabbitMQ 服务异步通信 -- 入门案例(消息预存机制)、SpringAMQP、发布订阅模式(FanoutExchange、DirectExchange、TopicExchange)、消息转换器
- 汇编语言电子琴实验c语言,电子琴实验及报告.docx
- Hudi 0.11.0 + Flink1.14.4 + Hive + Flink CDC + Kafka 集成
- 取上个月的月初和月末
- 【sklearn报错解决方案】UndefinedMetricWarning: Precision is ill-defined and being set to 0.0
- 信号完整性之玻纤效应
- PESTEL分析模型(转载)
- 第四十一期-ARM Linux内核的系统调用(1)
- 从零开始搭建仿抖音短视频App-数据库选型和Navicat数据导入
- Chaikin细分曲线