分布式進階(二)Ubuntu 14.04下安裝Dockr圖文教程(二)

      網(wǎng)友投稿 704 2025-04-01

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

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

      ?通過docker?commit(提交)命令

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

      目前并不推薦docker提交方法,因為借助Docker文件進行構(gòu)建要靈活得多、強大得多,但為了力求完整起見,我會向你演示提交方法。

      之后,我將重點介紹推薦的Docker映像構(gòu)建方法:編寫Docker文件,然后使用docker構(gòu)建命令。

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

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

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

      docker?run?-i?-t?ubuntu?/bin/bash

      root@73527b8b4261:/#

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

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

      sudo?apt-get?install?apache2

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

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

      exit

      docker?commit?73527b8b4261?srijan/apache2?8ce0ea7a1528

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

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

      docker?ps?-l?-q

      它會得出73527b8b4261

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

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

      srijan@vboxtest:~$?docker?images?srijan/apache2

      REPOSITORY??????????TAG?????????????????IMAGE?ID????????????CREATED?????????????VIRTUAL?SIZE

      srijan/apache2??????8ce0ea7a1528????????741155868ac8????????6?minutes?ago???????207.2?MB

      srijan@vboxtest:~$

      注意:這里的8ce0ea7a1528是我在保存容器時所使用的標記名稱;

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

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

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

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

      它會給出結(jié)果:

      f0367362eb405c513ac002b5cf172a2c0bc6c8212eab91c613f9ee611cf92fec

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

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

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

      srijan@vboxtest:~$?docker?inspect?srijan/apache2:webserver

      [{

      "Architecture":?"amd64",

      "Author":?"Srijan?Kishore",

      "Comment":?"A?new?custom?image",

      "Config":?{

      "AttachStderr":?false,

      ......................................................................

      "Parent":?"ef83896b7fb99b00b9e0e6ac943826386e7edcef11a3a2f58b42011ab4a4e683",

      "Size":?14463026

      }

      ]srijan@vboxtest:~$

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

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

      分布式進階(二)Ubuntu 14.04下安裝Dockr圖文教程(二)

      Docker文件使用基本的特定領(lǐng)域語言(DSL),以及用于構(gòu)建Docker映像的指令。然后,我們使用docker構(gòu)建命令,通過Docker文件里面的指令來構(gòu)建新的映像。

      Docker公司的開發(fā)團隊還在此發(fā)布了Docker文件教程(http://www.docker.io/learn/dockerfile/),可以幫助大家學會如何構(gòu)建Docker文件。

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

      mkdir?kishore

      cd?kishore

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

      vi?Dockerfile

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

      FROM?ubuntu:12.04

      MAINTAINER?Srijan?Kishore?

      RUN?apt-get?-qq?update

      RUN?apt-get?-qqy?install?apache2

      現(xiàn)在打開定制的容器,請使用這個命令:

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

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

      [sudo]?password?for?srijan:

      Sending?build?context?to?Docker?daemon??2.56?kB

      Sending?build?context?to?Docker?daemon

      Step?0?:?FROM?ubuntu:12.04

      Pulling?repository?ubuntu

      ea7d6801c538:?Download?complete

      511136ea3c5a:?Download?complete

      65b7e9ccb809:?Download?complete

      f8dd6bd14f58:?Download?complete

      a343823119db:?Download?complete

      --->?ea7d6801c538

      Step?1?:?MAINTAINER?Srijan?Kishore?

      --->?Running?in?a6135f405eb4

      --->?be97c22efa82

      Removing?intermediate?container?a6135f405eb4

      ..................................................................................

      Removing?intermediate?container?5765c09b530f

      Successfully?built?634855a43331

      srijan@vboxtest:~/kishore$

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

      sudo?docker?images?srijan/custom1

      REPOSITORY???TAG?????????IMAGE?ID??????CREATED???????VIRTUAL?SIZE

      srijan/custom1???latest?????????634855a43331???About?a?minute?ago???277.4?MB

      srijan@vboxtest:~/kishore$

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

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

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

      主機名稱的更改

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

      我會使用:

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

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

      root@server1:/#?hostname?-f

      server1.example.com

      root@server1:/#

      Docker其它的實用命令集錦

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

      docker?pull?ubuntu

      ?commit(commit用于保存容器)

      docker?commit?73527b8b4261?srijan/apache2?8ce0ea7a1528

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

      docker?cp?CONTAINER:PATH?HOSTPATH

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

      ?start和stop容器:

      docker?start?4386fb97867d

      docker?stop?4386fb97867d

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

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

      docker?export?4386fb97867d?>?latest.tar

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

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

      從本地文件導入:

      通過pipe和stdin導入到docker。

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

      從本地目錄導入:

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

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

      docker?history?[OPTIONS]?IMAGE

      sudo?docker?history?ea7d6801c538

      ?images(它會顯示映像)

      docker?images?[OPTIONS]?[NAME]

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

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

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

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

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

      ?info(顯示整個系統(tǒng)的信息)

      srijan@vboxtest:~$?sudo?docker?info

      Containers:?20

      Images:?65

      Storage?Driver:?aufs

      Root?Dir:?/var/lib/docker/aufs

      Dirs:?105

      Execution?Driver:?native-0.2

      Kernel?Version:?3.13.0-30-generic

      WARNING:?No?swap?limit?support

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

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

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

      docker?kill?[OPTIONS]?CONTAINER?[CONTAINER...]

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

      docker?login?localhost:8080

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

      ?logs(讀取容器的日志)

      docker?logs?CONTAINER

      ?ps(列出容器)

      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)建的容器,包括非運行中的容器。

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

      docker?push?NAME[:TAG]

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

      docker?restart?[OPTIONS]?CONTAINER?[CONTAINER...]

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

      docker?rm?[OPTIONS]?CONTAINER?[CONTAINER...]

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

      docker?rmi?IMAGE?[IMAGE...]

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

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

      它有下列選項:

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

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

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

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

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

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

      -e,?--env=[]?設(shè)置環(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=""?內(nèi)存限制(格式:,其中unit?=?b,?k,?m?or?g)

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

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

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

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

      'container:':重復使用另一個容器的網(wǎng)絡(luò)堆棧

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

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

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

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

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

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

      --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)

      docker?save?IMAGE

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

      docker?search?TERM

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

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

      ?top(查詢?nèi)萜鞯倪\行中進程)

      docker?top?CONTAINER?[ps?OPTIONS]

      ?version(顯示docker版本信息)

      srijan@vboxtest:~$?sudo?docker?version

      [sudo]?password?for?srijan:

      Client?version:?1.0.1

      Client?API?version:?1.12

      Go?version?(client):?go1.2.1

      Git?commit?(client):?990021a

      Server?version:?1.0.1

      Server?API?version:?1.12

      Go?version?(server):?go1.2.1

      Git?commit?(server):?990021a

      如果系統(tǒng)中還不存在?Fedora?Docker?鏡像,這個命令會自動下載它,然后啟動這個?Fedora?的?Docker?容器。

      上面的命令會立即啟動?Ubuntu?container?容器(這是一個完美的容器!),然后它會提供一個?shell?提示符運行環(huán)境給你。現(xiàn)在開始你可以通過這個沙箱環(huán)境訪問一個完整的?Ubuntu?系統(tǒng)了。

      輸入“exit”命令退出?Docker?容器。

      導出鏡像

      sudo?docker?save?IMAGENAME?|?bzip2?-9?-c>img.tar.bz2

      導入鏡像

      sudo?bzip2?-d?-c?

      在主機節(jié)點上部署了Docker容器中,接著就需要虛擬出多個客戶端容器。

      3.Container?容器網(wǎng)絡(luò)設(shè)置

      Docker?使用?Linux?橋接技術(shù)與其他容器通信,以及連通外網(wǎng)。安裝完?Docker?后你應(yīng)該可以看到?docker0?這個網(wǎng)橋,這是?Docker?默認創(chuàng)建的。你創(chuàng)建的每個容器都會通過這個網(wǎng)橋連接到網(wǎng)絡(luò)。

      4.自定義?Linux?網(wǎng)橋

      如果你想自定義網(wǎng)橋,你可以執(zhí)行以下步驟。你可以在這個網(wǎng)橋后面分配一個子網(wǎng),并為這個子網(wǎng)分配地址。下面的命令會為?Docker?子網(wǎng)分配?10.0.0.0/24?地址段:

      sudo?apt-get?install?bridge-utils

      sudo?brctl?addbr?br0

      sudo?ifconfig?br0?10.0.0.1?netmask?255.255.255.0

      然后在?/etc/default/docker.io?文件的?DOCKER_OPTS?變量里添加“-b=br0”選項,并重啟?Docker?服務(wù):

      sudo?service?docker.io?restart

      到目前為止,任何創(chuàng)建的容器都會連上?br0?網(wǎng)橋,它們的?IP?地址會從?10.0.0.0/24?中自動分配(譯注:在10.0.0.2到10.0.0.254之間隨機分配)。

      其他自定義設(shè)置

      你可以通過?/etc/default/docker.io?文件的?DOCKER_OPTS?變量設(shè)置其他一些屬性:

      "-dns?8.8.8.8?-dns?8.8.4.4":?為容器指定?DNS?服務(wù)器。

      "-icc=false":?將容器與其他容器隔離出來

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

      想了解更多信息,請參閱

      http://www.docker.com/

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

      Docker Ubuntu 分布式

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:工業(yè)4.0與智能機器人會擦出怎樣的火花
      下一篇:前端低代碼開發(fā)平臺架構(gòu),構(gòu)建現(xiàn)代化應(yīng)用的未來
      相關(guān)文章
      亚洲91精品麻豆国产系列在线| 亚洲一区二区三区久久久久| 亚洲伊人tv综合网色| 一本久久a久久精品亚洲| 色窝窝亚洲av网| 美女视频黄免费亚洲| 亚洲国产亚洲片在线观看播放| 久久久久亚洲AV成人无码网站| 亚洲国产无套无码av电影| 亚洲欧洲∨国产一区二区三区 | 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲精品无AMM毛片| 亚洲欧美成人综合久久久| 亚洲精品第一国产综合亚AV| 亚洲中文字幕乱码AV波多JI| 亚洲欧美日韩中文字幕在线一区| 亚洲高清国产拍精品熟女| 精品国产亚洲AV麻豆| 亚洲日韩在线中文字幕第一页| 久久亚洲国产成人精品无码区| 亚洲精品无码av人在线观看| 久久亚洲AV午夜福利精品一区| 亚洲国产一区二区三区青草影视| 亚洲高清不卡视频| 亚洲一区二区久久| 亚洲欧美乱色情图片| 亚洲Av无码国产情品久久| 日日噜噜噜噜夜夜爽亚洲精品| 亚洲情综合五月天| 中文字幕亚洲综合久久| 亚洲中文字幕久在线| 亚洲熟伦熟女专区hd高清| 在线观看亚洲免费视频| 中文字幕亚洲一区| 亚洲视频精品在线| 亚洲一区二区三区乱码在线欧洲| 亚洲AV综合永久无码精品天堂| 亚洲成av人在片观看| 亚洲VA中文字幕不卡无码| 亚洲最大中文字幕| 亚洲av无码成人精品区一本二本|