K8S系列知識總結備忘之 :docker常用命令

有點長,筆記複製過來的,將就下,有空再整理。

常用命令
search /pull /images /create /start /run / attach /ps /logs/restart /stop/ kill /rm

docker info #查看docker信息。
docker pull gitlab/gitlab-ce #拉取gitlab鏡像 docker pull 鏡像名稱;
docker images -a #查看鏡像倉庫中的鏡像。
docker search mysql #查找mysql鏡像 docker search [OPTIONS] TERM
docker rmi docker.io/ubuntu #刪除鏡像

docker rm fb087642b497(鏡像ID) #刪除容器
docker start 容器名或容器ID #啓動狀態爲:Created 的容器。例如:docker start e7b05fab28a1
docker stop 容器名或容器ID #停止容器。例如: docker stop docker_restart

docker run -p 6380:6379 -d redis redis-server --appendonly yes #啓動鏡像,拉取容器6380爲宿主機端口,6379爲容器端口。
docker run -i -t -v -p 3306:3306 /var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=hsulei mysql

docker exec -it bash|sh #進入容器,container 爲容器ID ,
#例如:docker exec -it a7ebbc217dd0 bash

docker pull alpine:latest ;
docker putll busybox:latest;
docker images ;
docker run --name d1 -it busybox:latest;

docker inspect nexus ;#查詢容器的IP等信息。

docker commit -p b1 #基於某個鏡像製作鏡像。
docker tag 容器ID xxx/xxx:v-10.1.1 # 給容器打標籤。

容器生命週期管理
docker run :創建一個新的容器並運行一個命令
實例:
1、使用docker鏡像nginx:latest以後臺模式啓動一個容器,並將容器命名爲mynginx。
docker run --name mynginx -d nginx:latest

2、使用鏡像 nginx:latest,以後臺模式啓動一個容器,將容器的 80 端口映射到主機的 80 端口,主機的目錄 /data1 映射到容器的 /data。
docker run -p 80:80 -v /data1:/data -d nginx:latest

3、使用鏡像nginx:latest以交互模式啓動一個容器,在容器內執行/bin/bash命令。
runoob@runoob:~$ docker run -it nginx:latest /bin/bash

4、

參數:
–restart=always #設置自動啓動。
-d, --detach=false, 指定容器運行於前臺還是後臺,默認爲false
-i, --interactive=false, 打開STDIN,用於控制檯交互
-t, --tty=false, 分配tty設備,該可以支持終端登錄,默認爲false
-u, --user="", 指定容器的用戶
-a, --attach=[], 登錄容器(必須是以docker run -d啓動的容器)
-w, --workdir="", 指定容器的工作目錄
-c, --cpu-shares=0, 設置容器CPU權重,在CPU共享場景使用
-e, --env=[], 指定環境變量,容器中可以使用該環境變量
-m, --memory="", 指定容器的內存上限
-P, --publish-all=false, 指定容器暴露的端口
-p, --publish=[], 指定容器暴露的端口
-h, --hostname="", 指定容器的主機名
-v, --volume=[], 給容器掛載存儲卷,掛載到容器的某個目錄 -v /data/www:/var/www (/data/www是宿主機目錄,/var/www是容器目錄)
–volumes-from=[], 給容器掛載其他容器上的卷,掛載到容器的某個目錄
–cap-add=[], 添加權限,權限清單詳見:http://linux.die.net/man/7/capabilities
–cap-drop=[], 刪除權限,權限清單詳見:http://linux.die.net/man/7/capabilities
–cidfile="", 運行容器後,在指定文件中寫入容器PID值,一種典型的監控系統用法
–cpuset="", 設置容器可以使用哪些CPU,此參數可以用來容器獨佔CPU
–device=[], 添加主機設備給容器,相當於設備直通
–dns=[], 指定容器的dns服務器
–dns-search=[], 指定容器的dns搜索域名,寫入到容器的/etc/resolv.conf文件
–entrypoint="", 覆蓋image的入口點
–env-file=[], 指定環境變量文件,文件格式爲每行一個環境變量
–expose=[], 指定容器暴露的端口,即修改鏡像的暴露端口
–link=[], 指定容器間的關聯,使用其他容器的IP、env等信息
–lxc-conf=[], 指定容器的配置文件,只有在指定–exec-driver=lxc時使用
–name="", 指定容器名字,後續可以通過名字進行容器管理,links特性需要使用名字
–net=“bridge”, 容器網絡設置:
bridge 使用docker daemon指定的網橋
host //容器使用主機的網絡
container:NAME_or_ID >//使用其他容器的網路,共享IP和PORT等網絡資源
none 容器使用自己的網絡(類似–net=bridge),但是不進行配置
–privileged=false, 指定容器是否爲特權容器,特權容器擁有所有的capabilities
–restart=“no”, 指定容器停止後的重啓策略:
no:容器退出時不重啓
on-failure:容器故障退出(返回值非零)時重啓
always:容器退出時總是重啓
–rm=false, 指定容器停止後自動刪除容器(不支持以docker run -d啓動的容器)
–sig-proxy=true, 設置由代理接受並處理信號,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

