Docker 容器 :
容器是Docker又一核心的概念,簡單來說,容器是獨立運作的一個或一組應用,以及它們的運作态環境。對應的,虛拟機可以了解為模拟運作的一整套作業系統(提供了運作态環境和其他系統環境)和跑在上面的應用。
接下來具體介紹如何管理一個容器,包括建立、啟動和停止等。
啟動容器有兩種方式:
(1.) 第一種是基于鏡像建立一個容器并啟動。
所需要的指令主要為docker run
執行個體:
-t:讓docker配置設定一個為終端(paseudo-tty)并綁定到容器的标準輸入上
-i:讓容器的标準輸入保持打開(即互動式),可以使用-name給容器起個形象的名稱。
在互動模式下,使用者可以通過所建立的終端來輸入指令
例如:
容器的核心為所執行的應用程式,所需要的資源都是應用程式運作所必需的。除此之外,并沒有其它的資源。可以在僞終端中利用ps或top來檢視程序資訊。
可見,容器中僅允許了指定的bash應用。這種特點使得Docker對資源使用率極高,是貨真價實的輕量級虛拟化。
退出容器的方式:
logout
exit
Ctrl+d
Ctrl+c
Ctrl -p + Ctrl -q
下面的指令是輸出一個hello world 消息,終止容器。
當利用docker run 來建立容器時 ,Docker在背景運作的标準操作包括:
1.檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載下傳
2.利用鏡像建立并啟動一個容器
3.配置設定一個檔案系統,并在隻讀的鏡像層外面挂載一層可讀寫層
4.從宿主主機配置的網橋接口中橋接一個虛拟接口到容器中去
5.從位址池配置一個IP位址給容器
6.執行使用者指定的應用程式
7.執行完畢後容器被終止
檢視容器:
(2.)第二種是将在終止狀态(stoped)的容器重新啟動。
可以利用docker start 指令,直接将一個已經終止的容器啟動運作
可以使用docker stop 來終止一個運作的容器。此外,當docker容器中指定的應用終結時,容器也自動
終止。終止狀态的容器可以用docker ps -a 指令看到。
重新開機一個容器:
二、守護程序方式去運作docker
1. 更多的時候,需要讓docker容器在背景以守護态(Daemonized)形式運作。此時,可以通過添加 -d 參數來實作。
例如:
或者
容器啟動後會傳回一個唯一的ID值,也可以通過docker ps 指令來檢視容器資訊
1.docker卡 run -d 運作提個新的容器,我們通過-d 指令來檢視容器資訊。
2.centos:centos6 是一個我們想要在内部運作指令的鏡像。
3./bin/sh -c 是我們想要在容器内部運作的指令
4.while true;do echo hello weibo;sleep 1; done這是一個簡單的腳本,我們僅僅是每秒列印一
次 hello world 一直到我們結束它。
2.用 docker inspect檢視容器的資訊
用docker inspect 檢視容器的IP位址
用docker inspect 檢視容器執行的程式
3.進入容器:
在使用-d參數時,容器啟動後會進入背景。某些時候需要進入容器進行操作,有很多種方法,包括使
用docker attach指令或nsenter指令。
(1.) 使用docker attach進入容器:
1.docker attache 允許我們進入背景程序
2.--sig-proxy=false 不使用容器轉發信号,允許我們使用Ctrl -c來退出,執行docker ps檢視在背景運作。
但是使用 attache 指令有時候并不友善。當多個視窗同時attach到同一個容器的時候,所有視窗都會
同步顯示。當某個視窗因指令阻塞時,其他視窗也無法執行操作了。
3.也可以執行docker exec進入運作的容器
(2.)使用nsenter進入容器:
安裝:nsenter工具在util-Linux包2.23版本後包含。如果系統中util-Linux包沒有該指令,可以按照
下面的方法從源碼安裝
#wget
https://www.kernel.org/pub/utils/util-linux/v2.24/util-linux-2.24.tar.gz#tar util-linux-2.24.tar.gz
#cd util-linux-2.24
# ./configure --without-ncurses&& make nsenter
# cp nsenter /usr/local/bin
注意:nsenter可以通路另一個程序的名字空間。nsenter要正常工作需要有root權限。
慶幸的是centos7使用的是util-linux-2.23,是以就直接使用系統提供的util-linux包了。
為了使用nsenter指令工具連接配接到容器,還需要找到容器的第一個程序的pid,可以通過下面的指令擷取到。
附:更簡單的,建議大家下載下傳 .bashrc_docker,并将内容放到 .bashrc中
#wget ~
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 可以進入容器或直接在容器内執行指令。
echo $(docker-pid<container>)
docker-enter<container>ls
三、容器的導入和導出以及删除容器
(1.)導出容器
如果要導出本地某個容器,可以 使用docker export指令。
(2.)導入容器
可以使用docker import 從容器快照檔案中再導入為鏡像
除此之外,也可以通過指定URL或者某個目錄來導入。例如:
#docker import
http://example.com/exampleimage.tgzexample/imagerepo注意:
docker load 和 docker import 的差別 :
使用者既可以使用docker load 來導入鏡像存儲檔案到本地鏡像庫,也可以使用docker import來導入一個
容器快照到本地鏡像庫。這兩者的差別在于容器快照檔案将丢棄所有的曆史記錄和中繼資料資訊(即僅保
存容器當時的快照狀态),而鏡像存儲檔案将儲存完整記錄,體積也要大。此外,從容器快照檔案導入
時可以重新指定标簽等中繼資料資訊。
删除容器:
可以使用 docker rm來删除一個處于終止狀态的容器
如果要删除一個運作中的容器,可以添加 -f 參數。docker會發送SIGKILL信号給容器。
批量删除多個容器: