Docker學習筆記

GitBook Docker —— 從入門到實踐

一張圖總結(jié) Docker 的命令

一張圖總結(jié) Docker 的命令

運行容器

sudo docker run -ti ubuntu:14.04 /bin/bash

14.04是tag始藕,用于區(qū)分框往,不指定時默認使用latesttag信息
啟動后attache進容器耸携,運行/bin/bash
-t 選項讓Docker分配一個偽終端(pseudo-tty)并綁定到容器的標準輸入上文判, -i則讓容器的標準輸入保持打開绘闷。加上-d表示后臺運行物赶。
docker psdocker logs [container ID or NAMES]查看運行容器和日志

運行時白指,后臺執(zhí)行的標準操作包括:

  • 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
  • 利用鏡像創(chuàng)建并啟動一個容器
  • 分配一個文件系統(tǒng)酵紫,并在只讀的鏡像層外面掛載一層可讀寫層
  • 從宿主主機配置的網(wǎng)橋接口中橋接一個虛擬接口到容器中去
  • 從地址池配置一個 ip 地址給容器
  • 執(zhí)行用戶指定的應用程序
  • 執(zhí)行完畢后容器被終止

進入容器

docker attach或 nsenter 工具告嘲。
*注意:當多個窗口同時 attach 到同一個容器的時候,所有窗口都會同步顯示奖地。當某個窗口因命令阻塞時,其他窗口也無法執(zhí)行操作了橄唬。

終止容器

可以使用 docker stop 來終止一個運行中的容器。
此外参歹,當Docker容器中指定的應用終結(jié)時仰楚,容器也自動終止。 例如對于上一章節(jié)中只啟動了一個終端的容器犬庇,用戶通過 exit 命令或 Ctrl+d 來退出終端時僧界,所創(chuàng)建的容器立刻終止.

啟動已終止容器

可以利用 docker start 命令,直接將一個已經(jīng)終止的容器啟動運行臭挽∥娼螅或者docker restart重啟容器。

輕量級的虛擬化

容器的核心為所執(zhí)行的應用程序欢峰,所需要的資源都是應用程序運行所必需的葬荷。除此之外涨共,并沒有其它的資源〕桎觯可以在偽終端中利用 pstop 來查看進程信息举反。

root@ba267838cc1b:/# ps
  PID TTY          TIME CMD
    1 ?        00:00:00 bash
   11 ?        00:00:00 ps

可見,容器中僅運行了指定的 bash 應用扒吁。這種特點使得 Docker 對資源的利用率極高照筑,是貨真價實的輕量級虛擬化。

commit提交修改

可以在里面做一些更改瘦陈,如
sudo apt-get install something
然后commit得到一個新的鏡像

sudo docker commit -m "I install a cool thing" -a "liuyc" 0b2616b0e5a8 ouruser/sinatra:v2

根據(jù)當前dockerfile創(chuàng)建鏡像

commit的方式容易創(chuàng)建鏡像但不利于分享,于是用Dockerfile

FROM pdr2.qa:5043/debug/tomcat6
ADD xxxx.conf /usr/local/tomcat/conf/xxxx.conf

# 聽云Server探針的運行和配置文件添加到tomcat根目錄
# catalina.sh里加入了-javaagent參數(shù)用于tomcat啟動時運行聽云探針
ADD tingyun  /usr/local/tomcat/tingyun
COPY catalina.sh /usr/local/tomcat/bin/catalina.sh

EXPOSE 8888
RUN /usr/bin/ssh-keygen -A
RUN echo 'root:oak' | chpasswd
EXPOSE 22

# 設(shè)置Java環(huán)境變量
ENV PATH ${PATH}:${JAVA_HOME}/bin/
ENV LANG en_US.UTF-8
# 將聽云證書添加到JDK證書中波俄,詳情可見key.sh
ADD tingyunCert /tmp
WORKDIR /tmp
RUN sh key.sh

CMD  /usr/sbin/sshd && chmod +x /usr/local/tomcat/bin/catalina.sh &&  /usr/local/tomcat/bin/catalina.sh run

#注釋晨逝,FROM指定鏡像基礎(chǔ),RUN后的命令會在創(chuàng)建過程中執(zhí)行
ADD 命令復制本地文件到鏡像懦铺;用 EXPOSE 命令來向外部開放端口捉貌;用 CMD 命令來描述容器啟動后運行的程序等。
CMD也可以寫成這樣的格式CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

docker build -t tomcat6-tingyun .  # 用當前路徑下的dockerfile創(chuàng)建鏡像
docker images #查看鏡像
docker tag f358d5297fb7 pdr2.qa:5043/debug/tomcat6-tingyun  #將鏡像重命名
docker push pdr2.qa:5043/debug/tomcat6-tingyun # 推到遠程

Dockfile 中的指令被一條一條的執(zhí)行冬念。每一步都創(chuàng)建了一個新的容器趁窃,在容器中執(zhí)行指令并提交修改(就跟之前介紹過的 docker commit 一樣)。當所有的指令都執(zhí)行完畢之后急前,返回了最終的鏡像 id醒陆。所有的中間步驟所產(chǎn)生的容器都被刪除和清理了。
*注意:一個鏡像不能超過 127 層

從本地文件導入

sudo cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04
docker images可以看到多了一個

存出鏡像

sudo docker save -o ubuntu_14.04.tar ubuntu:14.04

載入鏡像

可以使用 docker load 從導出的本地文件中再導入到本地鏡像庫裆针,例如
$ sudo docker load --input ubuntu_14.04.tar

$ sudo docker load < ubuntu_14.04.tar
這將導入鏡像以及其相關(guān)的元數(shù)據(jù)信息(包括標簽等)刨摩。

