Docker4-操作 Docker 容器

容器是 Docker 的另一個核心概念. 簡單來說, 容器是鏡像的一個運行實例. 所不同的是, 鏡像是靜態(tài)的只讀文件, 而容器帶有運行時需要的可寫文件層.

創(chuàng)建容器

新建容器
可以使用 docker create 命令新建一個容器, 例如:

docker create -it centos
//輸出信息
12f1c6f3f33eb80f35d0b0b4afb46745dd0e66f541db2f57f9dea58b45c92a02

我們使用 docker ps 命令可以查看容器, 注意默認(rèn)只能查看運行中的容器. 想要顯示所有容器, 需要指定-a參數(shù).docker ps參數(shù)

docker ps -a
//輸出信息
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES
12f1c6f3f33e        centos              "/bin/bash"         12 minutes ago      Created                                       serene_jones

使用 docker create 命令新建的容器處于停止?fàn)顟B(tài), 可以使用 docker start 命令來啟動它.

啟動容器
使用 docker start 命令來啟動一個已經(jīng)創(chuàng)建的容器, 例如我們啟動剛剛創(chuàng)建的 centos 容器:

docker start 12f1c6f3f33e
//輸出信息
12f1c6f3f33e

此時, 通過 docker ps 命令查看一個運行中的容器:

docker ps
//輸出信息
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
12f1c6f3f33e        centos              "/bin/bash"         About a minute ago   Up 10 seconds                           brave_khorana

創(chuàng)建并啟動容器
除了創(chuàng)建容器后通過 start 命令來啟動, 也可以直接新建并啟動容器. 所需要的命令主要為 docker run, 等價于先執(zhí)行 docker create 命令, 再執(zhí)行 docker start 命令.

docker run centos /bin/echo 'Hello Docker'
//輸出信息
Hello Docker

這跟在本地執(zhí)行 /bin/echo 'Hello Docker' 幾乎感覺不出任何區(qū)別.

當(dāng)利用 docker run 來創(chuàng)建并啟動容器時, Docker 在后臺運行的標(biāo)準(zhǔn)包括:

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

守護(hù)態(tài)運行
更多的時候, 需要讓 Docker 容器在后臺以守護(hù)態(tài)形式運行. 此時可以通過添加 -d 參數(shù)來實現(xiàn).

docker run -d centos /bin/sh -c "while true; do echo Hello world; sleep 1; done"
//輸出信息
936c08c3a4e89a3f156e0025abab28224bf78511ce9d9d1d57dd9706042a5b34

此時, 要獲取容器的輸出信息, 可以使用 docker logs 命令

docker logs 936c08c3a4e
//輸出信息
Hello world
Hello world
Hello world
Hello world
...

終止容器

可以使用 docker stop 來終止一個運行中的容器. 該命令的格式為 docker stop [-t|--time[=10]] [CONTAINER...]
首先向容器發(fā)送 SIGTERM 信號, 等待一段超時時間(默認(rèn)為10秒)后, 在發(fā)送 SIGKILL 信號來終止容器:

docker stop 936c08c3a4e
//輸出信息
936c08c3a4e

docker kill 命令會直接發(fā)送 SIGKILL 信號來強行終止容器.


進(jìn)入容器

在使用 -d 參數(shù)時, 容器啟動后會進(jìn)入后臺, 用戶無法看到容器中的信息, 也無法進(jìn)入操作.

這個時候如果需要進(jìn)入容器進(jìn)行操作, 有多種方法, 包括官方的 attach 或 exec 命令, 以及第三方的 nsenter 工具等.

attach 命令
attach 是Docker 自帶的命令, 命令格式為:

docker attach [OPTIONS] CONTAINER

這里就不做多介紹了, 因為使用 attach 命令有時候并不方便. 當(dāng)多個窗口同時用 attach 命令連接到同一個容器的時候, 所有窗口都會同步顯示. 當(dāng)某個窗口因為命令阻塞時, 其他窗口也無法執(zhí)行操作了.

exec 命令
Docker 從1.3.0 版本起提供了一個更加方便的 exec 命令, 可以在容器內(nèi)直接執(zhí)行任意命令.

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

我們實戰(zhàn)一下進(jìn)入一個容器, 可以先用 docker ps 命令查看一下我們有哪些容器在運行. 然后進(jìn)入容器:

docker exec -it 65712e2397cd /bin/bash
[root@65712e2397cd /]#

可以看到, 一個 bash 終端打開了, 在不影響容器內(nèi)其他應(yīng)用的前提下, 用戶可以很容易與容器進(jìn)行交互.

注意: 通過制定 -it 參數(shù)來保持標(biāo)準(zhǔn)輸入打開, 并且分配一個偽終端. 通過 exec 命令對容器執(zhí)行操作是最為推薦的方式.

nsenter 工具
請自行谷歌


刪除容器

可以使用 docker rm 命令來刪除處于終止或退出狀態(tài)的容器, 命令格式為:

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

實戰(zhàn)

