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威力的關鍵。
感謝您的閱讀,請在下面的評論部分留下您的建議。