目錄
- 介紹
- docker -v 掛載 (目錄)
- docker -v 掛載 (Volume)
- docker –rm
- docker -w -it
介紹
run 的各種參數(shù)
docker run [OPTIONS] IMAGE [COMMOND] [ARGS...] # OPTIONS 說明 --name="容器新名字": 為容器指定一個(gè)名稱; -d: 后臺(tái)運(yùn)行容器,并返回容器ID,也即啟動(dòng)守護(hù)式容器; -i:以交互模式運(yùn)行容器,通常與 -t 同時(shí)使用; -t:為容器重新分配一個(gè)偽輸入終端,通常與 -i 同時(shí)使用; -P: 隨機(jī)端口映射; -p: 指定端口映射,有以下四種格式 ip:hostPort:containerPort ip::containerPort hostPort:containerPort containerPort -w: 指定命令執(zhí)行時(shí),所在的路徑 # IMAGE XXX_IMAGE_NAME:XXX_IMAGE_VER # COMAND 例:mvn -Duser.home=xxx -B clean package -Dmaven.test.skip=true
常用OPTIONS補(bǔ)足:
–name:容器名字
–network:指定網(wǎng)絡(luò)
–rm:容器停止自動(dòng)刪除容器
-i:–interactive,交互式啟動(dòng)
-t:–tty,分配終端
-v:–volume,掛在數(shù)據(jù)卷
-d:–detach,后臺(tái)運(yùn)行
(-w 在run中,似乎也可直接使用)
在已運(yùn)行的容器中運(yùn)行命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
常用選項(xiàng):
-d:–detach ,后臺(tái)運(yùn)行命令
-e, –env list 設(shè)置env
-i, –interactive 啟用交互式
-t, –tty 啟用終端
-u, –user string 指定用戶 (格式: <name|uid>[:<group|gid>])
-w, –workdir string 指定工作目錄
在容器內(nèi)執(zhí)行/bin/bash命令
# eg: 使用鏡像nginx:latest以交互模式啟動(dòng)一個(gè)容器,在容器內(nèi)執(zhí)行/bin/bash命令。 docker run -it centos /bin/bash
docker -v 掛載 (目錄)
比如我要啟動(dòng)一個(gè)centos容器,宿主機(jī)的/test目錄掛載到容器的/soft目錄,可通過以下方式指定:
# docker run -it -v /test:/soft centos /bin/bash
冒號(hào)":"前面的目錄是宿主機(jī)目錄,后面的目錄是容器內(nèi)目錄。
關(guān)于docker目錄掛載的總結(jié)
# docker run -it -v /test:/soft centos /bin/bash
一、容器目錄不可以為相對(duì)路徑
二、宿主機(jī)目錄如果不存在,則會(huì)自動(dòng)生成
# docker run -it -v test1:/soft centos /bin/bash
三、宿主機(jī)的目錄如果為相對(duì)路
?容器內(nèi)的/soft目錄掛載的是宿主機(jī)上的/var/lib/docker/volumes/test1/_data目錄
?所謂的相對(duì)路徑指的是/var/lib/docker/volumes/,與宿主機(jī)的當(dāng)前目錄無關(guān)。
四、如果在容器內(nèi)修改了目錄的屬主和屬組,那么對(duì)應(yīng)的掛載點(diǎn)會(huì)跟著修改
其他更多掛載目錄的方法 (可以使用鏡像直接掛載)
docker-修改容器的掛載目錄三種方式
docker -v 掛載 (Volume)
Docker的數(shù)據(jù)持久化—數(shù)據(jù)不隨著container的結(jié)束而結(jié)束,
數(shù)據(jù)存在于host機(jī)器上:(以下兩種中的一種)
- 存在于host的某個(gè)指定目錄中(使用bind mount),
- 使用docker自己管理的volume(/var/lib/docker/volumes下)
Docker Volume示例
-v maven-repository-volume:/MyPoroject/mvn/.m2
查看【maven-repository-volume】的volume:
docker volume inspect my-volume
注意:
- host機(jī)器的目錄路徑必須為全路徑(即需要以/或~/開始的路徑),
- 不然docker會(huì)把這個(gè)目錄當(dāng)做volume
docker –rm
容器退出時(shí)就能夠自動(dòng)清理容器內(nèi)部的文件系統(tǒng)。
即當(dāng)使用docker stop后,會(huì)直接刪除容器,若數(shù)據(jù)沒有掛載出來的話就直接被刪除了,所以這個(gè)需要看自己具體的業(yè)務(wù)場(chǎng)景去使用。
docker run的–rm選項(xiàng)詳解
docker -w -it
-w 指的是在哪個(gè)目錄下去執(zhí)行這個(gè)命令。這個(gè)目錄指的是容器內(nèi)的目錄。
docker run -i --rm --name getSign \ -v /opt/getSign:/usr/src/app -v /opt/getSign:/root/.npm \ -w /usr/src/app dockerhub.com/common/node:19.7.0 bash -c "pnpm install && pnpm run build:dev"
可以看到上面的示例,我把容器外的/opt/getSign的代碼目錄掛載到了容器內(nèi)的/usr/src/app目錄。那么此時(shí)我的代碼就是在容器內(nèi)的 /usr/src/app 目錄下了,所以我想執(zhí)行pnpm命令的時(shí)候,需要指定執(zhí)行目錄為 -w /usr/src/app 這個(gè)目錄。