Docker 學(xué)習(xí)筆記

參考書籍 Docker —— 從入門到實踐
本文只記錄重要步驟,更詳細(xì)的內(nèi)容請在原書中查看

安裝

Ubuntu、Debian 系列安裝 Docker

盡量使用最新的發(fā)行版,本文使用的版本為Ubuntu Xenial 16.04 (LTS)

使用腳本自動安裝

Docker 官方為了簡化安裝流程,提供了一套安裝腳本,Ubuntu 和 Debian 系統(tǒng)可以使用這套腳本安裝:

curl -sSL https://get.docker.com/ | sh

執(zhí)行這個命令后,腳本就會自動的將一切準(zhǔn)備工作做好,并且把 Docker 安裝在系統(tǒng)中。

不過,由于偉大的墻的原因,在國內(nèi)使用這個腳本可能會出現(xiàn)下載出錯的情況。
本文使用的是 DaoCloud 提供的安裝腳本

DaoCloud 提供的安裝腳本 curl -sSL https://get.daocloud.io/docker | sh

啟動 Docker 引擎

$ sudo systemctl enable docker
$ sudo systemctl start docker

建立 docker 用戶組

默認(rèn)情況下,docker命令會使用 Unix socket 與 Docker 引擎通訊。而只有 root 用戶和 docker 組的用戶才可以訪問 Docker 引擎的 Unix socket。出于安全考慮,一般 Linux 系統(tǒng)上不會直接使用 root 用戶。因此,更好地做法是將需要使用 docker 的用戶加入 docker 用戶組。

建立 docker 組:

$ sudo groupadd docker

將當(dāng)前用戶加入 docker 組:

$ sudo usermod -aG docker $USER

鏡像加速器

國內(nèi)訪問 Docker Hub 有時會遇到困難,此時可以配置鏡像加速器。
本文使用 DaoCloud 提供的加速器

輸入如下命令:

$ sudo curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s 服務(wù)提供商分配給你的地址
例如: http://4e76bd89.m.daocloud.io

然后重啟 docker 服務(wù)即可

$ sudo systemctl restart docker.service

鏡像

獲取鏡像

獲取鏡像的命令是 docker pull 格式為:

$ sudo docker pull [選項] [Docker Registry地址]<倉庫名>:<標(biāo)簽>
  • Docker Registry地址:地址的格式一般是 <域名/IP>[:端口號]。默認(rèn)地址是 Docker Hub。
  • 倉庫名:如之前所說,這里的倉庫名是兩段式名稱,既 <用戶名>/<軟件名>。對于 Docker Hub,如果不給出用戶名,則默認(rèn)為 library,也就是官方鏡像。

例如:

$ sudo docker pull ubuntu:14.04

上面的命令中沒有給出 Docker Registry 地址,因此將會從 Docker Hub 獲取鏡像。而鏡像名稱是 ubuntu:14.04,因此將會獲取官方鏡像 library/ubuntu 倉庫中標(biāo)簽為 14.04 的鏡像。

運行

有了鏡像后,我們就可以以這個鏡像為基礎(chǔ)啟動一個容器來運行。以上面的 ubuntu:14.04 為例,如果我們打算啟動里面的 bash 并且進(jìn)行交互式操作的話,可以執(zhí)行下面的命令。

$ sudo docker run -it --rm ubuntu:14.04 bash
root@08ce449494db:/# cat /etc/os-release 
NAME="Ubuntu"
VERSION="14.04.5 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.5 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
root@08ce449494db:/# exit
exit
$ 

docker run 是運行容器的命令

  • -it:這是兩個參數(shù),一個是 -i:交互式操作,一個是 -t 終端。我們這里打算進(jìn)入 bash 執(zhí)行一些命令并查看返回結(jié)果,因此我們需要交互式終端。
  • --rm:這個參數(shù)是說容器退出后隨之將其刪除。默認(rèn)情況下,為了排障需求,退出的容器并不會立即刪除,除非手動 docker rm。我們這里只是隨便執(zhí)行個命令,看看結(jié)果,不需要排障和保留結(jié)果,因此使用 --rm 可以避免浪費空間。
  • ubuntu:14.04:這是指用 ubuntu:14.04 鏡像為基礎(chǔ)來啟動容器。
  • bash:放在鏡像名后的是命令,這里我們希望有個交互式 Shell,因此用的是 bash。

