docker image存储路径_Docker架构与基本操作

0ffe2e34dccbbd27519a27df5d124829.gif

Docker是一个开源的应用容器引擎。可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的linux服务器,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类iphone的app),并且容器开销极其低。

镜像和容器

通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件。

容器是镜像的运行实例,当被运行时有镜像状态和用户进程,可以使用docker ps 查看。

容器和虚拟机

容器在linux上本机运行,并与其他容器共享主机的内核,它运行的一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。

虚拟机运行的是一个完成的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。

3dc5e0bed42f7e3c7920af5132b53f42.png

451d9222bcafbf2ae0178ed18e1adc65.png

Docker Host指操作的宿主机;

Image 负责与镜像源数据有关的存储、查找,镜像层的索引、查找以及镜像tar包有关的导入、导出操作;

Docker daemon核心程序负责各种docker操作,比如下载镜像,运行容器等;用户是使用Docker Client与Docker Daemon建立通信;

Registry是一个共享docker镜像的镜像仓库服务。

Docker基本操作

docker run 指运行一个Image,创建container

比如docker run nginx运行nginx服务器,运行前会先检查这个容器在本地是否存在对应的image,如果没有,会从远端Registry去下载。

65a69c8ade612e3d3c1994d7c5dbebea.png

docker images可以查看本地有哪些image,显示包含本地所有docker的image:

8f02ee934c24ab6a73d6ba778489785e.png

docker run -p 8080:80 -d daocloud.io/nginx

-p:指做端口映射,将nginx的80端口映射为本地host宿主机的8080端口

-d:允许程序直接返回,把container作为守护进程(守护进程是一个在后台运行并且不受任何终端控制的进程)来执行,产生的一长串字符就是容器ID。

docker ps可以查看当前正在运行的docker container:

be8c021227ed6cf2cfc8a14f38294866.png

451d9222bcafbf2ae0178ed18e1adc65.png

add0a0d934f9指CONTAINER ID ;

IMAGE标识从哪个image来的;

PORTS表示端口映射关系;

目前相当于在本地8080端口开启了nginx服务,查看宿主机的8080服务:

f5cdde165dd236b3605cdcd3c3c4eec3.png

如果想要让nginx界面显示docker相关的页面,首先上传一个index.html文件:

c87c600782cb5dd7bf2317de7abfb219.png

然后将文件cp复制到容器里:

[root@localhost ~]# docker cp index.html cf6cef3ca485://usr/share/nginx/html

ba48257e714d3395cae693b6574863bc.png

cf6cef3ca485指容器ID;

usr/share/nginx/html指容器内部文件的路径;

再次查看是成功的:

f5d4cac695f5a5a9c4965d15659ae480.png

docker stop 容器ID,停止docker容器:

8cab24d788112e6a38c901be63424905.png

此时主机HOST的8080服务是关闭的:

3f2be7df39e58042fed9f68dca6388d5.png

此时再执行docker run -p 8080:80 -d daocloud.io/nginx,查看8080服务,发现网页显示仍旧是缺省的nginx服务。这是因为执行docker run的时候是同时执行了docker create 和docker start两步操作。

每次run一个镜像都是新建一个容器,拷贝进nginx的文件,是拷贝到了一个容器里。再运行镜像的时候是新建了一个容器,容器ID是变化的:

f24e1f7e76a8a2d07c1a69168ffb58e1.png

之前的文件并没有更改,如果再重启之前那个容器,网页依然显示docker的信息:

70872791f76fd56093473992d53117c8.png

docker在容器内所做的改动都是临时的,目前新建容器ID edae0ad9843b,需要通过docker commit 导出成 image 使用,这是制作Docker Image 其中一种方式(后面会分享另一种方式Dockerfile)。

57679e510acc6f4baafdf1aa7b449bae.png

保存时可以添加名称,比如nginx-fun,或者其他参数。830a246c7b88和270266e20467是相同的,只是后者有名称。镜像没有运行过,也就是没有建立容器时可以通过docker rmi删除image:

f06c942d76832de610afd7b9393248df.png

若是镜像有运行过,docker rmi无法删除:

9f240e9038449836365ecffe9071e7a5.png

451d9222bcafbf2ae0178ed18e1adc65.png

Tips:

-a :提交的镜像作者;

-c :使用Dockerfile指令来创建镜像;

-m :提交时的说明文字;

-p :在commit时,将容器暂停;

docker rm     刪除已经结束的 container;

docker rmi    删除未运行的 image;

docker cp     在 host 和 container 之间拷贝文件;

docker commit 保存改动为新的 Image,将容器的可读写层转换为一个只读层,这样就把一个容器转换成了不可变的镜像。

容器和镜像区别

写在这里,可能会对容器和镜像有些疑问,查找资料时发现下面这张图很好的解释了他们的区别:

d9b65fdf41452a8cebf1adb8c97e304e.png

镜像(Image)就是一堆多个只读层(read-only layer)重叠的统一视角,除了最下面一层,其它层都会有一个指针指向下一层。这些层是Docker内部的实现细节,并且能够在主机(运行Docker的机器)的文件系统上访问到。统一文件系统(union file system)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。

容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

 总结:容器 = 镜像 + 可读写层。并且容器的定义并没有提及是否要运行容器。

一个运行态容器(running container)被定义为一个可读写的统一文件系统加上隔离的进程空间和包含其中的进程,正是文件系统隔离技术使得Docker成为了一个前途无量的技术。一个容器中的进程可能会对文件进行修改、删除、创建,这些改变都将作用于可读写层(read-write layer)。

6b9a671c31ea8d383c1a9337f0dd25e4.png e6fca3432a456018f541037e0dd71eec.png 34a76e448a6b9a15fd0db9e73d6c465d.png

一码不扫,
可以扫天下?

6b9a671c31ea8d383c1a9337f0dd25e4.png更多推荐            Docker简单入门 Python办公自动化—xlrd如何操作Execl行? Python办公自动化—xlrd模块如何应用在Excel中? Python办公自动化—环境搭建 初识Python        
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值