自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

技巧指南:在Ubuntu上用Docker管理Linux容器

譯文
運(yùn)維 系統(tǒng)運(yùn)維 Linux
本文將介紹如何安裝Docker,并用它高效地管理虛擬機(jī)。Docker是一種開(kāi)源Linux虛擬化平臺(tái),以便廣大開(kāi)發(fā)人員和系統(tǒng)管理員輕松地開(kāi)發(fā)、部署和執(zhí)行分布式應(yīng)用程序。

[[115623]]

【51CTO精選譯文】本文將介紹如何安裝Docker,并用它高效地管理虛擬機(jī)。Docker是一種開(kāi)源Linux虛擬化平臺(tái),以便廣大開(kāi)發(fā)人員和系統(tǒng)管理員輕松地開(kāi)發(fā)、部署和執(zhí)行分布式應(yīng)用程序。Docker包括這幾個(gè)部分:Docker引擎(一個(gè)輕型運(yùn)行時(shí)和虛擬化層),封裝和版本控制虛擬機(jī)的工具(類(lèi)似源代碼軟件庫(kù)),以及Docker Hub(一項(xiàng)共享應(yīng)用程序、實(shí)現(xiàn)工作流自動(dòng)化的云端服務(wù))。Docker讓?xiě)?yīng)用程序得以由組件迅速裝配而成,消除了開(kāi)發(fā)環(huán)境、質(zhì)量控制和生產(chǎn)環(huán)境之間的磨擦。

1 首項(xiàng)附注

以本文為例,我準(zhǔn)備把docker安裝在Ubuntu 14.04操作系統(tǒng)上。虛擬化軟件市場(chǎng)上有幾項(xiàng)標(biāo)準(zhǔn)硬件虛擬化技術(shù),比如KVM、Xen或Hyper-V??墒菢?biāo)準(zhǔn)虛擬化技術(shù)太過(guò)笨拙,無(wú)法對(duì)Linux上的單個(gè)應(yīng)用程序進(jìn)行虛擬化處理。我們可以克服這種情形,只要使用Linux容器(Linux Container):對(duì)操作系統(tǒng)層面的虛擬化而言,這是一種不錯(cuò)的替代方案。Linux容器是非常有用的方式,可以讓開(kāi)發(fā)/測(cè)試環(huán)境出現(xiàn)在安全有保障的一堆容器中。Docker提供了這種用途的Linux容器環(huán)境。

2 安裝

如前所述,我準(zhǔn)備把docker安裝在Ubuntu上。在這一章節(jié),我將為大家介紹安裝docker的兩種方法;在2a這部分中,我使用來(lái)自Ubuntu軟件庫(kù)的docker版本,這個(gè)版本由Ubuntu維護(hù),提供整整5年的長(zhǎng)期支持版(LTS)支持,但它不是***版本。在2b這部分中,我將使用來(lái)自Ubuntu ppa軟件庫(kù)的***版本。由于docker正在大力開(kāi)發(fā)之中,來(lái)自2b)的***Docker版本極可能適合大多數(shù)用戶。請(qǐng)使用方法2a或方法2b,但別同時(shí)使用這兩種方法!

2a 從官方的Ubuntu軟件庫(kù)來(lái)安裝

想安裝docker,請(qǐng)使用下列命令:

 

  1. sudo apt-get update  
  2. sudo apt-get install docker.io 

 

然后創(chuàng)建符號(hào)鏈接,以便在外殼上使用起來(lái)更容易。

 

  1. sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker  
  2. sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io 

 

2b安裝***的docker版本

想從docker.io軟件庫(kù)安裝***的docker版本,運(yùn)行這個(gè)命令:

  1. curl -s https://get.docker.io/ubuntu/ | sudo sh 

3 準(zhǔn)備外殼環(huán)境

現(xiàn)在,我將把我的user=srijan添加到docker組:

  1. sudo usermod -a -G docker srijan 

或者使用:

  1. sudo usermod -a -G docker $USER 

這里,我會(huì)退出當(dāng)前會(huì)話,然后再重新登錄?,F(xiàn)在,我將添加docker配置文件,以便向系統(tǒng)通知其位置。

  1. sudo vi /etc/default/docker.io 
  1. DOCKER="/usr/bin/docker.io" 

現(xiàn)在重啟服務(wù),如下所示:

  1. sudo service docker.io restart 

4 容器管理

我準(zhǔn)備隨Ubuntu操作系統(tǒng)一同啟動(dòng)容器。我會(huì)下載docker映像,如下所示:

  1. docker pull ubuntu 

注意:pull命令用于從注冊(cè)中心(registry)拉取映像或軟件庫(kù)。

現(xiàn)在我將使用下面這個(gè)命令,登錄進(jìn)入到Ubuntu容器的bash外殼:

  1. docker run -i -t ubuntu /bin/bash 

