Docker 入門指南
在我們的上一個教程中,我們已經瞭解如何在 Ubuntu 上安裝 Docker,和如何在 CentOS 上安裝 Docker。今天,我們將會了解 Docker 的一些基礎用法。該教程包含了如何建立一個新的 Docker 容器,如何執行該容器,如何從現有的 Docker 容器中建立自己的 Docker 映象等 Docker 的一些基礎知識、操作。所有步驟均在 Ubuntu 18.04 LTS server 版本下測試通過。
入門指南
在開始指南之前,不要混淆 Docker 映象和 Docker 容器這兩個概念。在之前的教程中,我就解釋過,Docker 映象是決定 Docker 容器行為的一個檔案,Docker 容器則是 Docker 映象的執行態或停止態。(LCTT 譯註:在 macOS 下使用 Docker 終端時,不需要加 sudo
)
1、搜尋 Docker 映象
我們可以從 Docker 倉庫中獲取映象,例如 Docker hub,或者自己建立映象。這裡解釋一下,Docker hub 是一個雲伺服器,用來提供給 Docker 的使用者們建立、測試,和儲存他們的映象。
Docker hub 擁有成千上萬個 Docker 映象檔案。你可以通過 docker search
命令在這裡搜尋任何你想要的映象。
例如,搜尋一個基於 Ubuntu 的映象檔案,只需要執行:
$ sudo docker search ubuntu
示例輸出:
搜尋基於 CentOS 的映象,執行:
$ sudo docker search centos
搜尋 AWS 的映象,執行:
$ sudo docker search aws
搜尋 WordPress 的映象:
$ sudo docker search wordpress
Docker hub 擁有幾乎所有種類的映象,包含作業系統、程式和其他任意的型別,這些你都能在 Docker hub 上找到已經構建完的映象。如果你在搜尋時,無法找到你想要的映象檔案,你也可以自己構建一個,將其釋出出去,或者僅供你自己使用。
2、下載 Docker 映象
下載 Ubuntu 的映象,你需要在終端執行以下命令:
$ sudo docker pull ubuntu
這條命令將會從 Docker hub 下載最近一個版本的 Ubuntu 映象檔案。
示例輸出:
Using default tag: latest
latest: Pulling from library/ubuntu
6abc03819f3e: Pull complete
05731e63f211: Pull complete
0bd67c50d6be: Pull complete
Digest: sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5
Status: Downloaded newer image for ubuntu:latest
你也可以下載指定版本的 Ubuntu 映象。執行以下命令:
$ docker pull ubuntu:18.04
Docker 允許在任意的宿主機作業系統下,下載任意的映象檔案,並執行。
例如,下載 CentOS 映象:
$ sudo docker pull centos
所有下載的映象檔案,都被儲存在 /var/lib/docker
資料夾下。(LCTT 譯註:不同作業系統存放的資料夾並不是一致的,具體存放位置請在官方查詢)
檢視已經下載的映象列表,可以使用以下命令:
$ sudo docker images
示例輸出:
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 7698f282e524 14 hours ago 69.9MB
centos latest 9f38484d220f 2 months ago 202MB
hello-world latest fce289e99eb9 4 months ago 1.84kB
正如你看到的那樣,我已經下載了三個映象檔案:ubuntu
、centos
和 hello-world
。
現在,讓我們繼續,來看一下如何執行我們剛剛下載的映象。
3、執行 Docker 映象
執行一個容器有兩種方法。我們可以使用標籤或者是映象 ID。標籤指的是特定的映象快照。映象 ID 是指映象的唯一標識。
正如上面結果中顯示,latest
是所有映象的一個標籤。7698f282e524
是 Ubuntu Docker 映象的映象 ID,9f38484d220f
是 CentOS 映象的映象 ID,fce289e99eb9
是 hello_world 映象的 映象 ID。
下載完 Docker 映象之後,你可以通過下面的命令來使用其標籤來啟動:
$ sudo docker run -t -i ubuntu:latest /bin/bash
在這條語句中:
-t
:在該容器中啟動一個新的終端-i
:通過容器中的標準輸入流建立互動式連線ubuntu:latest
:帶有標籤latest
的 Ubuntu 容器/bin/bash
:在新的容器中啟動 BASH Shell
或者,你可以通過映象 ID 來啟動新的容器:
$ sudo docker run -t -i 7698f282e524 /bin/bash
在這條語句裡:
7698f282e524
— 映象 ID
在啟動容器之後,將會自動進入容器的 shell 中(注意看命令列的提示符)。
Docker 容器的 Shell
如果想要退回到宿主機的終端(在這個例子中,對我來說,就是退回到 18.04 LTS),並且不中斷該容器的執行,你可以按下 CTRL+P
,再按下 CTRL+Q
。現在,你就安全的返回到了你的宿主機系統中。需要注意的是,Docker 容器仍然在後臺執行,我們並沒有中斷它。
可以通過下面的命令來檢視正在執行的容器:
$ sudo docker ps
示例輸出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
32fc32ad0d54 ubuntu:latest "/bin/bash" 7 minutes ago Up 7 minutes modest_jones
列出正在執行的容器
可以看到:
32fc32ad0d54
– 容器 IDubuntu:latest
– Docker 映象
需要注意的是,容器 ID 和 Docker 的映象 ID是不同的。
可以通過以下命令檢視所有正在執行和停止執行的容器:
$ sudo docker ps -a
在宿主機中斷容器的執行:
$ sudo docker stop <container-id>
例如:
$ sudo docker stop 32fc32ad0d54
如果想要進入正在執行的容器中,你只需要執行:
$ sudo docker attach 32fc32ad0d54
正如你看到的,32fc32ad0d54
是一個容器的 ID。當你在容器中想要退出時,只需要在容器內的終端中輸入命令:
# exit
你可以使用這個命令檢視後臺正在執行的容器:
$ sudo docker ps
4、構建自己的 Docker 映象
Docker 不僅僅可以下載執行線上的容器,你也可以建立你的自己的容器。
想要建立自己的 Docker 映象,你需要先執行一個你已經下載完的容器:
$ sudo docker run -t -i ubuntu:latest /bin/bash
現在,你執行了一個容器,並且進入了該容器。然後,在該容器安裝任意一個軟體或做任何你想做的事情。
例如,我們在容器中安裝一個 Apache web 伺服器。
當你完成所有的操作,安裝完所有的軟體之後,你可以執行以下的命令來構建你自己的 Docker 映象:
# apt update
# apt install apache2
同樣的,在容器中安裝和測試你想要安裝的所有軟體。
當你安裝完畢之後,返回的宿主機的終端。記住,不要關閉容器。想要返回到宿主機而不中斷容器。請按下CTRL+P
,再按下 CTRL+Q
。
從你的宿主機的終端中,執行以下命令如尋找容器的 ID:
$ sudo docker ps
最後,從一個正在執行的容器中建立 Docker 映象:
$ sudo docker commit 3d24b3de0bfc ostechnix/ubuntu_apache
示例輸出:
sha256:ce5aa74a48f1e01ea312165887d30691a59caa0d99a2a4aa5116ae124f02f962
在這裡:
3d24b3de0bfc
— 指 Ubuntu 容器的 ID。ostechnix
— 我們建立的容器的使用者名稱稱ubuntu_apache
— 我們建立的映象
讓我們檢查一下我們新建立的 Docker 映象:
$ sudo docker images
示例輸出:
REPOSITORY TAG IMAGE ID CREATED SIZE
ostechnix/ubuntu_apache latest ce5aa74a48f1 About a minute ago 191MB
ubuntu latest 7698f282e524 15 hours ago 69.9MB
centos latest 9f38484d220f 2 months ago 202MB
hello-world latest fce289e99eb9 4 months ago 1.84kB
列出所有的 Docker 映象
正如你看到的,這個新的映象就是我們剛剛在本地系統上從執行的容器上建立的。
現在,你可以從這個映象建立一個新的容器。
$ sudo docker run -t -i ostechnix/ubuntu_apache /bin/bash
5、刪除容器
如果你在 Docker 上的工作已經全部完成,你就可以刪除那些你不需要的容器。
想要刪除一個容器,首先,你需要停止該容器。
我們先來看一下正在執行的容器有哪些
$ sudo docker ps
示例輸出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3d24b3de0bfc ubuntu:latest "/bin/bash" 28 minutes ago Up 28 minutes goofy_easley
使用容器 ID 來停止該容器:
$ sudo docker stop 3d24b3de0bfc
現在,就可以刪除該容器了。
$ sudo docker rm 3d24b3de0bfc
你就可以按照這樣的方法來刪除那些你不需要的容器了。
當需要刪除的容器數量很多時,一個一個刪除也是很麻煩的,我們可以直接刪除所有的已經停止的容器。只需要執行:
$ sudo docker container prune
按下 Y
,來確認你的操作:
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
32fc32ad0d5445f2dfd0d46121251c7b5a2aea06bb22588fb2594ddbe46e6564
5ec614e0302061469ece212f0dba303c8fe99889389749e6220fe891997f38d0
Total reclaimed space: 5B
這個命令僅支援最新的 Docker。(LCTT 譯註:僅支援 1.25 及以上版本的 Docker)
6、刪除 Docker 映象
當你刪除了不要的 Docker 容器後,你也可以刪除你不需要的 Docker 映象。
列出已經下載的映象:
$ sudo docker images
示例輸出:
REPOSITORY TAG IMAGE ID CREATED SIZE
ostechnix/ubuntu_apache latest ce5aa74a48f1 5 minutes ago 191MB
ubuntu latest 7698f282e524 15 hours ago 69.9MB
centos latest 9f38484d220f 2 months ago 202MB
hello-world latest fce289e99eb9 4 months ago 1.84kB
由上面的命令可以知道,在本地的系統中存在三個映象。
使用映象 ID 來刪除映象。
$ sudo docekr rmi ce5aa74a48f1
示例輸出:
Untagged: ostechnix/ubuntu_apache:latest
Deleted: sha256:ce5aa74a48f1e01ea312165887d30691a59caa0d99a2a4aa5116ae124f02f962
Deleted: sha256:d21c926f11a64b811dc75391bbe0191b50b8fe142419f7616b3cee70229f14cd
解決問題
Docker 禁止我們刪除一個還在被容器使用的映象。
例如,當我試圖刪除 Docker 映象 b72889fa879c
時,我只能獲得一個錯誤提示:
Error response from daemon: conflict: unable to delete b72889fa879c (must be forced) - image is being used by stopped container dde4dd285377
這是因為這個 Docker 映象正在被一個容器使用。
所以,我們來檢查一個正在執行的容器:
$ sudo docker ps
示例輸出:
注意,現在並沒有正在執行的容器!!!
檢視一下所有的容器(包含所有的正在執行和已經停止的容器):
$ sudo docker pa -a
示例輸出:
可以看到,仍然有一些已經停止的容器在使用這些映象。
讓我們把這些容器刪除:
$ sudo docker rm 12e892156219
我們仍然使用容器 ID 來刪除這些容器。
當我們刪除了所有使用該映象的容器之後,我們就可以刪除 Docker 的映象了。
例如:
$ sudo docekr rmi b72889fa879c
我們再來檢查一下本機存在的映象:
$ sudo docker images
想要知道更多的細節,請參閱本指南末尾給出的官方資源的連結或者在評論區進行留言。
這就是全部的教程了,希望你可以瞭解 Docker 的一些基礎用法。
更多的教程馬上就會到來,敬請關注。
via: https://www.ostechnix.com/getting-started-with-docker/
作者:sk 選題:lujun9972 譯者:zhang5788 校對:wxy
訂閱“Linux 中國”官方小程式來檢視
相關文章
- docker入門Docker
- Docker(一):Docker入門教程Docker
- docker 入門上篇Docker
- Docker 入門:容器Docker
- Docker 入門:DockerfileDocker
- Docker使用入門Docker
- Docker快速入門Docker
- docker入門1Docker
- Docker 入門教程Docker
- Docker 入門操作Docker
- docker入門教程Docker
- Zookeeper入門指南
- CPack 入門指南
- numpy入門指南
- EOS 入門指南
- Vue 入門指南Vue
- RabbitMQ入門指南MQ
- Nginx入門指南Nginx
- Vagrant 入門指南
- React 入門指南React
- Flask 入門指南Flask
- gulp入門指南
- OSWorkFlow入門指南
- CouchDB 入門指南
- RxJava入門指南RxJava
- ODA入門指南
- MySQL 入門指南MySql
- Markdown入門指南
- Docker 入門系列一:docker 命令Docker
- Docker 入門:什麼是 Docker ?Docker
- docker入門1:使用docker映象Docker
- Docker入門知識Docker
- Docker入門(1):概述Docker
- docker 怎麼入門?Docker
- kafka(docker) 入門分享KafkaDocker
- Docker入門實踐Docker
- Docker入門手冊Docker
- Docker 入門筆記Docker筆記