《第一本 Docker 書》讀書筆記 - 2 - docker 的基本使用

《第一本 Docker 書》讀書筆記 - 1: 簡介與安裝python

1. 鏡像

1.1 拉取(下載)鏡像

當你剛剛安裝好 Docker 的時候,你的機器上是一無全部的,這個時候你就須要下載鏡像到本地,從哪裏下載呢?固然是從倉庫中上下載。mysql

Dcoker 的倉庫和 Maven 的倉庫比較類似,分爲公共倉庫和私有倉庫。公共倉庫通常指的是有 Docker 公司運營的 Docker Hub,上面按照建立者的不一樣分爲兩種類型:Docker 官方建立和維護的鏡像、其餘用戶建立和維護的鏡像。sql

Docker Hubdocker

image-20190717150538551

安裝構建方式的不一樣分爲:自動構建、非自動構建。自動構建通常是將 Github 等代碼託管平臺中含有 Dockerfile 文件的倉庫鏈接到 Docker Hub 中,當咱們向倉庫中推送代碼的時候就會觸發一次構建建立一個新的鏡像;非自動構建是指經過命令行將本地構建好的鏡像推送到 Docker Hub 。shell

當你想要拉取一個鏡像,當時又不肯定這個鏡像基本的信息的時候,你就能夠在 Docker Hub 中查找:windows

image-20190717151638250

固然你也能夠使用命令行來進行查找:bash

# 查找 windows 鏡像
$ docker search windows
複製代碼

image-20190717151850460

說了這麼多,咱們終於能夠開始拉取鏡像了,只須要一條很是簡單的命令:網絡

# 拉取 python 鏡像
$ docker pull python
複製代碼

image-20190717152334500

經過第一句輸出日誌能夠看到使用了默認的標籤 latest ,在 Docker 中是使用標籤來區分同一個鏡像的不一樣的版本,好比 python 這個鏡像就存在不少的標籤:post

image-20190717153035710

固然同一個鏡像是能夠打上不一樣的標籤推送到 Docker Hub 中,可是在此時就會認爲這兩個標籤對應的是兩個不一樣鏡像,這是由於 Docker 是以鏡像名和標籤共同來肯定一個鏡像的。同時當你沒有顯示的指定標籤的時候就會默認使用 latest 標籤。spa

當一個鏡像成功拉取到本地後,就會輸出這個鏡像的 id :

image-20190717153542796

1.2 查看本地的鏡像

當你下載一個鏡像後就能夠使用命令看看本地中的鏡像列表:

# 查看鏡像列表
$ docker images
複製代碼

image-20190717153849005

iamges 命令會顯示本地的鏡像列表,並顯示每個鏡像的簡要信息。當 iamges 後邊跟上具體的鏡像名的時候就會顯示這一個鏡像的簡要信息:

image-20190717154317271

1.3 顯示鏡像的詳細的信息

# 查看 python 鏡像的詳細的信息
$ docker image inspect python
複製代碼

你能夠使用上述的命令去查看鏡像的更多的信息,該命令會返回一個 JSON 形式的字符串,會包含鏡像的名稱、標籤、啓動配置、網絡端口等等的很是詳細的信息。

1.4 刪除鏡像

# 刪除 hello-world 鏡像
$ docker rmi hello-world
複製代碼

image-20190717155730338

除了直接指定鏡像名外還能夠再刪除的時候指定鏡像的 ID ,防止在你本地構建時候若是出現一個沒有名稱的鏡像時能夠使用鏡像的 ID 來進行刪除:

image-20190717160046347

2. 容器

2.1 運行一個容器

# 以交互式的方式運行一個名爲 fedora-container 的容器,在運行結束後自動刪除
$ docker run --rm --name fedora-container -t -i fedora:31
複製代碼

image-20190717163327858

參數 含義
--rm 在容器結束運行後刪除該容器
--name 爲容器命名,例如:hello-world-container
-t 分配一個僞 tty
-i 開啓 STDIN ,即便沒有鏈接

固然 docker run 命令還有不少的參數,能夠使用 docker run —help 來進行查看:

image-20190717162131300

2.2 容器運行的兩種方式

容器運行分爲兩種方式:交互式容器與守護式容器。

交互式容器:就是 2.1 中所演示的,爲了某種短暫的任務而啓動,隨着任務的結束而中止,通常不會長時間的運行。通常交互式容器能夠分配一個僞 tty 終端,而且但是在啓動的時候使用 —rm 參數,讓其在運行結束後自動銷燬。

守護式容器:守護式容器通常是爲了某些長期運行的任務而啓動,在後臺長期的駐留運行,在不出錯的狀況下通常只能使用 docker stop 命令關閉。開啓守護式命令只需在 docker run 命令添加參數 -d 便可。例如 MySQL 、Nginx 等服務。

# 以守護式的方式運行一個名爲 mysql_docker 的容器,將容器的 3306 端口映射到宿主機的 3306 端口上
docker run --name mysql_docker -p 3306:3306 -d -e MYSQL_ROOT_PASSWORD='password' mysql
複製代碼
參數 含義
-d 啓動一個守護式容器
-e 設置容器的環境變量
-p 端口映射

2.3 查看容器的信息

查看容器列表

# 查看全部的容器
$ docker ps -a
複製代碼

image-20190717165158813

參數 含義
-a 查看全部的容器,不加該參數只顯示運行中的參數

查看單個容器的詳細信息

# 查看 mysql_docker 容器的詳細的信息
$ docker container inspect mysql_docker
複製代碼

image-20190717165850520

該命令最終會以 JSON 形式輸出容器的詳細的信息。

2.4 中止容器的運行、啓動容器、從新啓動容器

# 中止一個運行中的容器
$ docker stop mysql_docker
 # 啓動容器
$ docker start mysql_docker
 # 重啓啓動容器
$ docker restart mysql_docker
複製代碼

image-20190717170446789

這三個命令輸出的都是容器的名稱或容器的 ID (未設置容器名稱時)。

2.5 刪除容器

# 刪除 mysql_docker 容器
$ docker rm mysql_docker
複製代碼

3. 補充

  1. Id 與 name 之間的區別

    不管是鏡像仍是容器,多會分配一個 id ,可是你還能夠指定一個 name (鏡像不用指定),大多說狀況下二者都是等效的。

  2. 守護式容器不能夠自動刪除

    開啓一個守護式容器的時候不能夠使用 —rm 使容器在運行結束後自動刪除。

相關文章
相關標籤/搜索