Docker的四个基本概念

Docker的四个基本概念

 

前面咱们把Docker的基础部分都学完了,不是学完了,是都说完了,学没学完你应该清楚,楼主今天开始在网上扒拉看看有没有Docker实战的资源,啊哈!没有...

 

只能自己一边搞一边写了,但是这就像你自学一样,学着学着你就不知道该学什么东西了,就像楼主现在这样的情况,学完docker基础之后不知道下一步该干点嘛了,.楼主

 

咱最近一段时间楼主可能会牵扯到大量的理论,因为如果是初学者的话,大量的理论是让人想放弃,咱们已经不是初学者了,我觉得可以稍微接触一点理论了.

 

Docker两个最重要的概念是镜像和容器,除此之外,链接和数据卷也很重要.

 

镜像类似快照,容器类似虚拟机,使用镜像创建容器类似于使用快照创建虚拟机.但是,docker设计者推荐一个容器一个进程.如果你要选择在一个容器中运行多个进程,那唯一情况是:处于调试目的,运行类似ssh的东西来访问运行中的容器,不过docker exec命令解决了这个问题.

 

容器和虚拟机的第二个差异就是:当你停止一个虚拟机的时候,可能除了一些临时文件,没有文件会被删除;当你停止一个容器的时候,对初始状态(创建容器所用的镜像的状态)做的所有变化都会丢失.

 

数据卷

 

数据卷让你可以不受容器生命周期影响进行数据持久化.使用docker的时候必须做出的思维改变时:容器应该是短暂和一次性的.

 

 

连接

 

容器启动的时候,将被分配一个随机的私有IP,其它容器可以使用这个IP地址与其进行通讯.这很重要,原因有二:一是它提供了荣期间相互通信的渠道,二是容器将共享一个本地网络.

 

要开启容器间通讯,docker允许你在创建一个新容器时引用其它现存容器,在你刚创建的容器里被引用的容器将获得一个(你指定的)别名.我们就说,这两个容器链接在了一起.

 

因此,如果DB容器已经在运行,我们可以创建一个web服务器容器,并在创建时引用这个DB容器,给它起一个别名,比如dbapp.在这个新建的web服务器容器里,我可以在任何时候使用主机名dbappDB容器进行通讯.

 

 

Docker镜像的可移植性

 

在创建镜像的时候有一点需要注意.Docker允许你在一个镜像中指定卷和端口.从这个镜像创建的容器继承了这些设置.但是,Docker不允许你在镜像上指定任何不可移植的内容.

 

例如,你可以在镜像里定义卷,只要它们被保存在docker使用的默认位置.这是因为如果你在宿主文件系统里指定了一个特定目录来保存卷,其他使用这个镜像的宿主无法保证这个目录是存在的.

 

你可以定义要公开的端口,单仅限那些在创建链接时公开给其他容器的端口,你不能制定公开给宿主的端口,因为你无法知晓使用那个镜像的宿主有哪些端口可用.

 

你也不能再镜像上定义链接.使用链接要求通过名字引用其他容器,但你无法预知每个使用那个镜像的宿主如何命名容器.

 

镜像必须完全可移植,Docker不允许例外.

 

上面的内容概括起来:创建镜像,用创建的镜像创建容器,在需要时暴露端口和创建卷,通过链接将几个容器连接在一起.

 

 

当你下载一个镜像,修改它,然后保存成新版本,你只是创建了加载在包裹基础镜像的初始层上的一个新的union文件系统.这使得docker镜像非常轻,比如,你的DB,NginxSyslog镜像都可以共享一个Ubuntu基础,每一个镜像保存的知识在它们需要的功能的基础上的变化.

 

我感觉是时候分析一个docker命令了.

一般情况下,我们从镜像上创建一个容器:

syx@syx-VB:~$ docker run -it --name test ubuntu /bin/bash

--rm:告诉docker一旦运行的进程退出就删除容器,这在进行测试的时候很有用,可避免杂乱.

-ti:告诉docker分配一个伪终端并进入交互模式.这将进入到容器内,对与快速原型开发或者尝试很有用,但不在在生产容器中打开这些标志.

ubuntu:这是容器立足的镜像.

/bin/bash:要运行的命令,因为我们以交互式模式启动,它将显示一个容器的提示符.

 

在运行run命令的时候,你可以指定链接,,端口,窗口名称(如果你没写,docker会将分配一个默认的名称)

 

现在我们尝试在后台运行一个容器:

syx@syx-VB:~$ docker run -d ubuntu echo 'hello'
89eea9f601049b04690e80a865e3e51ec8d3f50843ee4070a0252ad8d845c10b

输出的是分配的ID,这个ID是随机的,我们检查一下容器是否开始运行了:

syx@syx-VB:~$ docker ps -a
89eea9f60104        ubuntu                                  "echo hello"             29 seconds ago       Exited (0) 28 seconds ago                            naughty_roentgen


我们会看到容器有了,它被自动分配了一个叫做naughty_roentgen名字.我们看看容器里正在发生什么:

syx@syx-VBdocker exec -ti naughty_roentgen /bin/bash

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值