一篇文章看懂docker?run的使用方法
1. docker run 的基本用法
docker run
的基本格式為:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
IMAGE
:你想要運(yùn)行的 Docker 鏡像名。COMMAND
:你希望在容器中執(zhí)行的命令(可選)。[ARG...]
:傳遞給命令的參數(shù)(可選)。
例如,運(yùn)行一個(gè)簡(jiǎn)單的 Ubuntu 容器:
docker run ubuntu
這會(huì)從 Docker Hub 拉取 ubuntu
鏡像(如果本地不存在),并啟動(dòng)一個(gè)基于該鏡像的容器。
2. 常用的 docker run 選項(xiàng)
2.1. -d:后臺(tái)運(yùn)行容器
使用 -d
選項(xiàng)可以讓容器在后臺(tái)運(yùn)行,而不是占據(jù)當(dāng)前終端。它是“detached”模式的縮寫(xiě)。
docker run -d ubuntu
此時(shí)容器會(huì)在后臺(tái)運(yùn)行,你不會(huì)看到輸出,但可以通過(guò) docker ps
查看容器的狀態(tài)。
2.2. --name:為容器指定名稱(chēng)
每次啟動(dòng)容器時(shí),Docker 都會(huì)為它分配一個(gè)隨機(jī)名稱(chēng)。如果你希望為容器指定一個(gè)自定義名稱(chēng),可以使用 --name
選項(xiàng)。
docker run --name my_container ubuntu
這樣,你的容器將以 my_container
為名稱(chēng),而不是自動(dòng)生成的名字。
2.3. -it:交互式終端
-i
和 -t
常常一起使用,分別表示交互式模式(-i
)和分配一個(gè)偽終端(-t
)。這通常用于需要與容器交互的場(chǎng)景,例如運(yùn)行 Bash 終端:
docker run -it ubuntu bash
此命令將啟動(dòng)一個(gè) Ubuntu 容器,并進(jìn)入 Bash 終端,你可以直接與容器進(jìn)行交互。
2.4. -p:端口映射
當(dāng)容器內(nèi)部的應(yīng)用需要通過(guò)特定端口與外部通信時(shí),可以使用 -p
選項(xiàng)將容器的端口映射到主機(jī)的端口。格式為:
docker run -p [host_port]:[container_port] IMAGE
例如,將本地主機(jī)的 8080 端口映射到容器的 80 端口:
docker run -p 8080:80 nginx
此時(shí),你可以通過(guò)訪問(wèn) http://localhost:8080
來(lái)與 Nginx 服務(wù)器交互。
2.5. -v:掛載卷
為了在主機(jī)和容器之間共享文件,Docker 提供了卷(Volume)功能。使用 -v
選項(xiàng)可以將主機(jī)的目錄掛載到容器中。
docker run -v /host/path:/container/path ubuntu
例如,將本地主機(jī)的 /data
目錄掛載到容器的 /mnt
目錄:
docker run -v /data:/mnt ubuntu
這樣,容器可以訪問(wèn)并修改主機(jī)上的 /data
目錄內(nèi)容。
2.6. --rm:自動(dòng)刪除容器
默認(rèn)情況下,容器在退出后會(huì)保留它的文件系統(tǒng)和狀態(tài)。使用 --rm
選項(xiàng)可以在容器退出時(shí)自動(dòng)刪除該容器,以節(jié)省資源。
docker run --rm ubuntu
此容器在任務(wù)完成后將被自動(dòng)刪除。
2.7. -e:設(shè)置環(huán)境變量
通過(guò) -e
選項(xiàng),可以在容器中設(shè)置環(huán)境變量。例如,運(yùn)行一個(gè) MySQL 容器時(shí),通常需要設(shè)置 MySQL 的 root 用戶(hù)密碼:
docker run -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql
這會(huì)在容器中設(shè)置 MYSQL_ROOT_PASSWORD
環(huán)境變量。
3. 容器生命周期管理
使用 docker run
啟動(dòng)的容器可以通過(guò)以下命令進(jìn)行管理:
docker ps
:列出正在運(yùn)行的容器。docker stop [container_name]
:停止指定的容器。docker start [container_name]
:?jiǎn)?dòng)已停止的容器。docker rm [container_name]
:刪除一個(gè)已停止的容器。
例如,停止名為 my_container
的容器:
docker stop my_container
4. 運(yùn)行容器的典型場(chǎng)景
4.1. 運(yùn)行一個(gè) Web 服務(wù)器
使用 docker run
快速啟動(dòng)一個(gè) Web 服務(wù)器是 Docker 的常見(jiàn)用法。例如,運(yùn)行一個(gè) Nginx 服務(wù)器,并將主機(jī)的 8080 端口映射到容器的 80 端口:
docker run -d -p 8080:80 nginx
此時(shí),你可以通過(guò)訪問(wèn) http://localhost:8080
來(lái)查看 Nginx 服務(wù)器的默認(rèn)頁(yè)面。
4.2. 運(yùn)行數(shù)據(jù)庫(kù)服務(wù)
你可以使用 docker run
輕松啟動(dòng)一個(gè)數(shù)據(jù)庫(kù)服務(wù)。例如,啟動(dòng)一個(gè) MySQL 容器,并設(shè)置 root 用戶(hù)的密碼:
docker run -d -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 mysql
這會(huì)啟動(dòng)一個(gè) MySQL 容器,外界可以通過(guò)端口 3306 訪問(wèn)數(shù)據(jù)庫(kù)。
4.3. 本地開(kāi)發(fā)環(huán)境
在開(kāi)發(fā)過(guò)程中,很多開(kāi)發(fā)者使用 Docker 運(yùn)行本地開(kāi)發(fā)環(huán)境。例如,運(yùn)行一個(gè)帶有 Node.js 的容器:
docker run -it -v $(pwd):/app -w /app node bash
這會(huì)將當(dāng)前目錄掛載到容器中的 /app
目錄,并進(jìn)入 Node.js 容器中的 Bash 終端。
5. 進(jìn)階用法
除了常用的選項(xiàng)外,docker run
還提供了很多進(jìn)階用法,可以讓用戶(hù)對(duì)容器的行為和資源進(jìn)行更精細(xì)的控制。
5.1. --network:自定義網(wǎng)絡(luò)配置
Docker 提供了多種網(wǎng)絡(luò)模式,例如 bridge、host 和 overlay 等。在容器啟動(dòng)時(shí),可以通過(guò) --network
選項(xiàng)指定網(wǎng)絡(luò)模式。
- bridge(默認(rèn)模式):容器之間通過(guò) NAT 網(wǎng)絡(luò)隔離。
- host:容器和主機(jī)共享同一個(gè)網(wǎng)絡(luò)棧,這使得容器中的服務(wù)可以直接使用主機(jī)的 IP 和端口。
docker run --network host nginx
此時(shí),容器中的 Nginx 服務(wù)會(huì)與主機(jī)共享網(wǎng)絡(luò)。
還可以通過(guò) docker network create
創(chuàng)建自定義的網(wǎng)絡(luò),容器可以通過(guò)該網(wǎng)絡(luò)進(jìn)行互聯(lián)。
docker network create my_network docker run --network my_network ubuntu
5.2. --link:連接其他容器
--link
選項(xiàng)允許一個(gè)容器與另一個(gè)容器進(jìn)行通信,主要用于在沒(méi)有自定義網(wǎng)絡(luò)的情況下快速實(shí)現(xiàn)容器間的網(wǎng)絡(luò)連接。它的格式為:
docker run --link [other_container_name]:[alias] IMAGE
例如:
docker run --link db_container:mysql web_container
此命令會(huì)將名為 db_container
的容器的網(wǎng)絡(luò)別名設(shè)置為 mysql
,并讓 web_container
能通過(guò) mysql
這個(gè)別名訪問(wèn) db_container
。
5.3. --cpus 和 --memory:限制容器資源
為了防止容器占用過(guò)多的系統(tǒng)資源,Docker 提供了 CPU 和內(nèi)存的限制選項(xiàng)。--cpus
選項(xiàng)允許指定容器可以使用的 CPU 數(shù)量:
docker run --cpus="1.5" ubuntu
這將限制容器最多使用 1.5 個(gè) CPU 核心。
--memory
選項(xiàng)則用來(lái)限制容器的內(nèi)存使用:
docker run --memory="512m" ubuntu
這將限制容器使用不超過(guò) 512MB 的內(nèi)存。
5.4. --restart:自動(dòng)重啟策略
--restart
選項(xiàng)允許指定容器的自動(dòng)重啟策略,這在生產(chǎn)環(huán)境中非常有用。常用的策略有:
no
:不重啟(默認(rèn)值)。on-failure
:當(dāng)容器非正常退出時(shí)(退出碼不為 0)自動(dòng)重啟。always
:無(wú)論退出碼為何,容器都會(huì)自動(dòng)重啟。unless-stopped
:容器會(huì)在非手動(dòng)停止的情況下自動(dòng)重啟。
例如:
docker run --restart always nginx
這會(huì)確保 Nginx 容器在退出后會(huì)自動(dòng)重啟。
5.5. --env-file:批量設(shè)置環(huán)境變量
除了使用 -e
來(lái)單獨(dú)設(shè)置環(huán)境變量,Docker 還支持通過(guò) --env-file
從文件中批量加載環(huán)境變量。文件的格式是一行一個(gè)變量:
docker run --env-file ./env.list ubuntu
env.list
文件的內(nèi)容示例如下:
MYSQL_ROOT_PASSWORD=my-secret-pw MYSQL_DATABASE=mydb
這種方式可以方便地管理大量的環(huán)境變量。
6. docker run 實(shí)踐案例
為了更好地理解 docker run
的強(qiáng)大功能,以下是一些常見(jiàn)的實(shí)踐案例。
6.1. 部署一個(gè) LAMP 環(huán)境
假設(shè)你需要快速部署一個(gè) Linux + Apache + MySQL + PHP (LAMP) 的開(kāi)發(fā)環(huán)境,使用 docker run
可以輕松實(shí)現(xiàn)。
首先,運(yùn)行 MySQL 容器:
docker run -d --name mysql_container -e MYSQL_ROOT_PASSWORD=rootpassword -e MYSQL_DATABASE=app_db mysql
然后,運(yùn)行 Apache 和 PHP 的組合容器,并將它與 MySQL 容器鏈接:
docker run -d --name web_container --link mysql_container:mysql -p 8080:80 php:apache
此時(shí),訪問(wèn) http://localhost:8080
即可查看 LAMP 環(huán)境下的網(wǎng)站。
6.2. 持續(xù)集成(CI)環(huán)境中的應(yīng)用測(cè)試
在持續(xù)集成(CI)環(huán)境中,docker run
通常用于自動(dòng)化測(cè)試。例如,在每次代碼提交后,可以使用一個(gè)干凈的容器環(huán)境來(lái)運(yùn)行測(cè)試,確保代碼的正確性。
可以通過(guò)如下方式運(yùn)行測(cè)試容器:
docker run --rm -v $(pwd):/app -w /app maven mvn test
這個(gè)命令會(huì)拉取 Maven 鏡像,在容器中執(zhí)行測(cè)試,并在完成后自動(dòng)刪除容器。
總結(jié)
到此這篇關(guān)于docker run使用方法的文章就介紹到這了,更多相關(guān)docker run使用方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Docker容器部署rocketmq單機(jī)的全過(guò)程
這篇文章主要介紹了使用Docker容器部署rocketmq單機(jī),詳細(xì)介紹了查詢(xún)鏡像拉取鏡像的命令,對(duì)Docker部署rocketmq相關(guān)知識(shí)感興趣的朋友一起看看吧2022-04-04告別Docker請(qǐng)求超時(shí)之一步步排查與詳細(xì)解決方案
在Ubuntu系統(tǒng)上安裝Docker后,運(yùn)行docker?run?hello-world時(shí)遇到連接超時(shí)問(wèn)題,下面這篇文章主要介紹了Docker請(qǐng)求超時(shí)一步步排查與詳細(xì)解決方案的相關(guān)資料,需要的朋友可以參考下2025-02-02淺談Docker 容器數(shù)據(jù)卷掛載小結(jié)
本篇文章主要介紹了淺談Docker 容器數(shù)據(jù)卷掛載小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11Docker使用Bind9實(shí)現(xiàn)域名解析的思路詳解
這篇文章主要介紹了DOCKER使用BIND9實(shí)現(xiàn)域名解析,主要包括刷新服務(wù)修改配置文件信息,實(shí)現(xiàn)思路也很簡(jiǎn)單,本文給大家介紹的非常詳細(xì)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11Spring?Boot?分層打包?Docker?鏡像實(shí)踐及分析(推薦)
這篇文章主要介紹了Spring?Boot?分層打包?Docker?鏡像實(shí)踐及分析,本文通過(guò)圖文并茂的形式實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12