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