赞
踩
一、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
详情请见,微信公众号
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。