Docker start/stop/restart
docker start :啓動一個或多個已經被停止的容器
docker start myrunoob

docker stop :停止一個運行中的容器
docker stop myrunoob

docker restart :重啓容器
docker restart myrunoob
docker kill :殺掉一個運行中的容器。
docker kill -s KILL mynginx # -s :向容器發送一個信號

docker rm :刪除一個或多少容器
參數:
-f :通過SIGKILL信號強制刪除一個運行中的容器
-l :移除容器間的網絡連接,而非容器本身
-v :-v 刪除與容器關聯的卷

實例
#強制刪除容器db01、db02
docker rm -f db01 db02
#移除容器nginx01對容器db01的連接,連接名db
docker rm -l db
#刪除容器nginx01,並刪除容器掛載的數據卷
docker rm -v nginx01

docker create :創建一個新的容器但不啓動它
語法同 docker run
案例:
使用docker鏡像nginx:latest創建一個容器,並將容器命名爲myrunoob
runoob@runoob:~$ docker create --name myrunoob nginx:latest

docker exec :在運行的容器中執行命令
參數:
-d :分離模式: 在後臺運行
-i :即使沒有附加也保持STDIN 打開
-t :分配一個僞終端

案例:
#在容器mynginx中以交互模式執行容器內/root/runoob.sh腳本
runoob@runoob:~$ docker exec -it mynginx /bin/sh /root/runoob.sh
#在容器mynginx中開啓一個交互模式的終端
runoob@runoob:~$ docker exec -i -t mynginx /bin/bash
#或者 docker exec -it nodeID /bin/bash

容器操作
docker ps : 列出容器
參數:
-a :顯示所有的容器,包括未運行的。
-f :根據條件過濾顯示的內容。
–format :指定返回值的模板文件。
-l :顯示最近創建的容器。
-n :列出最近創建的n個容器。
–no-trunc :不截斷輸出。
-q :靜默模式,只顯示容器編號。
-s :顯示總的文件大小。

案列:
docker ps -n 5 #列出最近創建的5個容器信息。
docker ps -a -q #列出所有創建的容器ID。

docker ps -a|grep Exited|awk ‘{print $1}’ #列出所有停止的容器ID,
docker rm $(sudo docker ps -qf status=exited) #刪除所有停止狀態的容器。

