如何使用 Docker 運行命令 [Beginners Guide]

docker run 命令用於啟動和運行容器。 學習如何使用 docker run 命令是任何想要熟悉 Docker 的開發人員的推薦。

使用 Docker 時,軟件開發人員主要使用“docker run”命令來:

  • 從給定的 docker 鏡像創建一個容器
  • 運行具有可選名稱的容器
  • 在前台運行一個容器
  • 在分離模式下運行容器
  • 以交互模式運行容器
  • 將容器端口發佈到主機
  • 在容器和主機之間共享數據
  • 容器停止後移除容器

Docker 運行命令

命令的語法:

docker run [options] image-name [command] [arg...]

為了運行一個 docker 容器,你可以簡單地運行以下命令,假設你已經安裝了 docker:

docker run image-name

在哪裡:

image-name 可以是本地機器上的 docker 鏡像,也可以從在線註冊表(例如 Docker Hub 和 Quay.io)中提取。

在下面的 example,您將從位於 Docker Hub 上的公共映像“hello-world”運行一個容器。

$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:7f0a9f93b4aa3022c3a4c147a449bf11e0941a1fd0bf4a8e6c9408b2600777c5
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

第一次運行容器時,Docker 守護進程會從 Docker Hub 拉取鏡像“hello-world”。 然後,它從該圖像創建一個新容器並將輸出流式傳輸到您的終端。 從現在開始,圖像被下載到你的本地機器上。 您可以通過運行以下命令列出所有 docker 鏡像:

$ sudo docker image ls

輸出:

REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 4e2eef94cd6b 9 days ago 73.9MB
nginx latest 4bb46517cac3 2 weeks ago 133MB
alpine latest a24bb4013296 3 months ago 5.57MB
truongnh1992/go latest 57b4af3567ac 3 months ago 7.41MB
hello-world latest bf756fb1ae65 7 months ago 13.3kB

下次運行該映像時,它比第一個運行速度快,您可以使用 IMAGE-ID 代替映像名稱。 為了 example:

$ sudo docker run bf756fb1ae65

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

筆記: 從 Docker 1.13 版開始,由於其發布的新語法,我們使用“docker container run”而不是“docker run”。

建議在 docker run 命令前加上 sudo 或其他解決方法沒有 sudo.

運行具有定義名稱的容器

當您使用基本語法“docker container run”運行容器時,Docker 將為每個容器隨機生成一個名稱,如下所示:

$ sudo docker container ls -a

輸出:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
941b67537bbb ubuntu "/bin/bash" 4 seconds ago Exited (0) 3 seconds ago musing_elgamal
a7b197b56d2c bf756fb1ae65 "/hello" About a minute ago Exited (0) About a minute ago determined_faraday
0b40e331161e hello-world "/hello" 4 minutes ago Exited (0) 4 minutes ago nervous_sammet

如果你想為你的容器顯式分配一個名稱,讓我們使用以下語法運行命令:

$ docker container run --name container-name image-name

為了 example:

$ sudo docker container run --name hello-linoxide hello-world

輸出:

$ sudo docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eb2f0c9cc658 hello-world "/hello" 21 seconds ago Exited (0) 20 seconds ago hello-linoxide
...

在前台運行一個容器

當我們使用 docker 容器時,有兩種運行它們的模式: 附加模式分離模式.

默認情況下,Docker 在前台運行容器。 這意味著容器進程附加到終端會話並顯示輸出。 如果容器仍在運行,則不會返回命令提示符。

為了 example:

$ sudo docker container run nginx

/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up

在分離模式下運行容器

如果您想在後台進程(分離模式)中運行該容器,讓我們使用 -d 選項:

$ sudo docker container run -d nginx
4fd8f2933eafaebcc75ef4fe6d0a961f76d8fdbf64383caff7f422a25c60951f

以交互模式運行容器

Docker 支持以交互模式運行容器。 由於此功能,您可以使用外殼在容器內執行命令。

使用 -it 選項後跟’/bin/bash’ 或 ‘/bin/sh’ 啟動交互模式,對於 example:

$ sudo docker container run -it ubuntu /bin/bash
root@d99e70bff763:/# echo $0
/bin/bash

$ sudo docker container run -it ubuntu /bin/sh
# echo $0
/bin/sh

端口轉發容器

默認情況下,為了訪問在容器內運行的進程,您必須進入其中。 如果你想從外部訪問它,讓我們打開一個端口。 通過發布端口,您可以使用以下命令將容器端口映射到主機上的端口 -p 選項如下:

$ dock container run -p host-port:container-port image

為了 example, 要將容器 nginx 的 80 端口映射到主機上的 8080 端口,請運行:

$ sudo docker container run -d -p 8080:80 nginx
cd85a291dab1ff92fa2ee6275446f758baa8322de2b706f7b581a54825142c5b

現在,讓我們使用 ‘curl’ 從 localhost:8080 檢索內容

$ curl localhost:8080

掛載容器的捲

容器中的數據是短暫的,當容器停止時它不再存在。 如果要持久地將數據保留在容器中,則必須將其掛載到共享存儲卷中。

讓我們用 -v 安裝卷的選項如下:

$ docker container run -v host-machine-location:container-storage image

為了 example,讓我們將主機上的“share-data”目錄掛載到容器中的“/home”中:

$ mkdir share-data/
$ echo "Hello linoxide readers" > share-data/test.txt
$ sudo docker container run -it -v $(pwd)/share-data:/home alpine

輸出:

/ # ls /home/
test.txt
/ # cat /home/test.txt
Hello linoxide readers

容器停止後移除容器

默認情況下,當容器停止時,其文件系統仍保留在主機上。 它們消耗大量存儲空間。 如果要在容器退出後自動移除容器,請使用 --rm 選項:

$ docker container run --rm image

為了 example, 運行一個 docker 容器而不 --rm 選項:

$ sudo docker container run ubuntu
$ sudo docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad348fb61463 ubuntu "/bin/bash" 8 seconds ago Exited (0) 6 seconds ago distracted_hoover

使用時 --rm 選項,一旦容器停止,它將被自動刪除。

$ sudo docker container run --rm ubuntu
$ sudo docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

結論

Docker 是一個開源平台,使軟件開發人員能夠構建、部署和管理容器化應用程序。 Docker 對於任何開發人員,尤其是 DevOps 工程師來說,都是一個非常強大的工具。 掌握“docker container run”命令的使用方法,是發現Docker威力的關鍵。

感謝您的閱讀,請在下面的評論部分留下您的建議。