僅僅為了確認(rèn),我將檢查容器的IP,如下所示:

 

  1. root@fd98ee950252:/# ifconfig   
  2. eth0      Link encap:Ethernet  HWaddr 5a:a6:c6:88:f2:48    
  3.           inet addr:172.17.0.3  Bcast:0.0.0.0  Mask:255.255.0.0  
  4.           inet6 addr: fe80::58a6:c6ff:fe88:f248/64 Scope:Link  
  5.           UP BROADCAST RUNNING  MTU:1500  Metric:1  
  6.           RX packets:7 errors:0 dropped:2 overruns:0 frame:0  
  7.           TX packets:8 errors:0 dropped:0 overruns:0 carrier:0  
  8.           collisions:0 txqueuelen:1000   
  9.           RX bytes:558 (558.0 B)  TX bytes:648 (648.0 B)  
  10.  
  11. lo        Link encap:Local Loopback    
  12.           inet addr:127.0.0.1  Mask:255.0.0.0  
  13.           inet6 addr: ::1/128 Scope:Host  
  14.           UP LOOPBACK RUNNING  MTU:1500  Metric:1  
  15.           RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
  16.           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0  
  17.           collisions:0 txqueuelen:0   
  18.           RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)  
  19.  
  20. root@fd98ee950252:/# 

 

我容器上的IP地址為172.17.0.3。同樣,我還可以使用其他窗口。想編輯容器,只要鍵入:

  1. exit 

同樣,你可以有其他的操作系統(tǒng)容器,比如說(shuō)。

我想使用Debian容器,就要使用代碼:

  1. docker run -i -t debian /bin/bash 

如果你想有某個(gè)發(fā)行版,那么就要使用這個(gè)命令:

  1. docker run -i -t ubuntu:12.04 /bin/bash 

它會(huì)創(chuàng)建ubuntu12.04容器。我會(huì)反復(fù)核實(shí),如下所示:

 

  1. root@44b56100fd1f:/# cat /etc/lsb-release   
  2. DISTRIB_ID=Ubuntu 
  3. DISTRIB_RELEASE=12.04  
  4. DISTRIB_CODENAME=precise 
  5. DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS" 
  6. root@44b56100fd1f:/# 

 

#p#

4.1 構(gòu)建我們自己的映像

構(gòu)建Docker映像有兩種方法:

•通過(guò)docker commit(提交)命令

•通過(guò)docker build(構(gòu)建)命令以及Docker文件(Dockerfile)

目前并不推薦docker提交方法,因?yàn)榻柚鶧ocker文件進(jìn)行構(gòu)建要靈活得多、強(qiáng)大得多,但為了力求完整起見(jiàn),我們會(huì)向你演示提交方法。之后,我將重點(diǎn)介紹推薦的Docker映像構(gòu)建方法:編寫(xiě)Docker文件,然后使用docker構(gòu)建命令。

4.1 使用Docker提交命令來(lái)創(chuàng)建映像

我將創(chuàng)建一個(gè)容器,并對(duì)該容器進(jìn)行更改――就像更改代碼那樣,然后將那些變更內(nèi)容提交給新的映像。

不妨先通過(guò)我們?cè)谶^(guò)去使用的ubuntu映像來(lái)創(chuàng)建一個(gè)容器。

  1. docker run -i -t ubuntu /bin/bash  
  2. root@73527b8b4261:/# 

注意:請(qǐng)注意上面的root顯示了主機(jī)名稱(chēng)73527b8b4261,它是所創(chuàng)建的容器名稱(chēng);它與你的情況會(huì)不一樣。

此外,我會(huì)將apache安裝在容器里面:

  1. apt-get install apache2 

我已啟動(dòng)了容器,然后將Apache安裝在里面?,F(xiàn)在,我準(zhǔn)備將該容器用作Web服務(wù)器,所以我將它保存在當(dāng)前狀態(tài)。

這樣一來(lái),我每次創(chuàng)建一個(gè)新的容器時(shí),就沒(méi)必要用Apache來(lái)重新構(gòu)建它。為此,我將退出容器,使用exit命令,然后使用docker提交命令。

  1. exit 
  1. docker commit 73527b8b4261 srijan/apache2 8ce0ea7a1528 

注意:這里的73527b8b4261是我的容器名稱(chēng);我為容器使用8ce0ea7a1528標(biāo)記,你可以賦予任何標(biāo)記名稱(chēng),也可以使用同一個(gè)名稱(chēng)。

假設(shè)你忘了上一個(gè)創(chuàng)建的容器的編號(hào),可以使用這個(gè)命令:

  1. docker ps -l -q 

它會(huì)得出73527b8b4261

注意:73527b8b4261是你上一個(gè)創(chuàng)建的容器名稱(chēng),它與你的情況可能不一樣。

不妨看一下我們的新映像。它可以這樣獲得,如下所示:

 

  1. srijan@vboxtest:~$ docker images srijan/apache2  
  2. REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE  
  3. srijan/apache2      8ce0ea7a1528        741155868ac8        6 minutes ago       207.2 MB  
  4. srijan@vboxtest:~$ 

 

