成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

[[115623]]

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

1 首項附注

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

2 安裝

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

2a 從官方的Ubuntu軟件庫來安裝

想安裝docker,請使用下列命令:

 

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

 

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

 

  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軟件庫安裝***的docker版本,運行這個命令:

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

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

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

  1. sudo usermod -a -G docker srijan 

或者使用:

  1. sudo usermod -a -G docker $USER 

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

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

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

  1. sudo service docker.io restart 

4 容器管理

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

  1. docker pull ubuntu 

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

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

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

僅僅為了確認,我將檢查容器的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)容器,比如說。

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

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

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

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

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

 

  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 構建我們自己的映像

構建Docker映像有兩種方法:

•通過docker commit(提交)命令

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

目前并不推薦docker提交方法,因為借助Docker文件進行構建要靈活得多、強大得多,但為了力求完整起見,我們會向你演示提交方法。之后,我將重點介紹推薦的Docker映像構建方法:編寫Docker文件,然后使用docker構建命令。

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

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

不妨先通過我們在過去使用的ubuntu映像來創(chuàng)建一個容器。

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

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

此外,我會將apache安裝在容器里面:

  1. apt-get install apache2 

我已啟動了容器,然后將Apache安裝在里面。現(xiàn)在,我準備將該容器用作Web服務器,所以我將它保存在當前狀態(tài)。

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

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

注意:這里的73527b8b4261是我的容器名稱;我為容器使用8ce0ea7a1528標記,你可以賦予任何標記名稱,也可以使用同一個名稱。

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

  1. docker ps -l -q 

它會得出73527b8b4261

注意:73527b8b4261是你上一個創(chuà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是我在保存容器時所使用的標記名稱;

注意:741155868ac8是該容器的映像編號;

注意:所有這些值與你的情況可能不一樣,因為在保存容器時,docker會創(chuàng)建相應的隨機名稱。

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

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

它會給出結果:

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

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

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

我們可以反復核對已提交的映像,如下所示:

 

  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:~$ 

 

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

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

#p#

4.2 用Docker文件構建映像

Docker文件使用基本的特定領域語言(DSL),以及用于構建Docker映像的指令。然后,我們使用docker構建命令,通過Docker文件里面的指令來構建新的映像。Docker公司的開發(fā)團隊還在此發(fā)布了Docker文件教程(http://www.docker.io/learn/dockerfile/),可以幫助大家學會如何構建Docker文件。

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

  1. mkdir kishore  
  2. cd kishore 

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

  1. vi Dockerfile 

并輸入內容,如下所示:

 

  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)在打開定制的容器,請使用這個命令:

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

它會得出如下結果:

 

  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映像命令來實現(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$ 

 

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

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

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

#p#

5 主機名稱的更改

假設你想更改主機名稱,或者你想有一個定制的主機稱,比如我這里的server1.example.com。

我會使用:

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

它會得出映像容器,如下所示:

 

  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的實用命令集錦

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

比如:

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

•commit(commit用于保存容器)

比如:

  1. docker commit 73527b8b4261 srijan/apache2 8ce0ea7a1528  

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

比如:

  1. docker cp CONTAINER:PATH HOSTPATH 

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

•start和stop容器:

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

其中的4386fb97867d是你的容器編號

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

  1. docker export 4386fb97867d > latest.tar 

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

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

從本地文件導入:

通過pipe和stdin導入到docker。

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

從本地目錄導入:

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

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

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

•images(它會顯示映像)

  1. docker images [OPTIONS] [NAME] 

它后面跟一些選項,如下所示:

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

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

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

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

•info(顯示整個系統(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(返回關于容器/映像的低級信息)

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

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

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

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

  1. docker login localhost:8080 

它會登錄到自托管注冊中心。

•logs(讀取容器的日志)

  1. docker logs CONTAINER 

•ps(列出容器)

  1. docker ps [OPTIONS]  

它有下列選項:

-a, --all=false 顯示所有容器。默認情況下只顯示運行中的容器。

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

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

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

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

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

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

--since="" 只顯示自編號或名稱以來創(chuàng)建的容器,包括非運行中的容器。

#p#

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

  1. docker push NAME[:TAG] 

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

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

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

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

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

  1. docker rmi IMAGE [IMAGE...] 

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

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

它有下列選項:

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

-c, --cpu-shares=0 處理器共享(相對權重)

--cidfile="" 將容器編號寫入到文件

-d, --detach=false 分離模式:在后臺運行容器,輸出新的容器編號

--dns=[] 設置自定義DNS服務器

--dns-search=[] 設置自定義DNS搜索域

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

--entrypoint="" 覆蓋映像的默認入口點

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

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

-h, --hostname="" 容器主機名稱

-i, --interactive=false   讓stdin保持開放,即便沒有連接

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

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

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

--name="" 為容器賦予名稱

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

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

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

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

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

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

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

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

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

--privileged=false 為該容器賦予擴展后的權限

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

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

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

-u, --user="" 用戶名稱或UID

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

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

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

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

  1. docker save IMAGE 

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

  1. docker search TERM 

•tag(將映像標記到軟件庫)

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

•top(查詢容器的運行中進程)

  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 結束語

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

想了解更多信息,請參閱http://www.docker.com/。

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

責任編輯:林師授 來源: 51CTO
相關推薦

2014-05-07 10:04:57

DockerLinux容器Ubuntu

2014-06-03 09:55:34

DockerLinux容器Ubuntu

2014-05-07 09:56:48

Docker管理Linux容器

2016-11-08 09:02:07

UbuntuGrafanaDocker

2021-10-02 10:15:19

UbuntuLinuxAnyDesk

2022-09-22 16:21:43

開源GUI 應用

2011-08-29 16:19:01

UbuntuRamDisk

2023-01-28 21:27:27

2019-04-28 10:00:11

UbuntuLinuxMySQL

2014-11-18 00:45:58

UbuntuLXC容器

2023-11-09 16:13:53

2018-09-10 08:20:16

Ubuntu LinuGitGitHub

2019-05-10 08:00:00

UKUUUbuntuLinux

2013-07-24 09:59:04

UbuntuDebianUnison

2021-12-03 15:04:06

FlatpakLinux

2021-06-29 06:39:21

Linuxdust命令du命令

2023-05-11 13:55:00

LinuxKdenlive編輯視頻

2022-01-09 15:00:16

LinuxAudacity聲音編輯器

2010-01-27 09:58:59

Linuxunix程序日志

2018-07-31 10:20:54

WindowsDocker Linux
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩综合精品 | 精品99久久久久久 | 久久性av | 亚洲精品9999 | 久久精品国产亚洲 | 欧美综合一区 | 精品国产乱码久久久久久闺蜜 | 午夜小电影| 国产乱码精品一区二区三区中文 | 国产精品久久久久久久久久 | 久久婷婷香蕉热狠狠综合 | 日韩精品免费视频 | 99国产精品99久久久久久粉嫩 | 羞羞午夜 | 免费精品视频在线观看 | 亚洲精品三级 | 国产精品成人一区二区三区夜夜夜 | 亚洲国产aⅴ精品一区二区 免费观看av | 一区二区精品 | 一级片在线观看 | 毛片毛片毛片毛片 | 在线观看视频91 | 国产成人精品久久二区二区91 | 一本色道精品久久一区二区三区 | 玩丰满女领导对白露脸hd | 日本午夜精品 | 综合国产第二页 | 中文av网站 | 欧美精品在线观看 | 久久99久久98精品免观看软件 | 免费精品一区 | 日韩欧美视频在线 | 国产黄色免费网站 | 一区二区三区国产精品 | 欧美日韩在线观看视频网站 | 粉嫩av在线 | 99pao成人国产永久免费视频 | 久久精品国产亚洲夜色av网站 | 日韩欧美中文 | 久久国产精品视频 | www.久久.com|