精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

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

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

[[115623]]

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

1 首項附注

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

2 安裝

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

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

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

 

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

 

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

 

  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 準備外殼環境

現在,我將把我的user=srijan添加到docker組:

  1. sudo usermod -a -G docker srijan 

或者使用:

  1. sudo usermod -a -G docker $USER 

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

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

現在重啟服務,如下所示:

  1. sudo service docker.io restart 

4 容器管理

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

  1. docker pull ubuntu 

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

現在我將使用下面這個命令,登錄進入到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 

同樣,你可以有其他的操作系統容器,比如說。

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

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

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

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

它會創建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提交命令來創建映像

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

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

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

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

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

  1. apt-get install apache2 

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

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

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

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

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

  1. docker ps -l -q 

它會得出73527b8b4261

注意:73527b8b4261是你上一個創建的容器名稱,它與你的情況可能不一樣。

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

 

  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會創建相應的隨機名稱。

現在,我將保存定制的映像,如下所示:

  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公司的開發團隊還在此發布了Docker文件教程(http://www.docker.io/learn/dockerfile/),可以幫助大家學會如何構建Docker文件。

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

  1. mkdir kishore  
  2. cd kishore 

現在創建一個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 

 

現在打開定制的容器,請使用這個命令:

  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$ 

 

現在不妨看一下我們的新映像。為此,我們可以使用docker映像命令來實現。

 

  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$ 

 

這里,你會發現映像在默認情況下會安裝apache2。不妨反復核對一下:

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

現在,你可以進入新容器,而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(將文件/文件夾從容器的文件系統拷貝到主機路徑。路徑相對于文件系統的根目錄。)

比如:

  1. docker cp CONTAINER:PATH HOSTPATH 

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

•start和stop容器:

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

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

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

  1. docker export 4386fb97867d > latest.tar 

•import(創建一個空的文件系統映像,將打包文件[.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 只顯示數字編號

•info(顯示整個系統的信息)

 

  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(終止運行中的容器/發送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="" 只顯示編號或名稱之前創建的容器,包括非運行中的容器。

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

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

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

-q, --quiet=false 只顯示數字編號。

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

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

#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=[] 設置環境變量

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

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

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

-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" 為容器設置網絡模式

'bridge':為docker網橋上的容器創建新的網絡堆棧

'none':不為該容器創建任何網絡機制

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

'host':使用容器里面的主機網絡堆棧

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

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

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

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

--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存檔文件,默認情況下流式傳輸到stdout)

  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,并在自己的測試/生產環境中充分利用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

2022-09-22 16:21:43

開源GUI 應用

2021-10-02 10:15:19

UbuntuLinuxAnyDesk

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-06-29 06:39:21

Linuxdust命令du命令

2023-05-11 13:55:00

LinuxKdenlive編輯視頻

2022-01-09 15:00:16

LinuxAudacity聲音編輯器

2021-12-03 15:04:06

FlatpakLinux

2018-02-26 08:14:20

LinuxDocker容器

2018-07-31 10:20:54

WindowsDocker Linux
點贊
收藏

51CTO技術棧公眾號

欧美 国产 小说 另类| 国产精选一区二区| 波多野结衣久久久久| 日韩三级精品| 日韩欧美大尺度| 伊人av成人| 理论片中文字幕| 青草av.久久免费一区| 欧美激情免费视频| 日本二区在线观看| 免费观看性欧美大片无片| 欧美日韩国内自拍| 国产免费色视频| 亚洲 欧美 激情 小说 另类| 久久激情综合网| 青青草成人在线| 91成人福利视频| 国产欧美亚洲精品a| 日韩欧美精品在线视频| 人妻无码视频一区二区三区| 丁香花在线影院| 国产精品每日更新| 欧美日韩精品久久| 丰满人妻一区二区三区四区53| 日韩电影免费一区| 97精品国产97久久久久久| 国产性生活大片| 精品国产乱码久久久久久1区2匹| 亚洲高清福利视频| av在线网站免费观看| 欧美色片在线观看| 欧美特黄级在线| 大伊香蕉精品视频在线| 黄色网址在线免费观看| 国产欧美日韩激情| 久久综合九色99| 国模人体一区二区| 国产在线不卡视频| 国产精品久久久久久久7电影 | 国产a久久精品一区二区三区| 欧美一级高清大全免费观看| 亚洲第一中文av| 成人短视频app| 欧美视频免费在线| 91九色在线观看视频| 毛片在线网址| 亚洲一区二区三区四区五区中文| 中文字幕在线亚洲三区| 在线国产91| 国产精品九色蝌蚪自拍| 亚洲精品高清视频| 素人av在线| 国产精品午夜在线| 亚洲日本一区二区三区在线不卡| 成人午夜电影在线观看| 欧美国产丝袜视频| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 国产高清一级毛片在线不卡| 久久精品亚洲精品国产欧美kt∨| 欧美日韩亚洲综合一区二区三区激情在线| 五十路在线视频| 97久久人人超碰| 欧美一级爽aaaaa大片| 欧美人体大胆444www| 久久先锋影音av鲁色资源网| 欧美一区二区视频在线| 99se视频在线观看| 中文字幕五月欧美| 中国女人做爰视频| 成人黄色动漫| 色欲综合视频天天天| caopor在线视频| 日韩av黄色| 日韩免费看网站| 男男做爰猛烈叫床爽爽小说| 蜜桃一区二区三区| 一区二区成人精品| 手机在线免费看毛片| 欧美三级黄美女| 欧洲亚洲妇女av| 888奇米影视| 国产91精品露脸国语对白| 国产一区自拍视频| 大地资源中文在线观看免费版| 国产精品欧美经典| 91亚洲精品国产| 在线看片国产福利你懂的| 欧美日韩一区小说| 亚洲熟妇一区二区| 影视先锋久久| 欧美成人国产va精品日本一级| 日韩乱码在线观看| 免费日本视频一区| 成人免费在线看片| 国产黄色片在线播放| 亚洲另类春色国产| 成年人视频在线免费| 91成人短视频在线观看| 日韩精品999| 亚洲综合久久av一区二区三区| 亚洲国产美女 | 久久伊人影院| 日韩av一区二区在线| 三区四区在线观看| 亚洲国产清纯| 成人网在线免费观看| 欧美视频一二区| 国产精品久久久久久亚洲毛片 | 日韩精品亚洲专区| 国产成人av一区二区三区| 韩日视频在线| 午夜精品免费在线观看| 999精彩视频| 国产精品久av福利在线观看| 亚洲图片欧美日产| 国产无套粉嫩白浆内谢| 国产在线播放一区三区四| 欧美日韩精品久久久免费观看| 人人澡人人添人人爽一区二区| 欧美在线免费观看视频| 成人在线视频免费播放| 午夜精品影院| 91麻豆国产语对白在线观看| 国产小视频在线观看| 亚洲高清免费在线| 一本之道在线视频| 国产精品久久久久无码av| 国产va免费精品高清在线| 免费观看国产视频| 夜夜精品视频一区二区| 天美一区二区三区| 日韩理论电影大全| 国产精品国产亚洲伊人久久 | 国产精品毛片aⅴ一区二区三区| 亚洲欧美在线第一页| 国产成人精品一区二三区| 国产激情偷乱视频一区二区三区| 亚洲免费视频一区| 日本综合视频| 在线视频中文亚洲| 国产亚洲欧美日韩高清| 久久久夜色精品亚洲| 99999精品视频| 亚洲第一福利专区| 国产不卡在线观看| аⅴ资源新版在线天堂| 欧美伊人久久久久久久久影院| 亚洲国产无码精品| 久久久亚洲人| 色一情一乱一伦一区二区三区丨| av有声小说一区二区三区| 亚洲欧美在线x视频| 午夜精品久久久久久久蜜桃| 国产人久久人人人人爽| 手机看片福利日韩| 99re久久最新地址获取| 成人女保姆的销魂服务| 黄色网页在线免费观看| 日韩网站在线看片你懂的| 久久久久成人片免费观看蜜芽| 成人视屏免费看| 日本xxxxxxxxxx75| 爽爽窝窝午夜精品一区二区| 国产ts一区二区| 亚洲成a人v欧美综合天堂麻豆| 91精品视频网| 久久久综合久久久| 91最新地址在线播放| 成人免费视频久久| 99久久亚洲精品| 不卡一卡2卡3卡4卡精品在| 波多野一区二区| 精品在线小视频| 一级特黄特色的免费大片视频| 亚洲青青青在线视频| 男女性杂交内射妇女bbwxz| 裸体一区二区| 特色特色大片在线| 久久这里只有精品一区二区| 国产成人一区三区| 中文字幕免费高清电视剧网站在线观看 | 欧美男插女视频| 天堂网av2014| 欧美日韩中文字幕精品| 国产性生活网站| 久久久精品一品道一区| 日韩av片免费观看| 国产日韩欧美一区在线| 亚洲欧美日产图| 成人盗摄视频| 国产精品日韩电影| 久草免费在线色站| 国产香蕉精品视频一区二区三区 | 成人在线观看免费视频| 欧美大片网站在线观看| 精品无吗乱吗av国产爱色| 欧美一级日韩一级| 色老头在线视频| 亚洲午夜电影网| 天天干天天操天天拍| 成人福利在线看| 青青草久久伊人| 香蕉久久夜色精品| 欧美国产视频一区| 日韩中文字幕高清在线观看| 国产偷国产偷亚洲高清97cao| 精品69视频一区二区三区| 性欧美xxxx视频在线观看| 超碰超碰在线| 最新中文字幕亚洲| 午夜视频福利在线| 欧美成人午夜电影| 亚洲天堂中文网| 色综合久久综合| 国产精品19乱码一区二区三区| 国产精品你懂的| 丰满少妇一区二区| 成人动漫一区二区三区| 国产黄色一区二区三区| 美女网站视频久久| 99热成人精品热久久66| 亚洲免费观看| 97干在线视频| 欧美日本一区二区视频在线观看 | 久久国产视频网| 波多野结衣天堂| 久久福利影视| 99999精品视频| 夜夜夜久久久| 成人免费观看cn| 一区视频在线看| 日韩久久久久久久久久久久| 91精品国产麻豆国产在线观看| 亚欧精品在线| 成人网18免费网站| 久久久亚洲综合网站| 色综合久久中文| 久久久水蜜桃| 久久最新网址| 三区精品视频| 成人网18免费网站| 一区二区视频国产| 性xxxx欧美老肥妇牲乱| 亚洲一区二区三区免费看| 日韩欧美高清在线播放| 亚洲精品高清视频| 国产高清一区二区| 综合色婷婷一区二区亚洲欧美国产| 久久影院一区| 在线视频亚洲自拍| 欧美不卡在线| 国产欧美久久久久| 国产亚洲网站| 国产一级不卡毛片| 老司机午夜精品| 中文字幕国产高清| 国产不卡视频一区| 性囗交免费视频观看| 91免费视频观看| 老头老太做爰xxx视频| 国产精品久久国产精麻豆99网站| 四虎影院中文字幕| 在线播放日韩| 久久久成人精品视频| 韩国中文免费在线视频| 中文字幕少妇一区二区三区| 麻豆影院在线| 欧美交受高潮1| 一区二区三区四区日本视频| 国产精品久久久久久久久久ktv| 日韩精品第二页| 99热99热| 国产精品美女久久久久久不卡 | 性久久久久久久久久久| 久久影院电视剧免费观看| 精品日韩在线视频| 一区二区三区精密机械公司| 成人毛片在线播放| 欧美日韩夫妻久久| 狠狠躁日日躁夜夜躁av| 一区二区国产精品视频| 丝袜在线观看| 国产成人亚洲精品| 亚洲视频三区| 日韩欧美三级电影| 午夜视频精品| 久久久久免费精品| 国产老肥熟一区二区三区| www.超碰97| 亚洲日本va午夜在线影院| 日韩欧美亚洲一区二区三区| 欧美网站一区二区| 日本波多野结衣在线| 中文字幕亚洲无线码a| 丰满大乳少妇在线观看网站| 国产精品久久久久久久久| 国产精品乱战久久久| 在线视频91| 久久久久看片| 国产又粗又猛又色| 成人欧美一区二区三区1314| 成人免费a视频| 日韩一卡二卡三卡国产欧美| 国产高清在线| 欧美中文字幕在线视频| 视频一区在线| 亚洲欧美丝袜| 午夜在线视频一区二区区别 | 国产精品久久久网站| 黄瓜视频免费观看在线观看www| 亚洲专区一区| 无码人妻一区二区三区在线| 亚洲日本丝袜连裤袜办公室| 中文字幕第315页| 亚洲欧美另类中文字幕| av2020不卡| 97超级碰碰| 亚洲a在线视频| 色婷婷成人在线| 国产亚洲一区二区在线观看| 日本在线观看视频网站| 91精品国产综合久久精品麻豆| 国产香蕉视频在线看| 欧美制服第一页| 欧美挤奶吃奶水xxxxx| 男人添女荫道口女人有什么感觉| 国产在线视频一区二区三区| 国产日韩精品中文字无码| 色婷婷久久99综合精品jk白丝| 天天射天天色天天干| 欧美激情在线有限公司| 精品网站999| 青少年xxxxx性开放hg| 久久99精品网久久| 国产极品视频在线观看| 欧美在线观看18| 在线视频91p| 国产欧美精品久久久| 日韩成人综合| 亚洲欧美国产中文| 国产精品拍天天在线| 一本色道久久综合熟妇| 精品国产一区二区三区久久久| a屁视频一区二区三区四区| 五月天国产一区| 美国欧美日韩国产在线播放| 九九热视频在线免费观看| 欧美福利视频导航| 八戒八戒神马在线电影| 亚洲最大的成人网| 欧美在线亚洲综合一区| 台湾佬美性中文| 婷婷亚洲久悠悠色悠在线播放| 天天操天天干天天舔| 欧美中文在线观看国产| 国产中文字幕一区二区三区| 污片在线免费看| ...xxx性欧美| 亚洲男人天堂久久| 97精品国产aⅴ7777| 欧美极品中文字幕| 亚洲欧美日韩精品一区| 一区二区三区美女视频| 午夜黄色小视频| 国产精品白丝jk喷水视频一区| 日本不卡免费一区| 日本xxxx免费| 婷婷国产在线综合| 成人欧美一区| 亚洲一区二区三区777| 亚洲精品1区| 国产真人做爰视频免费| 欧美一区二视频| 成年人在线网站| 一区二区三区四区五区视频| 国产精品一区二区91| 久草国产精品视频| 中文字幕国产亚洲| 日韩在线观看中文字幕| 免费日韩中文字幕| 亚洲欧美另类久久久精品2019| 日本高清视频www| 国产视频观看一区| 亚洲激情一区| 香蕉久久久久久久| 欧美电影免费观看完整版| 精品3atv在线视频| 九一免费在线观看| 国产亚洲精品精华液| 精品久久人妻av中文字幕| 人九九综合九九宗合| 欧美成人精品| 国产精品密蕾丝袜| 日韩精品一区二区三区四区| 91精品影视| 国产免费一区视频观看免费| 欧美人与禽猛交乱配| 美日韩免费视频| 国产成都精品91一区二区三| 青青艹在线观看|