1、这个是Virtualbox,KVM这种虚拟出一个新世界的思路。虚拟一个氛围,是Docker的做法。例如贵公司的Linux部门以前只有3,4个工程师,然后有一个Manager,后来有30个人了,你就可以分什么内核组、驱动组、应用组等更多的组,然后又多出几个Manager。这种组,类似于名称空间,在每一个单独名称空间的Manager,都觉得自己是个Manager,于是他会爽那么一点点。最开始是这样的:后来是这样的:如果这样还不够,还可以搞声卡驱动组Manager,网卡驱动组Manager,反正可以不停地搞。大家在各自的Container里面占山为王。Docker就是这样的名称空间让各自在同样的Li
2、nux平台上面各自暗爽,装到你自己的容器里面爽。安装Docker如果是Windows主机,可以下载docker-toolbox一路安装,安装过程中如果提示什么错,可以把360等类似软件关闭。Windows安装好Docker后,使用Docker Quickstart Terminal运行。如果是Ubuntu,可以按照 16.04就是命令:sudo apt-get update&& apt-get install docker。Ubuntu安装Docker后,可以把当前用户加到Docker用户组以便当前用户也有权限操作Docker client和host之间的通信socket(之后请重启D
3、ocker相关服务):sudo usermod -aG docker $USER为了装逼需要,我们在Docker Hub网页注册一个用户名,我注册的用户名是21cnbao。这样以后,就可以自己提交自己的image了。Docker的架构Docker中可能涉及到3个机器或者更多机器,一个运行Docker命令的client, 一个包含images并以容器(Container)形式运行image的主机,一个Docker的images仓库。client与docker host上面的docker daemon通信。当然docker client和host可以运行于一台机器(我们做实验的时候是一台),默认的
4、Docker仓库是Docker Hub。一般的流程中,client发pull命令从仓库把image拉到docker host,然后通过run命令指挥image到host上面弄一个Container来跑这个image。当然也可以是相反的流程,client 通过build命令在host上面创建一个自己的image,然后通过push命令把image推到仓库。之后这个image可以被别的人或者自己pull。image到底是个什么鬼?Docker镜像是一个特殊的文件系统,提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。image为特
5、定目的而生,比如弄了个Nginx的image后,这个image就把Nginx的东西包罗万象了,无论是张三、王五、六麻子还是七癞子,无论它是什么电脑,什么操作系统,只要支持Docker,它把这个Nginx的image下载下来后,拿docker run命令就可以弄容器跑Nginx了。这样,用户就不用装Nginx以及它依赖的一切包了(通常装一个软件弄依赖也能把你弄地烦躁死了)。这样看起来,Docker实在是居家旅行,杀人越货之必备良器也!镜像构建时,会一层层叠加,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一
6、层的文件,而是仅在当前层标记为该文件已删除。所以这个很类似Git( diff layout/book_index_template.html | 8 - text/05_Installing_Git/0_Source.markdown | 14 text/05_Installing_Git/1_Linux.markdown | 17 text/05_Installing_Git/2_Mac_104.markdown | 11 text/05_Installing_Git/3_Mac_105.markdown | 8 text/05_Installing_Git/4_Windows.markdo
7、wn | 7 ./1_Getting_a_Git_Repo.markdown | 7 - ./0_Comparing_Commits_Git_Diff.markdown | 45 - ./0_Hosting_Git_gitweb_repoorcz_github.markdown | 4 - 9files changed, 115 insertions( ), 6 deletions(-)这些叠加的最后一层就是Container,所以你在Container里面改了文件,其实不会进image。一次完整的Docker实作说了那么多后,我们必须亲自动手玩了。下面把pull,run,build,push
8、都玩一次,破除神秘感。一个典型的运行流程如下:1. client用pull命令从仓库把image拉到docker hostdocker pull的格式是:docker pull选项 Docker Registry地址 <仓库名>:标签名&默认地址是 DockerHub。 仓库名:这里的仓库名是两段式名称,既 / ,“/”前面一般是用户名。对于 Docker Hub,如果不给出用户名,则默认为 library ,也就是官方镜像。下载 Ubuntu14.04的image(以Ubuntu为例):baohuaubuntu:$docker pull ubuntu:14.04 14.04:Pu
9、lling from library/ubuntu c60055a51d74:Downloading & 539.8 kB/65.69 MB 755da0cdb7d2:Download complete 969d017f67e6:37c9a9113595:a3d9f8479786:运行docker images命令看看下载的images:$docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu ml 14.04 b969ab9f929b 4 weeksago 188 MB 2. 在docker host上面运行Ubuntu 14.04
10、于Containers我们现在运行Ubuntu14.04中的bash shell,因为docker运行image于容器时,需要指定主进程(本例的主进程为bash)。在终端1上面运行:docker run -it -rm ubuntu:14.04 bash在终端2上面运行:14.04 bash这样我们就运行了Ubuntu 14.04这个image的2次实例(得到2个容器), Linux下面的ps命令是看进程的,Docker下面就是看image的实例容器了。$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e3a91
11、3872698 ubuntu:14.04 bash 11seconds ago Up 10 seconds wizardly_elion db1c25753e97 ubuntu: 21seconds ago Up 21 seconds adoring_shannonimage和container之间的关系类似程序与进程之间的关系,一个静若处子,一个动如脱兔。比如程序QQ,运行一次就是1个QQ进程,再运行一个QQ就是第2个QQ进程。同样道理,一个image也可以运行多份Container。3. 构建自己的image现在想在Ubuntu 14.04中增加Vim和GCC,构建一个增量image,因为
12、目前的Ubuntu image里面没有这样的命令:roote3a913872698:/# vim bash: vim: command not found于是在Ubuntu 14.04这个image基础上面,叠加一层,然后把它提交到docker hub的21cnbao的仓库。我们需要在客户端电脑上面创建一个Dockerfile文件(该文件用于描述image),以实现在现有的Ubuntu 14.04上面做增量的目的。$ mkdir myubuntu $ cd myubuntu/ $ touch Dockerfile用Vim编辑Dockerfile,添加如下内容:# ubuntu 14.04 wi
13、th vim and gcc FROM ubuntu:MAINTAINER Barry Song&21cnbao& RUN apt-get update & apt-getinstall y vim gccRUN 指令的含义是在指定在源image内执行一条命令,本例更新APT 缓存,并且安装Vim和 GCC以形成一个增量image。下面build这个image:$ docker build -t 21cnbao/myubuntu:14.04 . time=2017-02-21T06:48:07 08:00level=info msg=Unable to use system certifica
14、te pool: crypto/x509: systemroot pool is not available on WindowsSending build context to Docker daemon2.048 kB Step 1/3 : FROM ubuntu:-& b969ab9f929b Step 2/3 : MAINTAINER Barry Song& Running in f1449746b58c 5dacd7a6ee5d Removing intermediate containerf1449746b58c Step 3/3 : RUN apt-get update &apt
15、-get install vim gcc Running in b1469caf3509 Ign trustyInRelease Get:1 trusty-updates InRelease 65.9 kB 2 trusty-security InRelease 65.9 kB 3 trustyRelease.gpg 933 B 4 trustyRelease 58.5 kB 5 trusty-updates/main Sources 485 kB 下面运行21cnbao/myubuntu 14.04这个镜像:docker run -it -rm 21cnbao/myubuntu:14.04
16、bash发现GCC和Vim都有了:$ docker run -it -rm 21cnbao/myubuntu:14.04 bash rootf33ee07caf43:/#gcc gcc: fatal error: no input files compilation terminated. /#4. 通过docker push把image提交到仓库在Docker Hub上面创建一个仓库myubuntu,该仓库创建后,全名将为21cnbao/myubuntu。下面push这个image到Docker Hub,之前我们需要登录到Docker Hub:$ docker login -username
17、=21cnbao -email=21cnbao Flag-email has been deprecated, will be removed in 1.14. Password:Login Succeeded下面开始push:$ docker push 21cnbao/myubuntu 2017-02-21T07:17:59 08:The pushrefers to a repository docker.io/21cnbao/myubuntu 87157b68b121:Pushing & 1.109 MB/134.7 MB c9fc7024b484:Pushing =& 3.072 kB ca893d4b83a6: 4.608 kB 153bd22a8e96:Pushing 7.168 kB 83b575865dd1: 209.9 kB 918b1e79e358:Waiting 通过Docker Hub进哥的仓库看一眼,发现大功告成了。2小时结束,相信你已经爱上Docker。相爱容易相处难,痛苦才刚刚开始。人生若只如初见,何事秋风悲画扇。等闲变却故人心,却道故人心易变。后面如果有时间,再完成一个Docker 相处的8小时。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1