安裝與操作
1. 在Ubuntu中安裝Docker
更新ubuntu的apt源索引
sudo apt-get update
安裝包允許apt通過(guò)HTTPS使用倉(cāng)庫(kù)
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
添加Docker官方GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
設(shè)置Docker穩(wěn)定版?zhèn)}庫(kù)
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
添加倉(cāng)庫(kù)后箱残,更新apt源索引
sudo apt-get update
安裝最新版Docker CE(社區(qū)版)
sudo apt-get install docker-ce
檢查Docker CE是否安裝正確
sudo docker run hello-world
出現(xiàn)如下信息喳资,表示安裝成功
[圖片上傳失敗...(image-26449c-1539015815171)]
為了避免每次命令都輸入sudo音念,可以設(shè)置用戶權(quán)限果漾,注意執(zhí)行后須注銷重新登錄
sudo usermod -a -G docker $USER
2. 啟動(dòng)與停止
安裝完成Docker后奏路,默認(rèn)已經(jīng)啟動(dòng)了docker服務(wù)霉囚,如需手動(dòng)控制docker服務(wù)的啟停蝶念,可執(zhí)行如下命令
# 啟動(dòng)docker
sudo service docker start
# 停止docker
sudo service docker stop
# 重啟docker
sudo service docker restart
3. Docker鏡像操作
什么是Docker鏡像
Docker 鏡像是由文件系統(tǒng)疊加而成(是一種文件的存儲(chǔ)形式)翰蠢。最底端是一個(gè)文件引 導(dǎo)系統(tǒng)屎篱,即 bootfs服赎,這很像典型的 Linux/Unix 的引導(dǎo)文件系統(tǒng)葵蒂。Docker 用戶幾乎永遠(yuǎn)不會(huì)和 引導(dǎo)系統(tǒng)有什么交互。實(shí)際上重虑,當(dāng)一個(gè)容器啟動(dòng)后践付,它將會(huì)被移動(dòng)到內(nèi)存中,而引導(dǎo)文件系 統(tǒng)則會(huì)被卸載缺厉,以留出更多的內(nèi)存供磁盤鏡像使用永高。Docker 容器啟動(dòng)是需要一些文件的, 而這些文件就可以稱為 Docker 鏡像提针。
[圖片上傳失敗...(image-6e49c1-1539015815171)]
Docker 把應(yīng)用程序及其依賴命爬,打包在 image 文件里面。只有通過(guò)這個(gè)文件辐脖,才能生成 Docker 容器饲宛。image 文件可以看作是容器的模板。Docker 根據(jù) image 文件生成容器的實(shí)例嗜价。同一個(gè) image 文件艇抠,可以生成多個(gè)同時(shí)運(yùn)行的容器實(shí)例。
image 是二進(jìn)制文件久锥。實(shí)際開(kāi)發(fā)中家淤,一個(gè) image 文件往往通過(guò)繼承另一個(gè) image 文件,加上一些個(gè)性化設(shè)置而生成瑟由。舉例來(lái)說(shuō)絮重,你可以在 Ubuntu 的 image 基礎(chǔ)上,往里面加入 Apache 服務(wù)器歹苦,形成你的 image绿鸣。
image 文件是通用的,一臺(tái)機(jī)器的 image 文件拷貝到另一臺(tái)機(jī)器暂氯,照樣可以使用潮模。一般來(lái)說(shuō),為了節(jié)省時(shí)間痴施,我們應(yīng)該盡量使用別人制作好的 image 文件擎厢,而不是自己制作。即使要定制辣吃,也應(yīng)該基于別人的 image 文件進(jìn)行加工动遭,而不是從零開(kāi)始制作。
為了方便共享神得,image 文件制作完成后厘惦,可以上傳到網(wǎng)上的倉(cāng)庫(kù)。Docker 的官方倉(cāng)庫(kù) Docker Hub 是最重要哩簿、最常用的 image 倉(cāng)庫(kù)宵蕉。此外酝静,出售自己制作的 image 文件也是可以的。
列出鏡像
docker image ls
[圖片上傳失敗...(image-12c838-1539015815171)]
- REPOSITORY:鏡像所在的倉(cāng)庫(kù)名稱
- TAG:鏡像標(biāo)簽
- IMAGEID:鏡像ID
- CREATED:鏡像的創(chuàng)建日期(不是獲取該鏡像的日期)
- SIZE:鏡像大小
為了區(qū)分同一個(gè)倉(cāng)庫(kù)下的不同鏡像羡玛,Docker 提供了一種稱為標(biāo)簽(Tag)的功能别智。每個(gè) 鏡像在列出來(lái)時(shí)都帶有一個(gè)標(biāo)簽,例如latest稼稿、 12.10薄榛、12.04 等等。每個(gè)標(biāo)簽對(duì)組成特定鏡像的一 些鏡像層進(jìn)行標(biāo)記(比如让歼,標(biāo)簽 12.04 就是對(duì)所有 Ubuntu12.04 鏡像層的標(biāo)記)敞恋。這種機(jī)制 使得同一個(gè)倉(cāng)庫(kù)中可以存儲(chǔ)多個(gè)鏡像。--- 版本號(hào)
我們?cè)谶\(yùn)行同一個(gè)倉(cāng)庫(kù)中的不同鏡像時(shí)谋右,可以通過(guò)在倉(cāng)庫(kù)名后面加上一個(gè)冒號(hào)和標(biāo)簽名 來(lái)指定該倉(cāng)庫(kù)中的某一具體的鏡像耳舅,例如 docker run --name custom_container_name –i –t docker.io/ubunto:12.04 /bin/bash,表明從鏡像 Ubuntu:12.04 啟動(dòng)一個(gè)容器倚评,而這個(gè)鏡像的操 作系統(tǒng)就是 Ubuntu:12.04浦徊。在構(gòu)建容器時(shí)指定倉(cāng)庫(kù)的標(biāo)簽也是一個(gè)好習(xí)慣。
拉取鏡像
Docker維護(hù)了鏡像倉(cāng)庫(kù)天梧,分為共有和私有兩種盔性,共有的官方倉(cāng)庫(kù)Docker Hub(https://hub.docker.com/)是最重要最常用的鏡像倉(cāng)庫(kù)。私有倉(cāng)庫(kù)(Private Registry)是開(kāi)發(fā)者或者企業(yè)自建的鏡像存儲(chǔ)庫(kù)呢岗,通常用來(lái)保存企業(yè) 內(nèi)部的 Docker 鏡像冕香,用于內(nèi)部開(kāi)發(fā)流程和產(chǎn)品的發(fā)布、版本控制后豫。
要想獲取某個(gè)鏡像悉尾,我們可以使用pull命令,從倉(cāng)庫(kù)中拉取鏡像到本地挫酿,如
docker image pull library/hello-world
上面代碼中构眯,docker image pull
是抓取 image 文件的命令。library/hello-world
是 image 文件在倉(cāng)庫(kù)里面的位置早龟,其中library
是 image 文件所在的組惫霸,hello-world
是 image 文件的名字。
由于 Docker 官方提供的 image 文件葱弟,都放在library
組里面壹店,所以它的是默認(rèn)組,可以省略芝加。因此硅卢,上面的命令可以寫成下面這樣。
docker image pull hello-world
刪除鏡像
docker image rm 鏡像名或鏡像id
如
docker image rm hello-world
4. Docker 容器操作
創(chuàng)建容器
docker run [option] 鏡像名 [向啟動(dòng)容器中傳入的命令]
常用可選參數(shù)說(shuō)明:
- -i 表示以“交互模式”運(yùn)行容器
- -t 表示容器啟動(dòng)后會(huì)進(jìn)入其命令行。加入這兩個(gè)參數(shù)后将塑,容器創(chuàng)建就能登錄進(jìn)去脉顿。即 分配一個(gè)偽終端。
- --name 為創(chuàng)建的容器命名
- -v 表示目錄映射關(guān)系(前者是宿主機(jī)目錄抬旺,后者是映射到宿主機(jī)上的目錄弊予,即 宿主機(jī)目錄:容器中目錄)祥楣,可以使 用多個(gè)-v 做多個(gè)目錄或文件映射开财。注意:最好做目錄映射,在宿主機(jī)上做修改误褪,然后 共享到容器上责鳍。
- -d 在run后面加上-d參數(shù),則會(huì)創(chuàng)建一個(gè)守護(hù)式容器在后臺(tái)運(yùn)行(這樣創(chuàng)建容器后不 會(huì)自動(dòng)登錄容器,如果只加-i -t 兩個(gè)參數(shù)兽间,創(chuàng)建后就會(huì)自動(dòng)進(jìn)去容器)历葛。
- -p 表示端口映射,前者是宿主機(jī)端口嘀略,后者是容器內(nèi)的映射端口恤溶。可以使用多個(gè)-p 做多個(gè)端口映射
- -e 為容器設(shè)置環(huán)境變量
- --network=host 表示將主機(jī)的網(wǎng)絡(luò)環(huán)境映射到容器中帜羊,容器的網(wǎng)絡(luò)與主機(jī)相同
交互式容器
例如咒程,創(chuàng)建一個(gè)交互式容器,并命名為myubuntu
docker run -it --name=myubuntu ubuntu /bin/bash
在容器中可以隨意執(zhí)行l(wèi)inux命令讼育,就是一個(gè)ubuntu的環(huán)境帐姻,當(dāng)執(zhí)行exit命令退出時(shí),該容器也隨之停止奶段。
守護(hù)式容器
創(chuàng)建一個(gè)守護(hù)式容器:如果對(duì)于一個(gè)需要長(zhǎng)期運(yùn)行的容器來(lái)說(shuō)饥瓷,我們可以創(chuàng)建一個(gè)守護(hù)式容器。在容器內(nèi)部exit退出時(shí)痹籍,容器也不會(huì)停止呢铆。
docker run -dit --name=myubuntu2 ubuntu
進(jìn)入已運(yùn)行的容器
docker exec -it 容器名或容器id 進(jìn)入后執(zhí)行的第一個(gè)命令
如
docker exec -it myubuntu2 /bin/bash
查看容器
# 列出本機(jī)正在運(yùn)行的容器
docker container ls
# 列出本機(jī)所有容器,包括已經(jīng)終止運(yùn)行的
docker container ls --all
停止與啟動(dòng)容器
# 停止一個(gè)已經(jīng)在運(yùn)行的容器
docker container stop 容器名或容器id
# 啟動(dòng)一個(gè)已經(jīng)停止的容器
docker container start 容器名或容器id
# kill掉一個(gè)已經(jīng)在運(yùn)行的容器
docker container kill 容器名或容器id
刪除容器
docker container rm 容器名或容器id
5. 將容器保存為鏡像
我們可以通過(guò)如下命令將容器保存為鏡像
docker commit 容器名 鏡像名
6. 鏡像備份與遷移
我們可以通過(guò)save命令將鏡像打包成文件蹲缠,拷貝給別人使用
docker save -o 保存的文件名 鏡像名
如
docker save -o ./ubuntu.tar ubuntu
在拿到鏡像文件后刺洒,可以通過(guò)load方法,將鏡像加載到本地
docker load -i ./ubuntu.tar