關(guān)于鏡像
獲取鏡像
docker pull [image name] [option:tag]
//獲取postgres鏡像(沒(méi)有設(shè)置鏡像版本號(hào)則默認(rèn)獲取最新的,使用`latest`標(biāo)記)
docker pull postgres
or
docker pull postgres:11.14
列出本地鏡像
docker images
指定鏡像啟動(dòng)一個(gè)容器
//運(yùn)行postgres,最后一個(gè)postgres代表使用的鏡像名稱
//POSTGRES_PASSWORD=postgres :環(huán)境變量POSTGRES_PASSWORD额衙,代表設(shè)置密碼為postgres
//postgres有關(guān)的其他環(huán)境變量可以參考:https://hub.docker.com/_/postgres
docker run -d --restart always --name postgre -e POSTGRES_PASSWORD=postgres -p 5432:5432 postgres
指定鏡像啟動(dòng)并進(jìn)入容器
docker run -it [image name] /bin/bash
or
docker run -i -t [image name] /bin/bash
偽終端,輸入exit退出容器
image.png
利用Dockerfile創(chuàng)建鏡像
- 創(chuàng)建目錄和Dockerfile文件
//linux命令:創(chuàng)建目錄
mkdir [director name] ---- mkdir study
//進(jìn)入目錄
cd [director name] ---- cd study
//創(chuàng)建文件
touch [file name] ---- touch Dockerfile
- 編寫Dockerfile
//編輯文件
vi [file name] 按 `insert` or `i` 進(jìn)入編輯狀態(tài)
vi Dockerfile
編寫好的Dockerfile文件 , 按esc才顿,輸入 :wq 保存并退出
image.png
- 構(gòu)建鏡像
//“.” 是 Dockerfile 所在的路徑(當(dāng)前目錄)犁柜,也可以替換為一個(gè)具體的 Dockerfile 的路徑
docker build .
image.png
刪除本地鏡像
*注意:在刪除鏡像之前要先用 docker rm 刪掉依賴于這個(gè)鏡像的所有容器。
docker rmi [image id]
例如:docker rmi 07e2ee723e2d (07e2ee723e2d 為鏡像id)
刪除所有鏡像
docker rmi -f $(docker images -qa)
關(guān)鍵字刪除鏡像
docker rmi $(docker images | grep "關(guān)鍵字")
刪除未被使用的鏡像
docker image prune -a
關(guān)于容器
啟動(dòng)容器
//基于鏡像啟動(dòng)容器
docker run --name [container name] [image name]
//啟動(dòng)容器后臺(tái)運(yùn)行
docker run --name [container name] -d [image name]
//啟動(dòng)停止的容器 (可以寫多個(gè))
docker start [container name or id]
//重啟容器,(會(huì)把運(yùn)行中的容器停止,再重新啟動(dòng),可以寫多個(gè))
docker restart [container name or id]
查看啟動(dòng)的容器
docker ps
查看所有容器
docker ps -a
進(jìn)入啟動(dòng)后的容器
docker exec -it [container name or container id] /bin/bash
//缺點(diǎn):當(dāng)多個(gè)窗口同時(shí)attach同一個(gè)容器時(shí),所有窗口都會(huì)同步顯示.
//當(dāng)某個(gè)窗口因命令阻塞時(shí),其他窗口也無(wú)法執(zhí)行操作.
docker attach [container name or id]
//exec 和 attach的區(qū)別
attach 不會(huì)在容器中創(chuàng)建進(jìn)程執(zhí)行額外的命令朦乏,只是附著到容器上.
exec會(huì)在運(yùn)行的容器上創(chuàng)建進(jìn)程執(zhí)行新的命令.
//nsenter的方式
//要下載nsenter 的工具 util-linux
cd /tmp
wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz
tar -xvf util-linux-2.24.tar.gz
cd util-linux-2.24
./configure --without-ncurses
make nsenter && sudo cp nsenter /usr/local/bin
docker inspect -f {{.State.Pid}} [container id]
nsenter --target [上一個(gè)命令的輸出內(nèi)容] --mount --uts --ipc --net --pid
image.png
查看容器日志
docker logs -f [container id or name]
停止容器
docker stop [container name or id]
刪除容器
//只能刪除未運(yùn)行的容器
docker rm [container name or id]
例如:docker rm 6516c6b03ccd (6516c6b03ccd 為 容器id)
或者 docker rm redis (redis 為 容器名稱)
強(qiáng)制刪除容器(包括運(yùn)行的)
docker rm -f [container name or id]
例子同上
停用所有運(yùn)行中的容器
docker stop $(docker ps -q)
刪除全部已經(jīng)停止的容器
docker rm $(docker ps -aq)
停用并刪除所有容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
其他
查看docker版本
docker version
運(yùn)行docker
docker run -d -p 80:80 docker/getting-started
Options | Explain |
---|---|
-d | 在后臺(tái)運(yùn)行容器 |
-p | 設(shè)置端口映射 |
-a | 獲取所有/指定更新的用戶信息 |
--restart always | docker 啟動(dòng)時(shí)自動(dòng)啟動(dòng)容器 |
--name | 設(shè)置啟動(dòng)的容器名稱 |
-e | 指定環(huán)境變量的值 |
-m | 指定提交的說(shuō)明信息 |
-i | 以交互模式運(yùn)行容器,讓容器的標(biāo)準(zhǔn)輸入保持打開(kāi)氧骤,通常與 -t 同時(shí)使用 |
-t | 為容器重新分配一個(gè)偽輸入終端呻疹,并綁定到容器的標(biāo)準(zhǔn)輸入上,通常與 -i 同時(shí)使用 |
-f | 通過(guò) SIGKILL 信號(hào)強(qiáng)制刪除一個(gè)運(yùn)行中的容器 or 實(shí)時(shí)查看日志 |
-l | 移除容器間的網(wǎng)絡(luò)連接筹陵,而非容器本身 |
-v | 刪除與容器關(guān)聯(lián)的卷 or 創(chuàng)建一個(gè)數(shù)據(jù)卷并掛載到容器里 |
:ro | 設(shè)置掛載數(shù)據(jù)卷的權(quán)限為只讀 |
-P | 隨機(jī)映射一個(gè) 49000~49900 的端口到內(nèi)部容器開(kāi)放的網(wǎng)絡(luò)端口 |
-rm | 用-rm 啟動(dòng)的容器 容器終止時(shí)會(huì)自動(dòng)刪除刽锤,不能和-d一起使用 |
--link | 使容器之間進(jìn)行安全的交互 |
-b BRIDGE or –bridge=BRIDGE | 指定容器掛載的網(wǎng)橋 |
–bip=CIDR | 定制 docker0 的掩碼 |
–icc=true or false | 是否支持容器之間進(jìn)行通信 |
歡迎補(bǔ)充