在咱們的上一個教程中,咱們已經瞭解如何在 Ubuntu 上安裝 Docker,和如何在 CentOS 上安裝 Docker。今天,咱們將會了解 Docker 的一些基礎用法。該教程包含了如何建立一個新的 Docker 容器,如何運行該容器,如何從現有的 Docker 容器中建立本身的 Docker 鏡像等 Docker 的一些基礎知識、操做。全部步驟均在 Ubuntu 18.04 LTS server 版本下測試經過。linux
在開始指南以前,不要混淆 Docker 鏡像和 Docker 容器這兩個概念。在以前的教程中,我就解釋過,Docker 鏡像是決定 Docker 容器行爲的一個文件,Docker 容器則是 Docker 鏡像的運行態或中止態。(LCTT 譯註:在 macOS 下使用 Docker 終端時,不須要加 sudo
)git
咱們能夠從 Docker 倉庫中獲取鏡像,例如 Docker hub,或者本身建立鏡像。這裏解釋一下,Docker hub 是一個雲服務器,用來提供給 Docker 的用戶們建立、測試,和保存他們的鏡像。github
Docker hub 擁有成千上萬個 Docker 鏡像文件。你能夠經過 docker search
命令在這裏搜索任何你想要的鏡像。web
例如,搜索一個基於 Ubuntu 的鏡像文件,只須要運行:docker
$ sudo docker search ubuntu
複製代碼
示例輸出:shell
搜索基於 CentOS 的鏡像,運行:apache
$ sudo docker search centos
複製代碼
搜索 AWS 的鏡像,運行:ubuntu
$ sudo docker search aws
複製代碼
搜索 WordPress 的鏡像:centos
$ sudo docker search wordpress
複製代碼
Docker hub 擁有幾乎全部種類的鏡像,包含操做系統、程序和其餘任意的類型,這些你都能在 Docker hub 上找到已經構建完的鏡像。若是你在搜索時,沒法找到你想要的鏡像文件,你也能夠本身構建一個,將其發佈出去,或者僅供你本身使用。安全
下載 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
。
如今,讓咱們繼續,來看一下如何運行咱們剛剛下載的鏡像。
運行一個容器有兩種方法。咱們可使用標籤或者是鏡像 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
複製代碼
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
複製代碼
若是你在 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)
當你刪除了不要的 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: www.ostechnix.com/getting-sta…