移除本地鏡像

docker rmi , 注意 docker rm 命令是移除容器
*注意:在刪除鏡像之前要先用 docker rm 刪掉依賴于這個鏡像的所有容器。

清理所有未打過標簽的本地鏡像

使用下面的命令可以清理所有未打過標簽的本地鏡像
$ sudo docker rmi $(docker images -q -f "dangling=true")
其中 -q 和 -f 是縮寫, 完整的命令其實可以寫著下面這樣世吨,是不是更容易理解一點澡刹?
$ sudo docker rmi $(docker images --quiet --filter "dangling=true")

nsenter 命令

安裝

nsenter 工具在 util-linux 包2.23版本后包含。 如果系統(tǒng)中 util-linux 包沒有該命令耘婚,可以按照下面的方法從源碼安裝罢浇。

$ cd /tmp; curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24;
$ ./configure --without-ncurses
$ make nsenter && sudo cp nsenter /usr/local/bin
使用

nsenter 可以訪問另一個進程的名字空間。nsenter 要正常工作需要有 root 權(quán)限沐祷。 很不幸嚷闭,Ubuntu 14.04 仍然使用的是 util-linux 2.20。安裝最新版本的 util-linux(2.24)版戈轿,請按照以下步驟:

$ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz; tar xzvf util-linux-2.24.tar.gz
$ cd util-linux-2.24
$ ./configure --without-ncurses && make nsenter
$ sudo cp nsenter /usr/local/bin

為了連接到容器凌受,你還需要找到容器的第一個進程的 PID,可以通過下面的命令獲取思杯。
PID=$(docker inspect --format "{{ .State.Pid }}" <container>)
通過這個 PID胜蛉,就可以連接到這個容器:
$ nsenter --target $PID --mount --uts --ipc --net --pid
下面給出一個完整的例子挠进。

$ sudo docker run -idt ubuntu
243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550
$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
243c32535da7        ubuntu:latest       "/bin/bash"         18 seconds ago      Up 17 seconds                           nostalgic_hypatia
$ PID=$(docker-pid 243c32535da7)
10981
$ sudo nsenter --target 10981 --mount --uts --ipc --net --pid
root@243c32535da7:/#

更簡單的,建議大家下載 .bashrc_docker誊册,并將內(nèi)容放到 .bashrc 中领突。

$ wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
$ echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc

這個文件中定義了很多方便使用 Docker 的命令,例如 docker-pid 可以獲取某個容器的 PID案怯;而 docker-enter 可以進入容器或直接在容器內(nèi)執(zhí)行命令君旦。

$ echo $(docker-pid <container>)
$ docker-enter <container> ls

運行DockerUI

docker run -d -p 9000:9000 --privileged -v /var/run/docker.sock:/var/run/docker.sock uifd/ui-for-docker

打開 http://<dockerd host ip>:9000

DockerUI
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嘲碱,隨后出現(xiàn)的幾起案子金砍,更是在濱河造成了極大的恐慌,老刑警劉巖麦锯,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恕稠,死亡現(xiàn)場離奇詭異,居然都是意外死亡扶欣,警方通過查閱死者的電腦和手機鹅巍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來料祠,“玉大人骆捧,你說我怎么就攤上這事∷枵溃” “怎么了敛苇?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長梧宫。 經(jīng)常有香客問我接谨,道長,這世上最難降的妖魔是什么塘匣? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任脓豪,我火速辦了婚禮,結(jié)果婚禮上忌卤,老公的妹妹穿的比我還像新娘扫夜。我一直安慰自己,他們只是感情好驰徊,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布笤闯。 她就那樣靜靜地躺著,像睡著了一般棍厂。 火紅的嫁衣襯著肌膚如雪颗味。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天牺弹,我揣著相機與錄音浦马,去河邊找鬼时呀。 笑死,一個胖子當著我的面吹牛晶默,可吹牛的內(nèi)容都是我干的谨娜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼磺陡,長吁一口氣:“原來是場噩夢啊……” “哼趴梢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起币他,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤坞靶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蝴悉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滩愁,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年辫封,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片廉丽。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡倦微,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出正压,到底是詐尸還是另有隱情欣福,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布焦履,位于F島的核電站拓劝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嘉裤。R本人自食惡果不足惜郑临,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屑宠。 院中可真熱鬧厢洞,春花似錦、人聲如沸典奉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卫玖。三九已至公你,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間假瞬,已是汗流浹背陕靠。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工迂尝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人懦傍。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓雹舀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親粗俱。 傳聞我的和親對象是個殘疾皇子说榆,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Docker 學習目標: 掌握Docker基礎(chǔ)知識,能夠理解Docker鏡像與容器的概念 完成Docker安裝與啟...
    執(zhí)筆夢一場閱讀 3,240評論 2 10
  • 一基本概念 1. 什么是Docker ... 2. Docker的基本概念 鏡像(Image) 是一個只讀模板寸认,用...
    wesper_428f閱讀 542評論 0 0
  • 近來發(fā)現(xiàn)docker越來越受歡迎了签财,而且看起來,docker的熱度還遠沒有到達頂峰偏塞,或許在這個云服務時代的大背景下...
    盡情的嘲笑我吧閱讀 519評論 0 5
  • 一唱蒸、window系統(tǒng)下安裝 win7、win8 系統(tǒng) win7灸叼、win8 等需要利用 docker toolbox...
    快樂程序員閱讀 1,030評論 0 1
  • 原文地址:LoveDev Docker相對于傳統(tǒng)意義上的虛擬機最大的區(qū)別就在于傳統(tǒng)虛擬機是虛擬出一套硬件后神汹,再在上...
    KevinLive閱讀 3,751評論 3 7