Docker学习-05

一、Docker镜像原理

 1、Docker镜像是由特殊的文件系统叠加而成的,最底端是bootfs,并使用宿主机的bootfs,因此不能在一个ubuntu系统上安装一个Windows容器,因为两者的bootfs不一样。

2、第二层是root文件系统rootfs,称为base image,然后再往上可以叠加其他的镜像文件。

3、统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。

4、一个镜像可以放在另一个镜像的上面,位于下面的镜像称为父镜像,最底部的镜像称为基础镜像。

5、当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器。

1、Docker镜像本质是什么?

        是一个分层的文件系统。

2、Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的ios文件要几个G?

        Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有包含rootfs和其他镜像层,因此大小会小很多。

3、Docker中一个tomcat镜像为什么有500M,而一个tomcat安装包只有70多MB?

        由于docker中镜像是分层的,tomcat虽然只有70多MB,但它需要依赖于父镜像和基础镜像,所以对外暴露的tomcat镜像大小500多MB。

二、Dockerfile概念及作用

1、Docker镜像如何制作?

(1)容器转为镜像:

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

 注意转化过程中,通过挂载形式得到的数据卷并不会生成到镜像中,只有容器中本身存在的文件才会生成的镜像中。

然后将镜像转为为压缩文件:

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

这样压缩文件就可以通过U盘等方式进行传输,最后将压缩文件再还原成镜像:

sudo docker load -i <压缩文件名称>

(2)通过Dockerfile文件来制作镜像

sudo docker build -f <指定当前要构建的Dockerfile的文件路径> -t <设置新的镜像的名称>:<版本号> . # 注意要加寻址的路径,这里是当前路径"."

2、Dockerfile文件概念

(1)Dockerfile是一个文本文件,包含了一条条指令。

(2)每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像。

(3)对于开发人员:可以为开发团队提供一个完全一致的开发环境

(4)对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作。

(5)对于运维人员:在部署时,可以实现应用的无缝移植。

三、Dockerfile关键字

链接:Dockerfile关键字详解

四、Docker服务编排

Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。使用步骤:

1、利用Dockerfile文件定义运行环境镜像。

2、使用docker-compose.yml定义组成应用的各服务

3、运行docker-compose up启动应用。

Docker Compose安装:

Docker Compose安装使用教程

五、Docker私有仓库

1、搭建私有仓库

Docker官方的Docker hub(https://hub.docker.com/)是一个用于管理公共镜像的仓库,我们可以从上面拉取镜像到本地,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜像放到公网当中,那么我们就需要搭建自己的私有仓库来存储和管理自己的镜像。

(1)拉取私有仓库镜像

sudo docker pull registry

(2)启动私有仓库容器

sudo docker run -id --name=registry -p 5000:5000 registry

(3)打开浏览器,输入地址:

https://私有仓库服务器ip:5000/v2/_catalog

 看到{"repositories":[]}表示私有仓库搭建成功。

(4)修改daemon.json

vim /etc/docker/daemon.json

在上述文件中添加一个key,保存退出。此步用于让docker信任私有仓库地址,注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip。

{"insecure -registries":["私有仓库服务器ip:5000"]}

(5)重启docker服务

sudo systemctl restart docker
sudo docker start registry

2、上传镜像到私有仓库

(1)标记镜像为私有仓库的镜像

sudo docker tag <要上传的镜像名:版本号> <私有仓库服务器ip:5000/要上传的镜像名:版本号>

(2)上传标记的镜像

sudo docker push <私有仓库服务器ip:5000/要上传镜像名:版本号>

3、从私有仓库拉取镜像

sudo docker pull <私有仓库ip:5000/要拉取的镜像名:版本号>

六、docker和虚拟机的比较

1、容器就是将软件打包成标准化单元,以用于开发、交付和部署。

1、容器镜像是轻量级的、可执行的独立软件包,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。

2、容器化软件在任何环境中都能够始终如一地运行。

3、容器赋予了软件独立性,使其免受外在环境差异的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。

 2、docker容器虚拟化和传统虚拟机的比较

相同:

        容器和虚拟机具有相似的资源隔离和分配优势。

不同:

        1、容器虚拟化(共享)的是操作系统,虚拟机虚拟化(共享)的是硬件。

        2、传统虚拟机可以运行不同的操作系统,容器只能运行同一类型的操作系统。

 

 

猜你喜欢

转载自blog.csdn.net/xiao_qs/article/details/130661206