進(jìn)入容器后,我們可以在 Shell 下操作,執(zhí)行任何所需的命令。這里,我們執(zhí)行了 cat /etc/os-release,這是 Linux 常用的查看當(dāng)前系統(tǒng)版本的命令,從返回的結(jié)果可以看到容器內(nèi)是 Ubuntu 14.04.5 LTS 系統(tǒng)。

最后我們通過 exit 退出了這個容器。

列出鏡像

要想列出已經(jīng)下載下來的鏡像,可以使用 docker images 命令。

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               f49eec89601e        12 days ago         129 MB
ubuntu              latest              f49eec89601e        12 days ago         129 MB
ubuntu              14.04               b969ab9f929b        12 days ago         188 MB

列表包含了倉庫名、標(biāo)簽、鏡像 ID、創(chuàng)建時間以及所占用的空間。

鏡像 ID 是鏡像的唯一標(biāo)識,一個鏡像可以對應(yīng)多個標(biāo)簽。因此,在上面的例子中,我們可以看到 ubuntu:16.04ubuntu:latest 擁有相同的 ID,因為它們對應(yīng)的是同一個鏡像。

列出部分鏡像

不加任何參數(shù)的情況下,docker images 會列出所有頂級鏡像,但是有時候我們只希望列出部分鏡像。docker images 有好幾個參數(shù)可以幫助做到這個事情。

根據(jù)倉庫名列出鏡像

$ sudo docker images ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               f49eec89601e        12 days ago         129 MB
ubuntu              latest              f49eec89601e        12 days ago         129 MB
ubuntu              14.04               b969ab9f929b        12 days ago         188 MB

列出特定的某個鏡像,也就是說指定倉庫名和標(biāo)簽

$ sudo docker images ubuntu:16.04
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               f49eec89601e        12 days ago         129 MB

除此以外,docker images 還支持強大的過濾器參數(shù) --filter,或者簡寫 -f。比如,我們希望看到在 ubuntu:14.04 之后建立的鏡像,可以用下面的命令:

$ sudo docker images -f since=ubuntu:14.04
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               f49eec89601e        12 days ago         129 MB
ubuntu              latest              f49eec89601e        12 days ago         129 MB

想查看某個位置之前的鏡像也可以,只需要把 since 換成 before 即可。

以特定格式顯示

默認(rèn)情況下,docker images 會輸出一個完整的表格,但是我們并非所有時候都會需要這些內(nèi)容。比如,我們需要利用 docker images 把所有鏡像的 ID 列出來,然后交給 docker rmi 命令作為參數(shù)來刪除指定的這些鏡像,這個時候就用到了 -q 參數(shù)。

$ sudo docker images -q
f49eec89601e
f49eec89601e
b969ab9f929b

利用 commit 理解鏡像構(gòu)成(預(yù)留)

此處先省略一萬字_
............................................................

使用 Dockerfile 定制鏡像


臨時內(nèi)容:
Dockerfile 中有 CMD 時,容器啟動時則執(zhí)行該 CMD,如果在啟動時加入?yún)?shù)則會覆蓋掉原來的 CMD,如果 Dockerfile 中有 ENTRYPOINT,則 CMD 作為參數(shù)傳遞給 ENTRYPOINT。


Dockerfile:
FROM ubuntu:16.04
RUN apt-get update \
    && apt-get install -y curl \
    && rm -rf /var/lib/apt/lists/*
CMD [ "curl", "-s", "http://ip.cn" ]

$ docker run myip // 此時容器內(nèi)執(zhí)行的是命令 curl -s http://ip.cn
$ docker run myip echo "Hello" // 此時容器內(nèi)執(zhí)行的是命令 echo "Hello",CMD 被覆蓋了 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容