注意:這里的8ce0ea7a1528是我在保存容器時(shí)所使用的標(biāo)記名稱(chēng);

注意:741155868ac8是該容器的映像編號(hào);

注意:所有這些值與你的情況可能不一樣,因?yàn)樵诒4嫒萜鲿r(shí),docker會(huì)創(chuàng)建相應(yīng)的隨機(jī)名稱(chēng)。

現(xiàn)在,我將保存定制的映像,如下所示:

  1. docker commit -m="A new custom image" --author="Srijan Kishore" 73527b8b4261 srijan/apache2:webserver 

它會(huì)給出結(jié)果:

  1. srijan@vboxtest:~$ docker commit -m="A new custom image" --author="Srijan Kishore" 73527b8b4261 srijan/apache2:webserver  
  2. f0367362eb405c513ac002b5cf172a2c0bc6c8212eab91c613f9ee611cf92fec 

想從我們的新映像運(yùn)行容器,我們只要使用docker run(運(yùn)行)命令。

  1. docker run -t -i srijan/apache2:webserver /bin/bash 

我們可以反復(fù)核對(duì)已提交的映像,如下所示:

 

  1. srijan@vboxtest:~$ docker inspect srijan/apache2:webserver  
  2. [{  
  3.     "Architecture": "amd64",  
  4.     "Author": "Srijan Kishore",  
  5.     "Comment": "A new custom image",  
  6.     "Config": {  
  7.         "AttachStderr": false,  
  8.         "AttachStdin": false,  
  9.         "AttachStdout": false,  
  10.         "Cmd": [  
  11.             "/bin/bash"  
  12.         ],  
  13.         "CpuShares": 0,  
  14.         "Cpuset": "",  
  15.         "Domainname": "",  
  16.         "Entrypoint": null,  
  17.         "Env": [  
  18.             "HOME=/",  
  19.             "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"  
  20.         ],  
  21.         "ExposedPorts": null,  
  22.         "Hostname": "",  
  23.         "Image": "",  
  24.         "Memory": 0,  
  25.         "MemorySwap": 0,  
  26.         "NetworkDisabled": false,  
  27.         "OnBuild": null,  
  28.         "OpenStdin": false,  
  29.         "PortSpecs": null,  
  30.         "StdinOnce": false,  
  31.         "Tty": false,  
  32.         "User": "",  
  33.         "Volumes": null,  
  34.         "WorkingDir": ""  
  35.     },  
  36.     "Container": "73527b8b42614f6ecd83fb5f9822d6086988d3b68fd5e32b4afbc7cd415402fd",  
  37.     "ContainerConfig": {  
  38.         "AttachStderr": true,  
  39.         "AttachStdin": true,  
  40.         "AttachStdout": true,  
  41.         "Cmd": [  
  42.             "/bin/bash"  
  43.         ],  
  44.         "CpuShares": 0,  
  45.         "Cpuset": "",  
  46.         "Domainname": "",  
  47.         "Entrypoint": null,  
  48.         "Env": [  
  49.             "HOME=/",  
  50.             "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"  
  51.         ],  
  52.         "ExposedPorts": null,  
  53.         "Hostname": "73527b8b4261",  
  54.         "Image": "ubuntu",  
  55.         "Memory": 0,  
  56.         "MemorySwap": 0,  
  57.         "NetworkDisabled": false,  
  58.         "OnBuild": null,  
  59.         "OpenStdin": true,  
  60.         "PortSpecs": null,  
  61.         "StdinOnce": true,  
  62.         "Tty": true,  
  63.         "User": "",  
  64.         "Volumes": null,  
  65.         "WorkingDir": ""  
  66.     },  
  67.     "Created": "2014-06-30T12:58:04.973349049Z",  
  68.     "DockerVersion": "1.0.1",  
  69.     "Id": "f0367362eb405c513ac002b5cf172a2c0bc6c8212eab91c613f9ee611cf92fec",  
  70.     "Os": "linux",  
  71.     "Parent": "ef83896b7fb99b00b9e0e6ac943826386e7edcef11a3a2f58b42011ab4a4e683",  
  72.     "Size": 14463026  
  73. }  
  74. ]srijan@vboxtest:~$ 

 

想從我們的新映像運(yùn)行容器,我們可以使用docker運(yùn)行命令。

  1. docker run -t -i srijan/apache2:webserver /bin/bash 

#p#

4.2 用Docker文件構(gòu)建映像

Docker文件使用基本的特定領(lǐng)域語(yǔ)言(DSL),以及用于構(gòu)建Docker映像的指令。然后,我們使用docker構(gòu)建命令,通過(guò)Docker文件里面的指令來(lái)構(gòu)建新的映像。Docker公司的開(kāi)發(fā)團(tuán)隊(duì)還在此發(fā)布了Docker文件教程(http://www.docker.io/learn/dockerfile/),可以幫助大家學(xué)會(huì)如何構(gòu)建Docker文件。

現(xiàn)在,我將創(chuàng)建一個(gè)簡(jiǎn)單的docker文件,它可以按照用戶的需求,進(jìn)一步改進(jìn)和完善。首先,讓一個(gè)目錄假設(shè)為dir=kishore:

  1. mkdir kishore  
  2. cd kishore 

現(xiàn)在創(chuàng)建一個(gè)Docker文件,如下所示:

  1. vi Dockerfile 

并輸入內(nèi)容,如下所示:

 

  1. FROM ubuntu:12.04  
  2. MAINTAINER Srijan Kishore <s.kishore@ispconfig.org> 
  3. RUN apt-get -qq update  
  4. RUN apt-get -qqy install apache2 

 

現(xiàn)在打開(kāi)定制的容器,請(qǐng)使用這個(gè)命令:

  1. sudo docker build -t="srijan/custom1" . 

它會(huì)得出如下結(jié)果:

 

  1. srijan@vboxtest:~/kishore$ sudo docker build -t="srijan/custom1" .  
  2. [sudo] password for srijan:   
  3. Sending build context to Docker daemon  2.56 kB  
  4. Sending build context to Docker daemon   
  5. Step 0 : FROM ubuntu:12.04  
  6. Pulling repository ubuntu  
  7. ea7d6801c538: Download complete   
  8. 511136ea3c5a: Download complete   
  9. 65b7e9ccb809: Download complete   
  10. f8dd6bd14f58: Download complete   
  11. a343823119db: Download complete   
  12.  ---> ea7d6801c538  
  13. Step 1 : MAINTAINER Srijan Kishore <s.kishore@ispconfig.org> 
  14.  ---> Running in a6135f405eb4  
  15.  ---> be97c22efa82  
  16. Removing intermediate container a6135f405eb4  
  17. Step 2 : RUN apt-get -qq update  
  18.  ---> Running in b5681cd85ba8  
  19.  ---> cbc3a95de894  
  20. Removing intermediate container b5681cd85ba8  
  21. Step 3 : RUN apt-get -qqy install apache2  
  22.  ---> Running in 5765c09b530f  
  23. debconf: delaying package configuration, since apt-utils is not installed  
  24. Selecting previously unselected package libsqlite3-0.  
  25. (Reading database ... 7551 files and directories currently installed.)  
  26. Unpacking libsqlite3-0 (from .../libsqlite3-0_3.7.9-2ubuntu1.1_amd64.deb) ...  
  27. Selecting previously unselected package libroken18-heimdal.  
  28. Unpacking libroken18-heimdal (from .../libroken18-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...  
  29. Selecting previously unselected package libasn1-8-heimdal.  
  30. Unpacking libasn1-8-heimdal (from .../libasn1-8-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...  
  31. Selecting previously unselected package libgpg-error0.  
  32. Unpacking libgpg-error0 (from .../libgpg-error0_1.10-2ubuntu1_amd64.deb) ...  
  33. Selecting previously unselected package libgcrypt11.  
  34. Unpacking libgcrypt11 (from .../libgcrypt11_1.5.0-3ubuntu0.2_amd64.deb) ...  
  35. Selecting previously unselected package libgdbm3.  
  36. Unpacking libgdbm3 (from .../libgdbm3_1.8.3-10_amd64.deb) ...  
  37. Selecting previously unselected package libp11-kit0.  
  38. Unpacking libp11-kit0 (from .../libp11-kit0_0.12-2ubuntu1_amd64.deb) ...  
  39. Selecting previously unselected package libtasn1-3.  
  40. Unpacking libtasn1-3 (from .../libtasn1-3_2.10-1ubuntu1.1_amd64.deb) ...  
  41. Selecting previously unselected package libgnutls26.  
  42. Unpacking libgnutls26 (from .../libgnutls26_2.12.14-5ubuntu3.8_amd64.deb) ...  
  43. Selecting previously unselected package libhcrypto4-heimdal.  
  44. Unpacking libhcrypto4-heimdal (from .../libhcrypto4-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...  
  45. Selecting previously unselected package libheimbase1-heimdal.  
  46. Unpacking libheimbase1-heimdal (from .../libheimbase1-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...  
  47. Selecting previously unselected package libwind0-heimdal.  
  48. Unpacking libwind0-heimdal (from .../libwind0-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...  
  49. Selecting previously unselected package libhx509-5-heimdal.  
  50. Unpacking libhx509-5-heimdal (from .../libhx509-5-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...  
  51. Selecting previously unselected package libkrb5-26-heimdal.  
  52. Unpacking libkrb5-26-heimdal (from .../libkrb5-26-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...  
  53. Selecting previously unselected package libheimntlm0-heimdal.  
  54. Unpacking libheimntlm0-heimdal (from .../libheimntlm0-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...  
  55. Selecting previously unselected package libgssapi3-heimdal.  
  56. Unpacking libgssapi3-heimdal (from .../libgssapi3-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...  
  57. Selecting previously unselected package libsasl2-2.  
  58. Unpacking libsasl2-2 (from .../libsasl2-2_2.1.25.dfsg1-3ubuntu0.1_amd64.deb) ...  
  59. Selecting previously unselected package libldap-2.4-2.  
  60. Unpacking libldap-2.4-2 (from .../libldap-2.4-2_2.4.28-1.1ubuntu4.4_amd64.deb) ...  
  61. Selecting previously unselected package libcap2.  
  62. Unpacking libcap2 (from .../libcap2_1%3a2.22-1ubuntu3_amd64.deb) ...  
  63. Selecting previously unselected package libexpat1.  
  64. Unpacking libexpat1 (from .../libexpat1_2.0.1-7.2ubuntu1.1_amd64.deb) ...  
  65. Selecting previously unselected package libmagic1.  
  66. Unpacking libmagic1 (from .../libmagic1_5.09-2ubuntu0.3_amd64.deb) ...  
  67. Selecting previously unselected package file.  
  68. Unpacking file (from .../file_5.09-2ubuntu0.3_amd64.deb) ...  
  69. Selecting previously unselected package mime-support.  
  70. Unpacking mime-support (from .../mime-support_3.51-1ubuntu1_all.deb) ...  
  71. Selecting previously unselected package netbase.  
  72. Unpacking netbase (from .../netbase_4.47ubuntu1_all.deb) ...  
  73. Selecting previously unselected package libsasl2-modules.  
  74. Unpacking libsasl2-modules (from .../libsasl2-modules_2.1.25.dfsg1-3ubuntu0.1_amd64.deb) ...  
  75. Selecting previously unselected package openssl.  
  76. Unpacking openssl (from .../openssl_1.0.1-4ubuntu5.16_amd64.deb) ...  
  77. Selecting previously unselected package libapr1.  
  78. Unpacking libapr1 (from .../libapr1_1.4.6-1_amd64.deb) ...  
  79. Selecting previously unselected package libaprutil1.  
  80. Unpacking libaprutil1 (from .../libaprutil1_1.3.12+dfsg-3_amd64.deb) ...  
  81. Selecting previously unselected package libaprutil1-dbd-sqlite3.  
  82. Unpacking libaprutil1-dbd-sqlite3 (from .../libaprutil1-dbd-sqlite3_1.3.12+dfsg-3_amd64.deb) ...  
  83. Selecting previously unselected package libaprutil1-ldap.  
  84. Unpacking libaprutil1-ldap (from .../libaprutil1-ldap_1.3.12+dfsg-3_amd64.deb) ...  
  85. Selecting previously unselected package apache2.2-bin.  
  86. Unpacking apache2.2-bin (from .../apache2.2-bin_2.2.22-1ubuntu1.6_amd64.deb) ...  
  87. Selecting previously unselected package apache2-utils.  
  88. Unpacking apache2-utils (from .../apache2-utils_2.2.22-1ubuntu1.6_amd64.deb) ...  
  89. Selecting previously unselected package libswitch-perl.  
  90. Unpacking libswitch-perl (from .../libswitch-perl_2.16-2_all.deb) ...  
  91. Selecting previously unselected package libclass-isa-perl.  
  92. Unpacking libclass-isa-perl (from .../libclass-isa-perl_0.36-3_all.deb) ...  
  93. Selecting previously unselected package perl-modules.  
  94. Unpacking perl-modules (from .../perl-modules_5.14.2-6ubuntu2.4_all.deb) ...  
  95. Selecting previously unselected package perl.  
  96. Unpacking perl (from .../perl_5.14.2-6ubuntu2.4_amd64.deb) ...  
  97. Selecting previously unselected package apache2.2-common.  
  98. Unpacking apache2.2-common (from .../apache2.2-common_2.2.22-1ubuntu1.6_amd64.deb) ...  
  99. Selecting previously unselected package apache2-mpm-worker.  
  100. Unpacking apache2-mpm-worker (from .../apache2-mpm-worker_2.2.22-1ubuntu1.6_amd64.deb) ...  
  101. Selecting previously unselected package apache2.  
  102. Unpacking apache2 (from .../apache2_2.2.22-1ubuntu1.6_amd64.deb) ...  
  103. Selecting previously unselected package ssl-cert.  
  104. Unpacking ssl-cert (from .../ssl-cert_1.0.28ubuntu0.1_all.deb) ...  
  105. Setting up libsqlite3-0 (3.7.9-2ubuntu1.1) ...  
  106. Setting up libroken18-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...  
  107. Setting up libasn1-8-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...  
  108. Setting up libgpg-error0 (1.10-2ubuntu1) ...  
  109. Setting up libgcrypt11 (1.5.0-3ubuntu0.2) ...  
  110. Setting up libgdbm3 (1.8.3-10) ...  
  111. Setting up libp11-kit0 (0.12-2ubuntu1) ...  
  112. Setting up libtasn1-3 (2.10-1ubuntu1.1) ...  
  113. Setting up libgnutls26 (2.12.14-5ubuntu3.8) ...  
  114. Setting up libhcrypto4-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...  
  115. Setting up libheimbase1-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...  
  116. Setting up libwind0-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...  
  117. Setting up libhx509-5-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...  
  118. Setting up libkrb5-26-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...  
  119. Setting up libheimntlm0-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...  
  120. Setting up libgssapi3-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...  
  121. Setting up libsasl2-2 (2.1.25.dfsg1-3ubuntu0.1) ...  
  122. Setting up libldap-2.4-2 (2.4.28-1.1ubuntu4.4) ...  
  123. Setting up libcap2 (1:2.22-1ubuntu3) ...  
  124. Setting up libexpat1 (2.0.1-7.2ubuntu1.1) ...  
  125. Setting up libmagic1 (5.09-2ubuntu0.3) ...  
  126. Setting up file (5.09-2ubuntu0.3) ...  
  127. Setting up mime-support (3.51-1ubuntu1) ...  
  128. update-alternatives: using /usr/bin/see to provide /usr/bin/view (view) in auto mode.  
  129. Setting up netbase (4.47ubuntu1) ...  
  130. Setting up libsasl2-modules (2.1.25.dfsg1-3ubuntu0.1) ...  
  131. Setting up openssl (1.0.1-4ubuntu5.16) ...  
  132. Setting up libapr1 (1.4.6-1) ...  
  133. Setting up libaprutil1 (1.3.12+dfsg-3) ...  
  134. Setting up libaprutil1-dbd-sqlite3 (1.3.12+dfsg-3) ...  
  135. Setting up libaprutil1-ldap (1.3.12+dfsg-3) ...  
  136. Setting up apache2.2-bin (2.2.22-1ubuntu1.6) ...  
  137. Setting up apache2-utils (2.2.22-1ubuntu1.6) ...  
  138. Setting up libclass-isa-perl (0.36-3) ...  
  139. Setting up ssl-cert (1.0.28ubuntu0.1) ...  
  140. debconf: unable to initialize frontend: Dialog  
  141. debconf: (TERM is not set, so the dialog frontend is not usable.)  
  142. debconf: falling back to frontend: Readline  
  143. debconf: unable to initialize frontend: Readline  
  144. debconf: (This frontend requires a controlling tty.)  
  145. debconf: falling back to frontend: Teletype  
  146. Setting up libswitch-perl (2.16-2) ...  
  147. Setting up perl-modules (5.14.2-6ubuntu2.4) ...  
  148. Setting up perl (5.14.2-6ubuntu2.4) ...  
  149. update-alternatives: using /usr/bin/prename to provide /usr/bin/rename (rename) in auto mode.  
  150. Setting up apache2.2-common (2.2.22-1ubuntu1.6) ...  
  151. Enabling site default.  
  152. Enabling module alias.  
  153. Enabling module autoindex.  
  154. Enabling module dir.  
  155. Enabling module env.  
  156. Enabling module mime.  
  157. Enabling module negotiation.  
  158. Enabling module setenvif.  
  159. Enabling module status.  
  160. Enabling module auth_basic.  
  161. Enabling module deflate.  
  162. Enabling module authz_default.  
  163. Enabling module authz_user.  
  164. Enabling module authz_groupfile.  
  165. Enabling module authn_file.  
  166. Enabling module authz_host.  
  167. Enabling module reqtimeout.  
  168. Setting up apache2-mpm-worker (2.2.22-1ubuntu1.6) ...  
  169. invoke-rc.d: policy-rc.d denied execution of start.  
  170. Setting up apache2 (2.2.22-1ubuntu1.6) ...  
  171. Processing triggers for libc-bin ...  
  172. ldconfig deferred processing now taking place  
  173.  ---> 634855a43331  
  174. Removing intermediate container 5765c09b530f  
  175. Successfully built 634855a43331  
  176. srijan@vboxtest:~/kishore$ 

 

現(xiàn)在不妨看一下我們的新映像。為此,我們可以使用docker映像命令來(lái)實(shí)現(xiàn)。

 

  1. docker images srijan/custom1 

 

  1. srijan@vboxtest:~/kishore$ docker images srijan/custom1  
  2. REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE  
  3. srijan/custom1      latest              634855a43331        About a minute ago   277.4 MB  
  4. srijan@vboxtest:~/kishore$ 

 

這里,你會(huì)發(fā)現(xiàn)映像在默認(rèn)情況下會(huì)安裝apache2。不妨反復(fù)核對(duì)一下:

  1. docker run -t -i srijan/apache2:webserver /bin/bash 

現(xiàn)在,你可以進(jìn)入新容器,而apache2和12.04ubuntu已預(yù)裝。

#p#

5 主機(jī)名稱(chēng)的更改

假設(shè)你想更改主機(jī)名稱(chēng),或者你想有一個(gè)定制的主機(jī)稱(chēng),比如我這里的server1.example.com。

我會(huì)使用:

  1. docker run -h 'server1.example.com' -t -i srijan/custom1 /bin/bash 

它會(huì)得出映像容器,如下所示:

 

  1. srijan@vboxtest:~/kishore$ docker run -h 'server1.example.com' -t -i srijan/custom1 /bin/bash  
  2. root@server1:/# hostname -f  
  3. server1.example.com  
  4. root@server1:/# 

 

6 docker的實(shí)用命令集錦

•pull(pull用于從注冊(cè)中心拉取映像或軟件庫(kù))

比如:

  1. docker run -i -t ubuntu /bin/bash 

•commit(commit用于保存容器)

比如:

  1. docker commit 73527b8b4261 srijan/apache2 8ce0ea7a1528  

•cp(將文件/文件夾從容器的文件系統(tǒng)拷貝到主機(jī)路徑。路徑相對(duì)于文件系統(tǒng)的根目錄。)

比如:

  1. docker cp CONTAINER:PATH HOSTPATH 

其中的CONTAINER是容器,將文件/文件夾從PATH拷貝到HOSTPATH

•start和stop容器:

  1. docker start 4386fb97867d 
  1. docker stop 4386fb97867d 

其中的4386fb97867d是你的容器編號(hào)

•export(將文件系統(tǒng)的內(nèi)容作為tar存檔文件導(dǎo)出到STDOUT)

  1. docker export 4386fb97867d > latest.tar 

•import(創(chuàng)建一個(gè)空的文件系統(tǒng)映像,將打包文件[.tar、.tar.gz、.tgz、.bzip、.tar.xz或.txz]的內(nèi)容導(dǎo)入到里面,然后以可選方式標(biāo)記它。)

  1. docker import http://example.com/exampleimage.tgz 

從本地文件導(dǎo)入:

通過(guò)pipe和stdin導(dǎo)入到docker。

  1. cat exampleimage.tgz | sudo docker import - exampleimagelocal:new 

從本地目錄導(dǎo)入:

  1. sudo tar -c . | sudo docker import - exampleimagedir 

•history(顯示映像的歷史記錄)

  1. docker history [OPTIONS] IMAGE 
  1. sudo docker history ea7d6801c538 

•images(它會(huì)顯示映像)

  1. docker images [OPTIONS] [NAME] 

它后面跟一些選項(xiàng),如下所示:

-a, --all=false 顯示所有映像(默認(rèn)情況下,過(guò)濾掉中間映像層)

-f, --filter=[]: 提供過(guò)濾器值(即“dangling=true”)

--no-trunc=false 不截短輸出

-q, --quiet=false 只顯示數(shù)字編號(hào)

•info(顯示整個(gè)系統(tǒng)的信息)

 

  1. srijan@VE130214:~$ sudo docker info 

 

 

  1. srijan@vboxtest:~$ sudo docker info  
  2. Containers: 20  
  3. Images: 65  
  4. Storage Driver: aufs  
  5.  Root Dir: /var/lib/docker/aufs  
  6.  Dirs: 105  
  7. Execution Driver: native-0.2  
  8. Kernel Version: 3.13.0-30-generic  
  9. WARNING: No swap limit support 

 

•inspect(返回關(guān)于容器/映像的低級(jí)信息)

  1. docker inspect CONTAINER|IMAGE [CONTAINER|IMAGE...] 

•kill(終止運(yùn)行中的容器/發(fā)送SIGKILL,即指定信號(hào))

  1. docker kill [OPTIONS] CONTAINER [CONTAINER...] 

•login(注冊(cè)或登錄docker注冊(cè)中心服務(wù)器,如果未指定任何服務(wù)器,https://index.docker.io/v1/為默認(rèn)值。)

  1. docker login localhost:8080 

它會(huì)登錄到自托管注冊(cè)中心。

•logs(讀取容器的日志)

  1. docker logs CONTAINER 

•ps(列出容器)

  1. docker ps [OPTIONS]  

它有下列選項(xiàng):

-a, --all=false 顯示所有容器。默認(rèn)情況下只顯示運(yùn)行中的容器。

--before="" 只顯示編號(hào)或名稱(chēng)之前創(chuàng)建的容器,包括非運(yùn)行中的容器。

-l, --latest=false 只顯示最近創(chuàng)建的容器,包括非運(yùn)行中的容器。

-n=-1 顯示n個(gè)最近創(chuàng)建的容器,包括非運(yùn)行中的容器。

--no-trunc=false 不截短輸出。

-q, --quiet=false 只顯示數(shù)字編號(hào)。

-s, --size=false 顯示大小。

--since="" 只顯示自編號(hào)或名稱(chēng)以來(lái)創(chuàng)建的容器,包括非運(yùn)行中的容器。

#p#

•push(將映像或軟件庫(kù)推送到注冊(cè)中心)

  1. docker push NAME[:TAG] 

•restart(它將重啟運(yùn)行中的容器)

  1. docker restart [OPTIONS] CONTAINER [CONTAINER...] 

•rm(它將刪除一個(gè)或多個(gè)容器)

  1. docker rm [OPTIONS] CONTAINER [CONTAINER...] 

•rmi(它將刪除一個(gè)或多個(gè)映像)

  1. docker rmi IMAGE [IMAGE...] 

•run(在新容器中運(yùn)行命令)

  1. docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 

它有下列選項(xiàng):

-a, --attach=[] 連接到stdin、stdout或stderr

-c, --cpu-shares=0 處理器共享(相對(duì)權(quán)重)

--cidfile="" 將容器編號(hào)寫(xiě)入到文件

-d, --detach=false 分離模式:在后臺(tái)運(yùn)行容器,輸出新的容器編號(hào)

--dns=[] 設(shè)置自定義DNS服務(wù)器

--dns-search=[] 設(shè)置自定義DNS搜索域

-e, --env=[] 設(shè)置環(huán)境變量

--entrypoint="" 覆蓋映像的默認(rèn)入口點(diǎn)

--env-file=[] 在行分隔的文件中讀取ENV變量

--expose=[] 暴露來(lái)自容器的端口,又不將端口發(fā)布到你的主機(jī)

-h, --hostname="" 容器主機(jī)名稱(chēng)

-i, --interactive=false   讓stdin保持開(kāi)放,即便沒(méi)有連接

--link=[] 將鏈接添加到另一個(gè)容器(名稱(chēng):別名)

--lxc-conf=[] (lxc exec-driver only)添加自定義lxc選項(xiàng)--lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"

-m, --memory="" 內(nèi)存限制(格式:<number><optional unit>,其中unit = b, k, m or g)

--name="" 為容器賦予名稱(chēng)

--net="bridge" 為容器設(shè)置網(wǎng)絡(luò)模式

'bridge':為docker網(wǎng)橋上的容器創(chuàng)建新的網(wǎng)絡(luò)堆棧

'none':不為該容器創(chuàng)建任何網(wǎng)絡(luò)機(jī)制

'container:<name|id>':重復(fù)使用另一個(gè)容器的網(wǎng)絡(luò)堆棧

'host':使用容器里面的主機(jī)網(wǎng)絡(luò)堆棧

-p, --publish=[] 將容器的端口發(fā)布到主機(jī)

格式:ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort

(使用“docker port”即可看到實(shí)際映射)

-P, --publish-all=false  將所有暴露的端口發(fā)布到主機(jī)接口

--privileged=false 為該容器賦予擴(kuò)展后的權(quán)限

--rm=false 容器退出后,自動(dòng)刪除容器(與-d不兼容)

--sig-proxy=true 將所有收到的信號(hào)代理輸出到進(jìn)程(即便處于非-tty模式下)

-t, --tty=false 分配偽終端

-u, --user="" 用戶名稱(chēng)或UID

-v, --volume=[] 綁定掛載卷(比如來(lái)自host:-v /host:/container,來(lái)自docker: -v /container)

--volumes-from=[] 從指定的一個(gè)或多個(gè)容器掛載卷

-w, --workdir="" 容器里面的工作目錄

•save(將映像保存到tar存檔文件,默認(rèn)情況下流式傳輸?shù)絪tdout)

  1. docker save IMAGE 

•search(搜索docker索引,尋找映像)

  1. docker search TERM 

•tag(將映像標(biāo)記到軟件庫(kù))

  1. docker tag [OPTIONS] IMAGE [REGISTRYHOST/][USERNAME/]NAME[:TAG] 

•top(查詢?nèi)萜鞯倪\(yùn)行中進(jìn)程)

  1. docker top CONTAINER [ps OPTIONS] 

•version(顯示docker版本信息)

 

  1. srijan@vboxtest:~$ sudo docker version  
  2. [sudo] password for srijan:   
  3. Client version: 1.0.1  
  4. Client API version: 1.12  
  5. Go version (client): go1.2.1  
  6. Git commit (client): 990021a  
  7. Server version: 1.0.1  
  8. Server API version: 1.12  
  9. Go version (server): go1.2.1  
  10. Git commit (server): 990021a 

 

6 結(jié)束語(yǔ)

我試著讓大家更加熟悉docker,但愿本文會(huì)幫助各位進(jìn)一步了解docker,并在自己的測(cè)試/生產(chǎn)環(huán)境中充分利用docker。

想了解更多信息,請(qǐng)參閱http://www.docker.com/。

http://www.howtoforge.com/manage-linux-containers-with-docker-on-ubuntu

責(zé)任編輯:林師授 來(lái)源: 51CTO
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)