一次完整的Docker實做

一次完整的Docker實做docker


說了那麼多後,咱們必須親自動手玩了。下面把pull,run,build,push都玩一次,破除神祕感。一個典型的運行流程以下:shell

1. client用pull命令從倉庫把p_w_picpath拉到docker host

docker pull的格式是:ubuntu

docker pull[選項] [Docker Registry地址] <倉庫名>:<標籤名>vim

默認地址是 DockerHub。 倉庫名:這裏的倉庫名是兩段式名稱,既 / ,「/」前面通常是用戶名。對於 Docker Hub,若是不給出用戶名,則默認爲 library ,也就是官方鏡像。緩存

下載 Ubuntu14.04的p_w_picpath(以Ubuntu爲例):bash

baohua@ubuntu:~$docker pull ubuntu:14.04  
14.04:Pulling from library/ubuntu  
c60055a51d74:Downloading [>                                                 ] 539.8 kB/65.69 MB  
755da0cdb7d2:Download complete  
969d017f67e6:Download complete  
37c9a9113595:Download complete  
a3d9f8479786:Download complete                                                                  
…

運行docker p_w_picpaths命令看看下載的p_w_picpaths:ide

$docker p_w_picpaths  
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE  
ubuntu            ml 14.04              b969ab9f929b        4 weeksago         188 MB

2. 在docker host上面運行Ubuntu 14.04於Containers

咱們如今運行Ubuntu14.04中的bash shell,由於docker運行p_w_picpath於容器時,須要指定主進程(本例的主進程爲bash)。ui

在終端1上面運行:spa

docker run -it --rm ubuntu:14.04 bash

在終端2上面運行:3d

docker run -it --rm ubuntu:14.04 bash

這樣咱們就運行了Ubuntu 14.04這個p_w_picpath的2次實例(獲得2個容器), Linux下面的ps命令是看進程的,Docker下面就是看p_w_picpath的實例容器了。

$ docker ps  
CONTAINER ID       IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES  
e3a913872698       ubuntu:14.04       "bash"              11seconds ago      Up 10 seconds                           wizardly_elion  
db1c25753e97       ubuntu:14.04       "bash"              21seconds ago      Up 21 seconds                           adoring_shannon

p_w_picpath和container之間的關係相似程序與進程之間的關係,一個靜若處子,一個動如脫兔。好比程序QQ,運行一次就是1個QQ進程,再運行一個QQ就是第2個QQ進程。一樣道理,一個p_w_picpath也能夠運行多份Container。

3. 構建本身的p_w_picpath

如今想在Ubuntu 14.04中增長Vim和GCC,構建一個增量p_w_picpath,由於目前的Ubuntu p_w_picpath裏面沒有這樣的命令:

root@e3a913872698:/# vim  
bash: vim: command not found

因而在Ubuntu 14.04這個p_w_picpath基礎上面,疊加一層,而後把它提交到docker hub的21cnbao的倉庫。

咱們須要在客戶端電腦上面建立一個Dockerfile文件(該文件用於描述p_w_picpath),以實如今現有的Ubuntu 14.04上面作增量的目的。

$ mkdir myubuntu  
$ cd myubuntu/  
$ touch Dockerfile

用Vim編輯Dockerfile,添加以下內容:

# ubuntu 14.04 with vim and gcc  
FROM ubuntu:14.04  
MAINTAINER Barry Song<21cnbao@gmail.com>  
RUN apt-get update && apt-getinstall –y vim gcc

RUN 指令的含義是在指定在源p_w_picpath內執行一條命令,本例更新APT 緩存,而且安裝Vim和 GCC以造成一個增量p_w_picpath。

下面build這個p_w_picpath:

$ docker build -t 21cnbao/myubuntu:14.04 .  
time="2017-02-21T06:48:07+08:00"level=info msg="Unable to use system certificate pool: crypto/x509: systemroot pool is not available on Windows"  
Sending build context to Docker daemon2.048 kB  
Step 1/3 : FROM ubuntu:14.04  
---> b969ab9f929b  
Step 2/3 : MAINTAINER Barry Song<21cnbao@gmail.com>  
---> Running in f1449746b58c  
---> 5dacd7a6ee5d  
Removing intermediate containerf1449746b58c  
Step 3/3 : RUN apt-get update &&apt-get install vim gcc  
---> Running in b1469caf3509  
Ign http://archive.ubuntu.com trustyInRelease  
Get:1 http://archive.ubuntu.comtrusty-updates InRelease [65.9 kB]  
Get:2 http://archive.ubuntu.comtrusty-security InRelease [65.9 kB]  
Get:3 http://archive.ubuntu.com trustyRelease.gpg [933 B]  
Get:4 http://archive.ubuntu.com trustyRelease [58.5 kB]  
Get:5 http://archive.ubuntu.comtrusty-updates/main Sources [485 kB]  
…

下面運行21cnbao/myubuntu 14.04這個鏡像:

docker run -it --rm 21cnbao/myubuntu:14.04 bash

發現GCC和Vim都有了:

$ docker run -it --rm 21cnbao/myubuntu:14.04 bash  
root@f33ee07caf43:/#gcc  
gcc: fatal error: no input files  
compilation terminated.  
root@f33ee07caf43:/#

4. 經過docker push把p_w_picpath提交到倉庫

在Docker Hub上面建立一個倉庫myubuntu,該倉庫建立後,全名將爲21cnbao/myubuntu。

wKioL1jAvQ2TG1UZAABAXW4Od6M113.jpg

下面push這個p_w_picpath到Docker Hub,以前咱們須要登陸到Docker Hub:

$ docker login --username=21cnbao --email=21cnbao@gmail.com  
Flag--email has been deprecated, will be removed in 1.14.  
Password:  
Login Succeeded

下面開始push:

$ docker push 21cnbao/myubuntu  
time="2017-02-21T07:17:59+08:00"level=info msg="Unable to use system certificate pool: crypto/x509: systemroot pool is not available on Windows"  
The pushrefers to a repository [docker.io/21cnbao/myubuntu]  
87157b68b121:Pushing [>                                                 ] 1.109 MB/134.7 MB  
c9fc7024b484:Pushing [==================================================>] 3.072 kB  
ca893d4b83a6:Pushing [==================================================>] 4.608 kB  
153bd22a8e96:Pushing 7.168 kB  
83b575865dd1:Pushing [==================================================>] 209.9 kB  
918b1e79e358:Waiting  
…

經過Docker Hub進哥的倉庫看一眼,發現大功告成了。

wKiom1jAvSyAsN9AAABBmyLEEEk862.jpg

2小時結束,相信你已經愛上Docker。相愛容易相處難,痛苦纔剛剛開始。人生若只如初見,何事秋風悲畫扇。等閒變卻故人心,卻道故人心易變。

相關文章
相關標籤/搜索