Docker基本命令
- docker ps
docker ps命令會列出所有運行中的容器。這隱藏了非運行態容器的存在,如果想要找出這些容器,我們需要使用下面這個命令。
docker ps -a
- docker images
docker images命令會列出了所有頂層top-level鏡像。實際上,在這裏我們沒有辦法區分一個鏡像和一個只讀層,所以我們提出了top-level鏡像。只有創建容器時使用的鏡像或者是直接pull下來的鏡像能被稱爲頂層top-level鏡像,並且每一個頂層鏡像下面都隱藏了多個鏡像層
docker images -a
該命令列出了所有的鏡像,也可以說是列出了所有的可讀層。如果你想要查看某一個image-id下的所有層,可以使用docker history來查看。
- docker stop <container-id>
docker stop命令會向運行中的容器發送一個SIGTERM的信號,然後停止所有的進程。
- docker kill <container-id>
docker kill 命令向所有運行在容器中的進程發送了一個不友好的SIGKILL信號。
- docker pause <container-id>
docker stop和docker kill命令會發送UNIX的信號給運行中的進程,docker pause命令則不一樣,它利用了cgroups的特性將運行中的進程空間暫停。
- docker rm <container-id>
該命令會移除構成容器的可讀寫層。注意,這個命令只能對非運行狀態容器執行。
- doccker rmi <image-id>
docker rmi命令會移除構成鏡像的一個只讀層。你只能夠使用docker rmi來移除最頂層top level layer(也可以說是鏡像),你也可以使用-f參數來強制刪除中間的只讀層。
- docker commit <container-id>
該命令將容器的可讀性轉換爲了一個只讀層,這樣就把一個容器轉換成了不可變的鏡像。
- docker build
構建
- docker exec <running-container-id>
該命令會在運行中的容器執行一個新的進程
- docker inspect <container-id> or <image-id>
docker inspect命令會提取出容器或者鏡像最頂層的元數據。
- docker save <image-id>
該命令會創建一個鏡像的壓縮文件,這個文件能夠在;另外一個主機的docker上使用。和export命令不同,這個命令爲每一個層都保存了他們的元數據。這個命令只能對鏡像生效。
- docker export <container-id>
該命令會創建一個tar文件,並且移除了元數據和不必要的層,將多個層整合成了一個層,只保存了當前統一視角看到的內容
- docker history <image-id>
這個命令遞歸的輸出指定鏡像的歷史鏡像。
- 刪除所有終止的容器
docker rm $(docker ps -a -q)
docker基本命令
-
- 查看docker信息
# 查看版本
docker version
#顯示docker系統信息
docker info
- 2.對image的操作
# 檢索image
docker search image_name
# 下載image
docker pull image_name
# 列出鏡像列表
# -a 展示所有image; -q 僅展示id,
docker images
# 刪除一個或多個鏡像
# -f 強制,
docker rmi image_nmae
# 顯示一個鏡像的歷史
docker history image_nmae
啓動容器
OPTIONS說明:
-a stdin: 指定標準輸入輸出內容類型,可選 STDIN/STDOUT/STDERR 三項;
-d: 後臺運行容器,並返回容器ID;
-i: 以交互模式運行容器,通常與 -t 同時使用;
-t: 爲容器重新分配一個僞輸入終端,通常與 -i 同時使用;
--name="nginx-lb": 爲容器指定一個名稱;
--dns 8.8.8.8: 指定容器使用的DNS服務器,默認和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默認和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 設置環境變量;
--env-file=[]: 從指定文件讀入環境變量;
--cpuset="0-2" or --cpuset="0,1,2": 綁定容器到指定CPU運行;
-m :設置容器使用內存最大值;
--net="bridge": 指定容器的網絡連接類型,支持 bridge/host/none/container: 四種類型;
--link=[]: 添加鏈接到另一個容器;
--expose=[]: 開放一個端口或一組端口;
# 在容器中運行echo命令,輸出hello word
docker run image_name echo "hello word"
# 交互式進入容器中
docker run -i -t image_name /bin/bash
# 在容器中安裝新的程序
docker run image_name yum install -y app_name
Note: 在執行apt-get 命令的時候,要帶上-y參數。如果不指定-y參數的話,apt-get命令會進入交互模式,需要用戶輸入命令來進行確認,但在docker環境中是無法響應這種交互的。apt-get 命令執行完畢之後,容器就會停止,但對容器的改動不會丟失。
查看容器
1. 最常見的用法
$ docker ps
顯示當前正在運行的容器。
在 PORTS 一列,如果暴露的端口是連續的,還會被合併在一起,例如一個容器暴露了3個 TCP 端口:100,101,102,則會顯示爲 100-102/tcp。
2. 顯示所有狀態的容器
$ docker ps -a
容器的狀態共有 7 種:created|restarting|running|removing|paused|exited|dead。
3. 顯示最後被創建的 n 個容器
$ docker ps -n 3
注意,這裏不限狀態。
4. 顯示最後被創建的容器
$ docker ps -l
相當於 docker ps -n 1。
5. 顯示完整輸出
$ docker ps --no-trunc
即不會截斷輸出。該選項有點長,其中 trunc 算是 truncate 的縮寫。
6. 只顯示容器 ID
$ docker ps -q
清理容器時非常好用,filter 過濾顯示一節有具體實例。
7. 顯示容器文件大小
$ docker ps -s
該命令很實用,可以獲得 2 個數值:一個是容器真實增加的大小,一個是整個容器的虛擬大小。
8 -f
1. 選項後跟的都是鍵值對 key=value (可不帶引號),如果有多個過濾條件,就多次使用 filter 選項。例如:
docker ps --filter id=a1b2c3 --filter name=bingohuang
2. 相同條件之間的關係是或,不同條件之間的關係是與。例如:
docker ps --filter name=bingo --filter name=huang --filter status=running
以上過濾條件會找出 name 包含 bingo 或 huang 並且 status 爲 running 的容器。
3. id 和 name,支持正則表達式,使用起來非常靈活。例如:
docker ps --filter name=^/bingohuang$
精確匹配 name 爲 bingohuang 的容器。注意,容器實際名稱,開頭是有一個正斜線 / ,可用 docker inspect 一看便知。
docker ps --filter name=.*bingohuang.*
匹配 name 包含 bingohuang 的容器,和 --filter name=bingohuang 一個效果。
最後, 舉一個複雜點的例子,用於清理名稱包含 bingohuang,且狀態爲 exited 或 dead 的容器:
docker rm $(docker ps -q --filter name=.*bingohuang.* --filter status=exited --filter status=dead2>/dev/null)
Format 格式化顯示
如果想自定義顯示容器字段,可以用格式化選項 --format 。
1. 當使用了 --format 選項,那麼 ps 命令只會輸出 template 中指定的內容:
$ docker ps --format "{{.ID}}: {{.Command}}"
a87ecb4f327c: /bin/sh -c #(nop) MA
01946d9d34d8: /bin/sh -c #(nop) MA
c1d3b0166030: /bin/sh -c yum -y up
41d50ecd2f57:/bin/sh -c #(nop) MA
2. 如果想帶上表格列頭,需要再 template 中加上 table 指令:
保存對容器的修改
- 當你對某一個容器做了修改之後(通過在容器中運行某一個命令),可以把對容器的修改保存下來,這樣下次可以從保存後的最新狀態運行該容器。
# -a 作者信息, -m 提交的信息
docker commit ID new_image_name
Note:image相當於類,container相當於實例,不過可以動態給實例安裝新軟件,然後把這個container用commit命令固化成一個image。
對容器的操作(注意是容器,不是鏡像)
# 刪除所有容器
docker rm `docker ps -a -q`
# 刪除鏡像,注意,需要先刪除容器,並且刪除前需要保證容器時停止的,然後才能刪除鏡像.
docker rmi image_id
#刪除單個容器;- f 強制;-l, 刪除指定的鏈接,而不是底層容器;-v 刪除與容器關聯的卷
docker rm Name/ID
# 停止、啓動、殺死一個容器
docker stop Name/ID
docker start Name/ID
docker kill Name/ID
# 從一個容器中獲取日誌
# -f ,-t 展示時間戳
# 列出一個容器裏面被改變的文件或者目錄,list列表會顯示出三種事件,A 增加的, D 刪除的 ,C 被改變的
docker diff Name/ID
# 顯示一個運行的容器裏面的進程信息
docker top Name/ID
# 從容器裏面拷貝文件、目錄到本地一個路徑
docker restart Name/ID
# 附加到一個運行的容器上面
#--detach-keys string 覆蓋用於分離容器的鍵序列
#--no-stdin 沒有附加STDIN
#--sig-proxy 代理所有接收到的信號到進程(默認爲true)
保存和加載鏡像
- 當需要把一臺機器上的鏡像遷移到另一臺機器的時候,需要保存鏡像與加載鏡像。
# 保存鏡像到一個tar包;-o filename 寫入到這個文件。
docker save image_name -o file_path
# 加載一個tar包格式的鏡像; -i --input="" read from a tar archive file
docker load -i file_path
# 機器a
docker save image_name > /home/save.tar
# 使用scp將save.tar拷到機器b上
docker load < /home/save.tar
8.登錄registry server
# 登陸registry server; -e, --email="" Email; -p, --password="" Password; -u, --username="" Username
$docker login
登錄成功後會在用戶目錄下的.docker目錄中有一個config.json文件,裏面保存了用戶的信息.
9. 發佈image
docker push new_image_name
10. 根據Dockerfile構建出一個容器
--add-host list 添加自定義主機到ip映射(主機:ip)
--build-arg list 設置構建時變量
--cache-from strings 將圖像視爲緩存源
--cgroup-parent string 可選的容器父cgroup
--compress 使用gzip壓縮構建上下文
--cpu-period int 限制CPU CFS(完全公平調度程序)的週期
--cpu-quota int 限制CPU CFS(完全公平調度程序)配額
-c, --cpu-shares int CPU份額(相對權重)
--cpuset-cpus string 允許執行的cpu (0- 3,0,1)
--cpuset-mems string 允許執行的MEMs (0- 3,0,1)
--disable-content-trust 跳過圖像驗證(默認爲true)
-f, --file string Dockerfile的名稱(默認爲‘PATH/Dockerfile’)
--force-rm 總是移除中間容器
--iidfile string 將圖像ID寫入文件
--isolation string 容器隔離技術
--label list 爲圖像設置元數據
-m, --memory bytes 內存限制
--memory-swap bytes 交換限制等於內存加上交換:'-1'以啓用無限交換
--network string 在構建期間爲運行指令設置網絡模式(默認“默認”)
--no-cache 在構建映像時不使用緩存
--pull 總是嘗試拉出圖像的新版本
-q, --quiet 成功時禁止生成輸出和打印圖像ID
--rm 成功構建後刪除中間容器(默認爲true)
--security-opt strings 安全選項
--shm-size bytes /dev/shm大小
-t, --tag list 名稱和可選的“Name:tag”格式的標記
--target string 設置要構建的目標構建階段。
--ulimit ulimit Ulimit選項(默認[])
docker build -t image_name Dockerfile_path
爲鏡像打印標記
dcoker tag server:latest myname/server:lastest
or
docker tag d583c3ac45fd myname/server:latest
# https://blog.csdn.net/yangshangwei/article/details/52799675
最後歡迎大家批評指正,您的建議就是我前進的動力。