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