0 背景
在開發(fā)過程中津肛,經(jīng)常涉及到 docker 的相關(guān)操作屎飘,本文對常用的指令進行匯總
1 鏡像相關(guān)
1.1 查看鏡像列表
sudo docker images
1.2 鏡像搜索
比如搜索 ubuntu 基礎(chǔ)鏡像
sudo docker search ubuntu
可輸出官方的鏡像名稱竭缝,以及 star 數(shù)量,選擇一個需要的鏡像下拉即可
1.3 下拉鏡像
sudo docker pull 鏡像名
sudo docker pull 鏡像名:Tag
1.4 刪除鏡像
sudo docker rmi -f 鏡像名/鏡像ID
1.5 保存鏡像
將我們的鏡像 保存為tar 壓縮文件 這樣方便鏡像轉(zhuǎn)移和保存 ,然后 可以在任何一臺安裝了docker的服務(wù)器上 加載這個鏡像
docker save 鏡像名/鏡像ID -o 鏡像保存在哪個位置與名字
1.6 加載鏡像
任何裝 docker 的地方加載鏡像保存文件,使其恢復(fù)為一個鏡像
docker load -i 鏡像保存文件位置
12 容器相關(guān)
2.1 容器列表
sudo docker ps
sudo docker ps -a # 查看所有容器 -----包含正在運行 和已停止的
2.2 創(chuàng)建容器
docker run -it -d --name 要取的別名 -p 宿主機端口:容器端口 -v 宿主機文件存儲位置:容器內(nèi)文件位置 鏡像名:Tag /bin/bash
參數(shù)含義:
-it 表示 與容器進行交互式啟動
-d 表示可后臺運行容器 (守護式運行)
--name 給要運行的容器 起的名字
/bin/bash 交互路徑
-p 將容器的端口映射到宿主機上悉罕,通過宿主機訪問內(nèi)部端口
-v 將容器內(nèi)的指定文件夾掛載到宿主機對應(yīng)位置
2.3 運行一個容器
# -it 表示 與容器進行交互式啟動 -d 表示可后臺運行容器 (守護式運行) --name 給要運行的容器 起的名字 /bin/bash 交互路徑
docker run -it -d --name 要取的別名 鏡像名:Tag /bin/bash
例如我們要啟動一個redis 把它的別名取為redis001 并交互式運行 需要的命令 —我這里指定版本號為5.0.5
1. 拉取redis 鏡像
docker pull redis:5.0.5
2.命令啟動
docker run -it -d --name redis001 redis:5.0.5 /bin/bash
3.容器端口與服務(wù)器端口映射
命令:
-p 宿主機端口:容器端口
1
還是使用前方的 redis 鏡像 嘗試 將6379端口 映射到服務(wù)器的8888 如果成功了的話 那么咱們訪問服務(wù)器的8888端口就會訪問到咱們的 docker 中 的容器 redis002
-p 8888:6379 解析 將容器內(nèi)部的 6379端口與docker 宿主機(docker裝在哪臺服務(wù)器 哪臺服務(wù)器就是宿主機)8888 端口進行映射 那通過外部訪問宿主機8888端口 即可訪問到 docker 容器 6379 端口了
docker run -itd --name redis002 -p 8888:6379 redis:5.0.5 /bin/bash
netstat是控制臺命令,是一個監(jiān)控TCP/IP網(wǎng)絡(luò)的非常有用的工具,它可以顯示路由表跟狱、實際的網(wǎng)絡(luò)連接以及每一個網(wǎng)絡(luò)接口設(shè)備的狀態(tài)信息
netstat -untlp
netstat -untlp
2.3 停止容器
sudo docker stop 容器名/容器ID
2.4 刪除容器
刪除一個容器
docker rm -f 容器名/容器ID
刪除多個容器 空格隔開要刪除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
刪除全部容器
docker rm -f $(docker ps -aq)
kill
docker kill 容器ID/容器名
2.5 進入容器
進入正在運行中的容器
sudo docker attach 容器ID/容器名
docker exec -it 容器名/容器ID /bin/bash 推薦使用
#進入 前面的 redis001容器
docker exec -it redis001 /bin/bash
2.6從容器內(nèi) 退出到自己服務(wù)器中 需注意 兩個退出命令的區(qū)別
直接退出 未添加 -d(持久化運行容器) 時 執(zhí)行此參數(shù) 容器會被關(guān)閉
exit
優(yōu)雅退出 --- 無論是否添加-d 參數(shù) 執(zhí)行此命令容器都不會被關(guān)閉
Ctrl + p + q
2.7容器文件拷貝 —無論容器是否開啟 都可以進行拷貝
#docker cp 容器ID/名稱:文件路徑 要拷貝到外部的路徑 | 要拷貝到外部的路徑 容器ID/名稱:文件路徑
#從容器內(nèi) 拷出
docker cp 容器ID/名稱: 容器內(nèi)路徑 容器外路徑
#從外部 拷貝文件到容器內(nèi)
docker cp 容器外路徑 容器ID/名稱: 容器內(nèi)路徑
2.8查看容器日志
docker logs -f --tail=要查看末尾多少行 默認all 容器ID
2.9運維
我們在運維的時候扎运,通常給一些軟件喜歡設(shè)置開機自啟動脖母,例如 mysql士鸥、redis,這樣測試環(huán)境服務(wù)器重啟時可節(jié)省不少運維時間成本,那么我們?nèi)绻莇ocker容器 是否也可以設(shè)置開機自啟動容器呢谆级?
啟動容器時烤礁,使用docker run命令時 添加參數(shù)--restart=always 便表示,該容器隨docker服務(wù)啟動而自動啟動
docker run -itd --name redis002 -p 8888:6379 --restart=always redis:5.0.5 /bin/bash
3.0運維數(shù)據(jù)掛載
什么是數(shù)據(jù)掛載肥照?
簡單來講脚仔,就是將容器內(nèi)的數(shù)據(jù)與外部宿主機文件綁定起來,類似一個雙持久化舆绎,當(dāng)容器刪除時鲤脏,宿主機文件數(shù)據(jù)目錄仍在,下次啟動容器只要將數(shù)據(jù)目錄指向宿主機數(shù)據(jù)所在位置即可恢復(fù)
具體請參考:docker 文件分層與數(shù)據(jù)卷掛載
方法一:
命令:
-v 宿主機文件存儲位置:容器內(nèi)文件位置
1
如此操作吕朵,就將 容器內(nèi)指定文件掛載到了宿主機對應(yīng)位置猎醇,-v命令可以多次使用,即一個容器可以同時掛載多個文件
-v 宿主機文件存儲位置:容器內(nèi)文件位置 -v 宿主機文件存儲位置:容器內(nèi)文件位置 -v 宿主機文件存儲位置:容器內(nèi)文件位置
1
示例:
# 運行一個docker redis 容器 進行 端口映射 兩個數(shù)據(jù)卷掛載 設(shè)置開機自啟動
docker run -d -p 6379:6379 --name redis505 --restart=always -v /var/lib/redis/data/:/data -v /var/lib/redis/conf/:/usr/local/etc/redis/redis.conf redis:5.0.5 --requirepass "password"
此方法完了你很無語努溃?那還不是得刪容器硫嘶?是呀!沒錯梧税!那么為什么你有數(shù)據(jù)恢復(fù)需求而沒有想到數(shù)據(jù)持久化沦疾,數(shù)據(jù)恢復(fù)備份,數(shù)據(jù)卷掛載第队?自己DEMO的吃虧哮塞,是為了平時開發(fā)少扣腦殼多摸魚!
方法二:不想刪容器斥铺,又想讓這個容器設(shè)置開機自啟動彻桃,那么我們修改其啟動配置即可坛善!
命令:
docker update --restart=always 容器Id 或者 容器名
或
docker container update --restart=always 容器Id 或者 容器名
如上晾蜘,雖然不刪容器就設(shè)置了自啟動需求滿足了邻眷,但是,危不危險剔交,這個容器有沒有需要數(shù)據(jù)恢復(fù)的情況肆饶?自己考量吧!岖常!
3.1更換容器名
docker rename 容器ID/容器名 新容器名
3.2docker 運維命令
可能有時候發(fā)布會遇到如下錯誤:
docker: write /var/lib/docker/tmp/GetImageBlob325372670: no space left on device
這個錯誤是docker在寫入的時候報錯無機器無空間
查看docker工作目錄
sudo docker info | grep "Docker Root Dir"
查看docker磁盤占用總體情況
du -hs /var/lib/docker/
查看Docker的磁盤使用具體情況
docker system df
查找大文件
find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr
查找指定docker使用目錄下大于指定大小文件
find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr |grep '/var/lib/docker/overlay2/*'
掛載
docker run -di --name tomcat9 -v /data/tomcat/webapps:/usr/local/tomcat/webapps --privileged=true -p 8083:8083 tomcat:9
構(gòu)建鏡像 Dockerfile
FROM openjdk:8
ADD docker-service3-1.0-SNAPSHOT.jar /app.jar
EXPOSE 8085
ENTRYPOINT ["java","-jar","/app.jar"]
docker build -t docker-service3 .
#創(chuàng)建 docker-service3 鏡像
. 是上下文路徑驯镊,那么什么是上下文路徑呢?
上下文路徑竭鞍,是指 docker 在構(gòu)建鏡像板惑,有時候想要使用到本機的文件(比如復(fù)制),docker build 命令得知這個路徑后偎快,會將路徑下的所有內(nèi)容打包冯乘。