《第一本 Docker 書》讀書筆記 - 1: 簡介與安裝python
當你剛剛安裝好 Docker 的時候,你的機器上是一無全部的,這個時候你就須要下載鏡像到本地,從哪裏下載呢?固然是從倉庫中上下載。mysql
Dcoker 的倉庫和 Maven 的倉庫比較類似,分爲公共倉庫和私有倉庫。公共倉庫通常指的是有 Docker 公司運營的 Docker Hub,上面按照建立者的不一樣分爲兩種類型:Docker 官方建立和維護的鏡像、其餘用戶建立和維護的鏡像。sql
Docker Hubdocker
安裝構建方式的不一樣分爲:自動構建、非自動構建。自動構建通常是將 Github 等代碼託管平臺中含有 Dockerfile 文件的倉庫鏈接到 Docker Hub 中,當咱們向倉庫中推送代碼的時候就會觸發一次構建建立一個新的鏡像;非自動構建是指經過命令行將本地構建好的鏡像推送到 Docker Hub 。shell
當你想要拉取一個鏡像,當時又不肯定這個鏡像基本的信息的時候,你就能夠在 Docker Hub 中查找:windows
固然你也能夠使用命令行來進行查找:bash
# 查找 windows 鏡像
$ docker search windows
複製代碼
說了這麼多,咱們終於能夠開始拉取鏡像了,只須要一條很是簡單的命令:網絡
# 拉取 python 鏡像
$ docker pull python
複製代碼
經過第一句輸出日誌能夠看到使用了默認的標籤 latest
,在 Docker 中是使用標籤來區分同一個鏡像的不一樣的版本,好比 python 這個鏡像就存在不少的標籤:post
固然同一個鏡像是能夠打上不一樣的標籤推送到 Docker Hub 中,可是在此時就會認爲這兩個標籤對應的是兩個不一樣鏡像,這是由於 Docker 是以鏡像名和標籤共同來肯定一個鏡像的。同時當你沒有顯示的指定標籤的時候就會默認使用 latest
標籤。spa
當一個鏡像成功拉取到本地後,就會輸出這個鏡像的 id :
當你下載一個鏡像後就能夠使用命令看看本地中的鏡像列表:
# 查看鏡像列表
$ docker images
複製代碼
iamges
命令會顯示本地的鏡像列表,並顯示每個鏡像的簡要信息。當 iamges
後邊跟上具體的鏡像名的時候就會顯示這一個鏡像的簡要信息:
# 查看 python 鏡像的詳細的信息
$ docker image inspect python
複製代碼
你能夠使用上述的命令去查看鏡像的更多的信息,該命令會返回一個 JSON 形式的字符串,會包含鏡像的名稱、標籤、啓動配置、網絡端口等等的很是詳細的信息。
# 刪除 hello-world 鏡像
$ docker rmi hello-world
複製代碼
除了直接指定鏡像名外還能夠再刪除的時候指定鏡像的 ID ,防止在你本地構建時候若是出現一個沒有名稱的鏡像時能夠使用鏡像的 ID 來進行刪除:
# 以交互式的方式運行一個名爲 fedora-container 的容器,在運行結束後自動刪除
$ docker run --rm --name fedora-container -t -i fedora:31
複製代碼
參數 | 含義 |
---|---|
--rm | 在容器結束運行後刪除該容器 |
--name | 爲容器命名,例如:hello-world-container |
-t | 分配一個僞 tty |
-i | 開啓 STDIN ,即便沒有鏈接 |
固然 docker run 命令還有不少的參數,能夠使用 docker run —help
來進行查看:
容器運行分爲兩種方式:交互式容器與守護式容器。
交互式容器:就是 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 | 端口映射 |
查看容器列表:
# 查看全部的容器
$ docker ps -a
複製代碼
參數 | 含義 |
---|---|
-a | 查看全部的容器,不加該參數只顯示運行中的參數 |
查看單個容器的詳細信息:
# 查看 mysql_docker 容器的詳細的信息
$ docker container inspect mysql_docker
複製代碼
該命令最終會以 JSON 形式輸出容器的詳細的信息。
# 中止一個運行中的容器
$ docker stop mysql_docker
# 啓動容器
$ docker start mysql_docker
# 重啓啓動容器
$ docker restart mysql_docker
複製代碼
這三個命令輸出的都是容器的名稱或容器的 ID (未設置容器名稱時)。
# 刪除 mysql_docker 容器
$ docker rm mysql_docker
複製代碼
Id 與 name 之間的區別
不管是鏡像仍是容器,多會分配一個 id ,可是你還能夠指定一個 name (鏡像不用指定),大多說狀況下二者都是等效的。
守護式容器不能夠自動刪除
開啓一個守護式容器的時候不能夠使用 —rm
使容器在運行結束後自動刪除。