docker rm 056b99544369
//輸出信息
056b99544369

導(dǎo)入和導(dǎo)出容器

導(dǎo)出容器
導(dǎo)出容器是指導(dǎo)出一個已經(jīng)創(chuàng)建的容器到一個文件, 不管此時這個容器是否處于運行狀態(tài), 可以使用 docker export 命令, 命令格式為:

docker export [OPTIONS] CONTAINER

實戰(zhàn)

//姿勢1
docker export -o test_1.tar 37c0d18cfc09
//姿勢2
docker export 37c0d18cfc09 > test_2.tar
//查看一下
ls
test_1.tar  test_2.tar

之后, 可以將導(dǎo)出的 tar 文件傳輸?shù)狡渌麢C器上, 然后再通過導(dǎo)入命令導(dǎo)入到系統(tǒng)中, 從而實現(xiàn)容器的遷移.

導(dǎo)入容器
導(dǎo)出的文件可以使用 docker import 命令導(dǎo)入變成鏡像.
注意: 導(dǎo)出的容器, 再導(dǎo)入的時候編程了鏡像

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

下面將導(dǎo)出的test_1.tar 文件導(dǎo)入到系統(tǒng)中.

docker import -m "測試" test_1.tar test:centos
//輸出信息
sha256:5c95f5df305a4379e9dd0cf0539ab51b8ac0479b474a05d59d7a1495db92e08b

我們查看一下本地鏡像, 看一下是否成功導(dǎo)入了

docker images
//輸出信息
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
test                centos              5c95f5df305a        About a minute ago   193 MB

之前我們也說過使用 docker load 命令來導(dǎo)入一個鏡像文件, 與 docker import 命令十分相似.

實際上, 既可以使用 docker load 命令來導(dǎo)入鏡像存儲文件到本地鏡像庫, 也可以使用 docker import 命令來導(dǎo)入一個容器快照到本地鏡像庫.

這兩者的區(qū)別在于容器快照文件將丟棄所有的歷史記錄和元數(shù)據(jù)信息(即僅保存容器當(dāng)時快照狀態(tài)), 而鏡像存儲文件將保存完整記錄, 體積也更大. 此外, 從容器快照文件導(dǎo)入時可以重新指定標(biāo)簽等元數(shù)據(jù)信息.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颊埃,一起剝皮案震驚了整個濱河市饱溢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌码泞,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幅聘,死亡現(xiàn)場離奇詭異凡纳,居然都是意外死亡,警方通過查閱死者的電腦和手機帝蒿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門荐糜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人葛超,你說我怎么就攤上這事暴氏。” “怎么了巩掺?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵偏序,是天一觀的道長。 經(jīng)常有香客問我胖替,道長研儒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任独令,我火速辦了婚禮端朵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘燃箭。我一直安慰自己冲呢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布招狸。 她就那樣靜靜地躺著敬拓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪裙戏。 梳的紋絲不亂的頭發(fā)上乘凸,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機與錄音累榜,去河邊找鬼营勤。 笑死,一個胖子當(dāng)著我的面吹牛壹罚,可吹牛的內(nèi)容都是我干的葛作。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼猖凛,長吁一口氣:“原來是場噩夢啊……” “哼赂蠢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起形病,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤客年,失蹤者是張志新(化名)和其女友劉穎霞幅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體量瓜,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡司恳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绍傲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扔傅。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖烫饼,靈堂內(nèi)的尸體忽然破棺而出猎塞,到底是詐尸還是另有隱情,我是刑警寧澤杠纵,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布荠耽,位于F島的核電站,受9級特大地震影響比藻,放射性物質(zhì)發(fā)生泄漏铝量。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一银亲、第九天 我趴在偏房一處隱蔽的房頂上張望慢叨。 院中可真熱鬧,春花似錦务蝠、人聲如沸拍谐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轩拨。三九已至,卻和暖如春院喜,著一層夾襖步出監(jiān)牢的瞬間气嫁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工够坐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人崖面。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓元咙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親巫员。 傳聞我的和親對象是個殘疾皇子庶香,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

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

  • 0x01 核心概念 Docker鏡像類似于虛擬機鏡像,可以理解為一個面向Docker引擎的只讀模板简识,包含了文件系統(tǒng)...
    閑云逸心閱讀 4,705評論 0 9
  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件赶掖?Google Compute Engi...
    ahohoho閱讀 15,511評論 15 147
  • 一感猛,小王對于容器的困惑 小王剛開始學(xué)習(xí)Docker的時候,找資料在網(wǎng)上看到最多的是Docker的好處奢赂。比如: 1陪白、...
    架構(gòu)師小秘圈閱讀 8,427評論 0 24
  • 一、Docker 簡介 Docker 兩個主要部件:Docker: 開源的容器虛擬化平臺Docker Hub: 用...
    R_X閱讀 4,381評論 0 27
  • 突然膳灶,日光傾瀉而下咱士,好像突然回到了某個夢境的片段,感動得說不出話來轧钓。
    vvan_s閱讀 685評論 0 51