docker start docker ps -a -q #啓動所有容器。
docker inspect : 獲取容器/鏡像的元數據。
案列,獲取容器IP:
docker inspect --format=’{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ mymysql
參數:
-f :指定返回值的模板文件。
-s :顯示總的文件大小。
–type :爲指定類型返回JSON。

docker top :查看容器中運行的進程信息,支持 ps 命令參數。
容器運行時不一定有/bin/bash終端來交互執行top命令,而且容器還不一定有top命令,可以使用docker top來實現查看container中正在運行的進程。

#查看容器mymysql的進程信息。
runoob@runoob:~/mysql$ docker top mymysql
#查看所有運行容器的進程信息。
for i in docker ps |grep Up|awk '{print $1}';do echo \ &&docker top $i; done

docker attach :連接到正在運行中的容器。
要attach上去的容器必須正在運行,可以同時連接上同一個container來共享屏幕(與screen命令的attach類似)。
官方文檔中說attach後可以通過CTRL-C來detach,但實際上經過我的測試,如果container當前在運行bash,CTRL-C自然是當前行的輸入,沒有退出;如果container當前正在前臺運行進程,如輸出nginx的access.log日誌,CTRL-C不僅會導致退出容器,而且還stop了。這不是我們想要的,detach的意思按理應該是脫離容器終端,但容器依然運行。好在attach是可以帶上–sig-proxy=false來確保CTRL-D或CTRL-C不會關閉容器。

實例:
容器mynginx將訪問日誌指到標準輸出,連接到容器查看訪問信息。
runoob@runoob:~$ docker attach --sig-proxy=false mynginx

docker events : 從服務器獲取實時事件
-f :根據條件過濾事件;
–since :從指定的時間戳後顯示所有事件;
–until :流水時間顯示到指定的時間爲止;

#顯示docker 2016年7月1日後的所有事件。
runoob@runoob:~/mysql$ docker events --since=“1467302400”

#顯示docker 鏡像爲mysql:5.6 2016年7月1日後的相關事件。
runoob@runoob:~/mysql$ docker events -f “image”=“mysql:5.6” --since=“1467302400”
#如果指定的時間是到秒級的,需要將時間轉成時間戳。如果時間爲日期的話,可以直接使用,如–since=“2016-07-01”。

docker logs : 獲取容器的日誌
參數:
-f : 跟蹤日誌輸出
–since :顯示某個開始時間的所有日誌
-t : 顯示時間戳
–tail :僅列出最新N條容器日誌

實例
#跟蹤查看容器mynginx的日誌輸出。
runoob@runoob:~$ docker logs -f mynginx
#查看容器mynginx從2016年7月1日後的最新10條日誌。
docker logs --since=“2016-07-01” --tail=10 mynginx

docker logs -f -t --since=“2019-01-24” --tail=10 edu_web_1
docker wait : 阻塞運行直到容器停止,然後打印出它的退出代碼。
案例:
docker wait CONTAINER
docker export :將文件系統作爲一個tar歸檔文件導出到STDOUT。
參數:
-o :將輸入內容寫到文件。

案例:
將id爲a404c6c174a2的容器按日期保存爲tar文件。
runoob@runoob:~$ docker export -o mysql-date +%Y%m%d.tar a404c6c174a2
ls mysql-date +%Y%m%d.tar

docker port :列出指定的容器的端口映射,或者查找將PRIVATE_PORT NAT到面向公衆的端口。

實例:
查看容器mynginx的端口映射情況。
runoob@runoob:~$ docker port mymysql

容器rootfs命令
docker commit : 從容器創建一個新的鏡像。
案例:
docker commit -a “runoob.com” -m “my apache” a404c6c174a2 mymysql:v1
參數:
-a :提交的鏡像作者;
-c :使用Dockerfile指令來創建鏡像;
-m :提交時的說明文字;
-p :在commit時,將容器暫停。

docker cp :用於容器與主機之間的數據拷貝。
參數:
-L :保持源目標中的鏈接

實例:
#將主機/www/runoob目錄拷貝到容器96f7f14e99ab的/www目錄下。
docker cp /www/runoob 96f7f14e99ab:/www/
#將主機/www/runoob目錄拷貝到容器96f7f14e99ab中,目錄重命名爲www。
docker cp /www/runoob 96f7f14e99ab:/www
#將容器96f7f14e99ab的/www目錄拷貝到主機的/tmp目錄中。
docker cp 96f7f14e99ab:/www /tmp/

docker diff : 檢查容器裏文件結構的更改。
實例
查看容器mymysql的文件結構更改。
runoob@runoob:~$ docker diff mymysql
A /logs
A /mysql_data
C /run
C /run/mysqld
A /run/mysqld/mysqld.pid
A /run/mysqld/mysqld.sock
C /tmp

鏡像倉庫
login 登錄倉庫
docker login : 登陸到一個Docker鏡像倉庫,如果未指定鏡像倉庫地址,默認爲官方倉庫 Docker Hub
docker logout : 登出一個Docker鏡像倉庫,如果未指定鏡像倉庫地址,默認爲官方倉庫 Docker Hub

#登陸到Docker Hub
docker login -u 用戶名 -p 密碼
docker login -u admin -p RCS@12345 10.1.35.4:5080 #登陸到和飛信的harbor倉庫。
#登出Docker Hub
docker logout
pull 拉取鏡像
docker pull : 從鏡像倉庫中拉取或者更新指定鏡像
參數:
-a :拉取所有 tagged 鏡像
–disable-content-trust :忽略鏡像的校驗,默認開啓

案列:
docker pull -a java
push 上傳鏡像
docker push : 將本地的鏡像上傳到鏡像倉庫,要先登陸到鏡像倉庫
參數: --disable-content-trust :忽略鏡像的校驗,默認開啓

上傳本地鏡像myapache:v1到鏡像倉庫中。
docker push myapache:v1

search 查找鏡像
docker search : 從Docker Hub查找鏡像
參數:
–automated :只列出 automated build類型的鏡像;
–no-trunc :顯示完整的鏡像描述;
-s :列出收藏數不小於指定值的鏡像。

實例:
從Docker Hub查找所有鏡像名包含java,並且收藏數大於10的鏡像
runoob@runoob:~$ docker search -s 10 java

查看鏡像版本到:
https://hub.docker.com/u/library
這個上去搜索,不過有個大問題,就是網速很慢很慢。
本地鏡像管理
images 查看鏡像
docker images : 列出本地鏡像。
參數:
-a :列出本地所有的鏡像(含中間映像層,默認情況下,過濾掉中間映像層);
–digests :顯示鏡像的摘要信息;
-f :顯示滿足條件的鏡像;
–format :指定返回值的模板文件;
–no-trunc :顯示完整的鏡像信息;
-q :只顯示鏡像ID。
案列:
docker images ubuntu

rmi 刪除鏡像
docker rmi : 刪除本地一個或多少鏡像。
參數:
-f :強制刪除;
–no-prune :不移除該鏡像的過程鏡像,默認移除;
案列:
docker rmi -f runoob/ubuntu:v4
tag 鏡像打標籤
docker tag : 標記本地鏡像,將其歸入某一倉庫。 給鏡像打標籤。
實例:
將鏡像ubuntu:15.10標記爲 runoob/ubuntu:v3 鏡像。
root@runoob:~# docker tag ubuntu:15.10 runoob/ubuntu:v3
root@runoob:~# docker images runoob/ubuntu:v3

build 打包鏡像
docker build 命令用於使用 Dockerfile 創建鏡像。

參數:
–build-arg=[] :設置鏡像創建時的變量;
–cpu-shares :設置 cpu 使用權重;
–cpu-period :限制 CPU CFS週期;
–cpu-quota :限制 CPU CFS配額;
–cpuset-cpus :指定使用的CPU id;
–cpuset-mems :指定使用的內存 id;
–disable-content-trust :忽略校驗,默認開啓;
-f :指定要使用的Dockerfile路徑;
–force-rm :設置鏡像過程中刪除中間容器;
–isolation :使用容器隔離技術;
–label=[] :設置鏡像使用的元數據;
-m :設置內存最大值;
–memory-swap :設置Swap的最大值爲內存+swap,"-1"表示不限swap;
–no-cache :創建鏡像的過程不使用緩存;
–pull :嘗試去更新鏡像的新版本;
–quiet, -q :安靜模式,成功後只輸出鏡像 ID;
–rm :設置鏡像成功後刪除中間容器;
–shm-size :設置/dev/shm的大小,默認值是64M;
–ulimit :Ulimit配置。
–tag, -t: 鏡像的名字及標籤,通常 name:tag 或者 name 格式;可以在一次構建中爲一個鏡像設置多個標籤。
–network: 默認 default。在構建期間設置RUN指令的網絡模式

案列:
使用當前目錄的 Dockerfile 創建鏡像,標籤爲 runoob/ubuntu:v1 這是最常用的:
docker build -t runoob/ubuntu:v1 .

使用URL github.com/creack/docker-firefox 的 Dockerfile 創建鏡像。
docker build github.com/creack/docker-firefox

也可以通過 -f Dockerfile 文件的位置:
$ docker build -f /path/to/a/Dockerfile .

在 Docker 守護進程執行 Dockerfile 中的指令前,首先會對 Dockerfile 進行語法檢查,有語法錯誤時會返回:
$ docker build -t test/myapp .

history 鏡像創建歷史
docker history : 查看指定鏡像的創建歷史。
參數:
-H :以可讀的格式打印鏡像大小和日期,默認爲true;
–no-trunc :顯示完整的提交記錄;
-q :僅列出提交記錄ID。
案列:
查看本地鏡像runoob/ubuntu:v3的創建歷史。
root@runoob:~# docker history runoob/ubuntu:v3
save 導出鏡像
docker save : 將指定鏡像保存成 tar 歸檔文件。
參數:-o :輸出到的文件。
案列: docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3

import 導入鏡像
docker import : 從歸檔文件中創建鏡像。
參數:
-c :應用docker 指令創建鏡像;
-m :提交時的說明文字;
案列:
docker import my_ubuntu_v3.tar runoob/ubuntu:v4

使用 save 導出,就要用load導入,否則會啓動不了:
docker save ubuntu:load>/root/ubuntu.tar
docker load<ubuntu.tar

使用 export 導出,就使用import導入:
docker export 98ca36> ubuntu.tar
cat ubuntu.tar | sudo docker import - ubuntu:import
info|version
docker info #查看docker系統信息。
docker version # 顯示 Docker 版本信息。 參數: -f :指定返回值的模板文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章