學習Docker的使用。
包括Docker的一些命令,Docker容器的使用,Docker鏡像的使用,Docker容器連接等內容。
Docker使用思維導圖及各各種命令
- Docker的架構
- Docker常用命令
- 搜索命令:docker search [OPTIONS] TERM
- 下載鏡像:docker pull
- 列出鏡像:docker images
- 刪除本地鏡像:docker rmi
- 保存鏡像:docker save
- 加載鏡像:docker load
- 構建鏡像:通過Dockerfile構建鏡像
- Docker容器常用命令
- 新建並啓動容器:docker run
- 列出容器:docker ps
- 停止容器:docker stop
- 強制停止容器:docker kill
- 啓動已停止的容器:docker start
- 重啓容器:docker restart
- 進入容器:docker attach
- 刪除容器:docker rm
- 導出容器:docker export
- 導入容器:docker import
- 查看進程並幹掉進程
- 思維導圖
- 一張圖總結 Docker 的命令
- Docker運維流程圖
相關文章:
Docker中文社區
Docker的架構
構建分發運行鏡像
- Client(客戶端):是Docker的用戶端,可以接受用戶命令和配置標識,並與Docker daemon通信。
- Images(鏡像):是一個只讀模板,含創建Docker容器的說明,它與操作系統的安裝光盤有點像。
- Containers(容器):鏡像的運行實例,鏡像與容器的關係類比面向對象中的類和對象。
- Registry(倉庫):是一個集中存儲與分發鏡像的服務。最常用的Registry是官方的Docker Hub 。
Docker deamon(Docker守護進程):
Docker deamon是一個運行在宿主機(DOCKER_HOST)的後臺進程。可通過Dokcer客戶端與之通信。
Client(Docker客戶端):
Docker客戶端是Docker的用戶界面,它可以接受用戶命令和配置標識,並與Docker daemon 通信。docker build等都是Docker的相關命令。
Images(Docker鏡像):
Docker鏡像是一個只讀模板,它包含創建Docker容器的說明。它和系統安裝光盤有點像——使用系統安裝光盤可以安裝系統,同理,使用Docker鏡像可以運行Docker鏡像中的程序。
Container(容器):
容器是鏡像可運行實例。鏡像和容器的關係有點類似於面向對象中,類和對象的關係。可通過Docker API或者CLI命令來啓停、移動、刪除容器。
Registry(註冊中心):
Docker Registry是一個集中存儲與分發鏡像的服務。構建完Docker鏡像後,就可在當前宿主機上運行。但如果想要在啓停機器上運行這個鏡像,就需要手動複製。此時可藉助Docker Registry來避免鏡像的手動複製。
一個Docker Registry可包含多個Docker倉庫,每個倉庫可包含多個鏡像標籤,每個標籤對應一個Docker鏡像。
Docker常用命令
搜索命令:docker search [OPTIONS] TERM
參數列表:
Name,shorthand Default Description
–filter,-f 根據指定條件過濾結果
–limit 25 搜索結果的最大條數
–no-trunc false 不截斷輸出,顯示完整的輸出
Name,shorthand | Default | Description |
---|---|---|
–filter,-f | 根據指定條件過濾結果 | |
–limit | 25 | 搜索結果的最大條數 |
–no-trunc | false | 不截斷輸出,顯示完整的輸出 |
示例:docker search java
NAME | DESCRIPTION | STARS | OFFICIAL | AUTOMATED |
---|---|---|---|---|
java | Java is a concurrent,… | 1281 | [OK] | |
anapsix/alpine-java | Oracle Java 8(and 7),… | 190 | [OK] |
- NAME:鏡像倉庫名稱。
- DESCRIPTION:鏡像倉庫描述。
- STARS:鏡像倉庫收藏數,類似Git的Stars。
- OFFICIAL:表示是否爲官方倉庫。
- AUTOMATED:表示是否是自動構建的鏡像倉庫。
下載鏡像:docker pull
使用docker pull從Docker Registry上下載鏡像。
docker pull [OPTIONS] NAME [:TAG|@DIGEST]
Name,shorthand | Default | Description |
---|---|---|
–all-tags,-a | false | 下載所有標籤的鏡像 |
–disable-content-trust | true | 忽略鏡像的校驗 |
示例:docker pull java;docker pull reg.itmuch.com/java:7;(可以從指定Docker Registry中下載標籤爲7的Java鏡像)
列出鏡像:docker images
命令格式:docker images [OPTIONS] [REPOSITORY[:TAG]]
Name,shorthand | Default | Description |
---|---|---|
–all,-a | false | 列出本地所有的鏡像(包括中間鏡像層,默認情況下,過濾中間映像層) |
–digests | false | 顯示摘要信息 |
–filter,-f | 顯示滿足條件的鏡像 | |
–format | 通過Go語言模板文件展示鏡像 | |
–no-trunc | false | 不截斷輸出,顯示完整的鏡像信息 |
–quiet,-p | false | 只顯示鏡像ID |
示例:
docker images
docker images java
docker images java:8
docker images --digests
docker images --filter “dangling=true” #展示虛懸鏡像
執行該命令後,會看到類似如下表格:
REPOSITORY | TAG | IMAGE ID | CREATED | SIZE |
---|---|---|---|---|
java | latest | 861e95c114d6 | 4 weeks ago | 643.1MB |
該表格包含5列,含義如下:
- REPOSITORY:鏡像所屬倉庫名稱
- TAG:鏡像標籤。默認是latest,表示最新。
- IMAGE ID:鏡像ID,表示鏡像唯一標識。
- CREATED:鏡像創建時間。
- SIZE:鏡像大小。
刪除本地鏡像:docker rmi
命令格式:docker rmi [OPTIONS] IMAGE [IMAGE…]
Name,shorthand | Default | Description |
---|---|---|
–force,-f | false | 強制刪除 |
–no-prune | false | 不移除該鏡像的過程鏡像,默認移除 |
示例1:刪除指定名稱的鏡像。
docker rmi hello-world
表示刪除hello-world這個鏡像
示例2:刪除所有鏡像
docker rmi -f $(docker images)
保存鏡像:docker save
命令格式:docker save [OPTIONS] IMAGE [IMAGE…]
Name,shorthand | Default | Description |
---|---|---|
–output,-o | 輸出到文件,而非標準輸出 |
示例:
#將busybox保存爲busybox.tar
docker save busybox > busybox.tar
docker save --output busybox.tar busybox
加載鏡像:docker load
命令格式:docker load [OPTIONS]
Name,shorthand | Default | Description |
---|---|---|
–input,-i | 從文件加載而非標準輸入 | |
–quiet,-q | false | 靜默加載 |
示例:
#從busybox.tar 文件中加載鏡像
docker load < busybox.tar
docker load --input busybox.tar
構建鏡像:通過Dockerfile構建鏡像
命令格式:docker build [OPTIONS] PATH | URL | -
docker build命令參數
Name,shorthand | Default | Description |
---|---|---|
–add-host | 添加自定義從host到IP的映射,格式爲(host:ip) | |
–build-arg | 設置構建時的變量 | |
–cache-from | 作爲緩存源的鏡像 | |
–cgroup-parent | 爲容器指定可選的父cgroup | |
–compress | false | 使用gzip亞索構建上下文 |
–cpu-period | 0 | 限制CPU CFS週期 |
–cpu-quota | 0 | 限制CPU CFS配額 |
–cpu-shares,-c | 0 | CPU使用權重(相對權重) |
–cpuset-cpus | 指定允許執行的CPU(0-3,0,1) | |
–cpuset-mems-arg | 指定允許執行的內存(0-3,0,1) | |
–disable-content-trust | true | 忽略校驗 |
–file,-f | 指定Dockerfile的名稱,默認是PATH/Dockerfile | |
–force-rm | false | 刪除中間容器 |
–isolation | 指定容器隔離技術 | |
–label | 爲鏡像設置元數據 | |
–memory,-m | 0 | 設置內存限制 |
–memory-swap | 0 | 設置swap的最大值爲內存+swap,如果設置爲-1,表示不限swap |
–network | default | 在構建期間設置RUN指定的網絡模式 |
–no-cache | false | 構建鏡像過程中不適用緩存 |
–pull | false | 總是嘗試去下載更新版本的鏡像 |
–quiet,-q | false | 靜默模式,構建成功後只輸出鏡像ID |
–rm | true | 構建成功後立即刪除中間容器 |
–security-opt | 安全選項 | |
–shm-size | 0 | 指定/dev/shm目錄的大小 |
–squash | false | [實驗]將構建的層壓縮成一個新的層 |
–stream | [實驗]連接到服務器的流,用於協商構建上下文 | |
–tag,-t | 設置標籤,格式爲name:tag,其中tag可選 | |
–target | 設置構建時的目標構建階段 | |
–ulimit | 設置構建時的目標構建階段 |
示例:
docker build -t itmuch/some-repo:some-tag .
Docker容器常用命令
新建並啓動容器:docker run
使用docker run 命令即可新建並啓動一個容器。
Name,shorthand | Default | Description |
---|---|---|
–detach,-d | 後臺運行容器,並打印容器ID | |
–punish-all,-p | 隨機映射所有端口 | |
–punish,-p | 指定端口映射,該選項有以下四種格式: | |
ip:hostPort:containerPort | ||
ip::containerPort | ||
hostPort:containerPort | ||
containerPort | ||
–network | 指定網絡模式,該選項有以下四種可選參數: | |
–network=bridge:默認選項,表示連接到默認的網橋 | ||
–network=host:容器使用宿主機的網絡 | ||
–network=container:NAME_or_ ID:告訴Docker讓新建的容器使用已有容器的網絡配置 | ||
–network=none:不配置該容器的網絡,用戶可自定義網絡配置 |
示例:
docker run -d -p 01:80 nginx
啓動一個Nginx容器,訪問http://Docker宿主機IP:91/就可以訪問。
docker run [-i -t -d -p -P -c] [--name]:在容器內運行一個應用程序
-t :在新容器內指定一個僞終端或終端
-i:允許你對容器內的標準輸入進行交互
-d:以進程方式運行容器,讓容器在後臺運行
-p:設置端口
-P:將容器內部使用的網絡端口映射到我們使用的主機,就是讓我們訪問我們使用的主機就等同於訪問到容器內部
-c:command,後面接命令
--name container name:指定容器名字
列出容器:docker ps
命令格式:docker ps [OPTIONS]
Name,shorthand | Default | Description |
---|---|---|
–all,-a | false | 列出所有容器,包括未運行的容器。默認只展示運行的容器。 |
–filter,-f | 根據條件過濾顯示內容 | |
–format | 通過Go語音模板文件展示鏡像 | |
–last,-n | -1 | 顯示最近創建的n個容器(包含所有狀態) |
–latest,-l | false | 顯示最近創建的容器(包含所有狀態) |
–no-trunc | false | 不截斷輸出 |
–quiert,-q | false | 靜默模式,只展示容器的ID |
–size,-s | false | 顯示總文件大小 |
示例:docker ps
CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS |
---|
- CONTAINER_ID:表示容器ID
- IMAGE:表示鏡像名稱
- COMMAND:表示啓動容器時運行的命令
- CREATED:表示容器的創建時間
- STATUS:表示容器運行的狀態。UP表示運行中,Exited表示已停止
- PORTS:表示容器對外的端口號
- NAME:表示容器名稱。該名稱默認由Docker自動生成,也可使用docker run命令的-name選項自行指定。
停止容器:docker stop
使用docker stop命令即可停止容器。
命令格式:docker stop [OPTIONS] CANTAINER [CANTAINER…]
Name,shorthand | Default | Description |
---|---|---|
–time,-t | 10 | 強制停止容器前等待的時間,單位是s |
示例:docker stop [容器ID]
強制停止容器:docker kill
可使用docker kill命令發送SIGKILL信號來強制停止容器。
命令格式:docker kill [OPTIONS] CONTAINER [CONTAINER…]
Name,shorthand | Default | Description |
---|---|---|
–signal,-s | KILL | 向容器發送一個信號 |
示例:
docker kill [容器ID]
啓動已停止的容器:docker start
使用docker run命令即可新建並啓動一個容器,對於已停止的容器,可使用docker start命令來啓動。
命令格式:docker start [OPTIONS] CONTAINER [CONTAINER…]
Name,shorthand | Default | Description |
---|---|---|
–attach,-a | false | 連接STDOUT/STDERR並轉發信號 |
–detach-keys | 覆蓋斷開容器的關鍵順序 | |
–interactive,-i | false | 連接容器的STDIN |
示例:docker start [容器ID]
重啓容器:docker restart
可使用docker restart命令來重啓容器,該命令實際上是先執行了docker stop,然後執行了docker start。
命令格式:docker restart [OPTIONS] CONTAINER [CONIAINER…]
Name,shorthand | Default | Description |
---|---|---|
–time,-t | 10 | 關閉容器前等待的時間,單位是s |
進入容器:docker attach
某些場景下,可能需要進入運行中的容器。
使用docker attach進入容器;例如
docker attach [容器ID]
在很多場景下,使用docker attach命令並不方便。當多個窗口同時attach到同一個容器時,所有窗口都會同步顯示。同理,如果某個窗口發生阻塞,其他窗口也無法執行操作。
使用neenter進入容器;
使用docker exec命令進入容器;
示例:
docker exec -it 容器id /bin/bash
刪除容器:docker rm
docker rm 即可刪除指定容器;
命令格式:docker rm [OPTIONS] CONTAINER [CONTAINER…]
Name,shorthand | Default | Description |
---|---|---|
–force,-f | false | 通過SIGKILL信號強制刪除正在運行中的容器 |
–link,-l | false | 刪除容器間的網絡連接 |
–volumes,-v | false | 刪除與容器關聯的卷 |
示例1:刪除指定容器。
docker rm [容器ID]
該命令只能刪除已停止的容器,如需刪除正在運行的容器,可使用-f參數。
示例2:刪除所有容器
docker rm -f ${docker ps -a -q}
導出容器:docker export
使用docker export命令可將容器導出成一個壓縮包文件。
命令格式:docker export [OPTIONS] CONTAINER
Name,shorthand | Default | Description |
---|---|---|
–output,-o | 將內容寫到文件而非標準輸出 |
示例:
將red容器到處城latest.tar文件
docker export red > latest.tar
docker export --output=“latest.tar” red
導入容器:docker import
使用docker import命令即可從歸檔文件導入內容並創建鏡像。
命令格式:
Name,shorthand | Default | Description |
---|---|---|
–change,-c | 將Dockerfile指令應用到創建的鏡像 | |
–message,-m | 爲導入的鏡像設置提交信息 |
示例:
從nginx2.tar文件導入,並創建nginx鏡像
docker import nginx2.tar nginx
查看進程並幹掉進程
jps是jdk提供的一個查看當前java進程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的縮寫。非常簡單實用。
命令格式:jps [options ] [ hostid ]
[options]選項 :
-q:僅輸出VM標識符,不包括classname,jar name,arguments in main method
-m:輸出main method的參數
-l:輸出完全的包名,應用主類名,jar的完全路徑名
-v:輸出jvm參數
-V:輸出通過flag文件傳遞到JVM中的參數(.hotspotrc文件或-XX:Flags=所指定的文件
-Joption:傳遞參數到vm,例如:-J-Xms512m
jps
jps –l:輸出主類或者jar的完全路徑名
jps –v :輸出jvm參數
jps –q :僅僅顯示java進程號
jps -mlv10.134.68.173
幹掉進程
kill - 9 表示強制殺死該進程;而 kill 則有侷限性,例如後臺進程,守護進程等;
kill -9 id:一般不加參數kill是使用15來殺,這相當於正常停止進程,停止進程的時候會釋放進程所佔用的資源;他們的區別就好比電腦關機中的軟關機(通過“開始”菜單選擇“關機”)與硬關機(直接切斷電源),雖然都能關機,但是程序所作的處理是不一樣的。
執行kill命令,系統會發送一個SIGTERM信號給對應的程序。SIGTERM多半是會被阻塞的。kill -9命令,系統給對應程序發送的信號是SIGKILL,即exit。exit信號不會被系統阻塞,所以kill -9能順利殺掉進程。
kill命令格式:
kill -Signal pid
pid是進程號,可以用 ps 命令查出
signal是發送給進程的信號,TERM(或數字9)表示“無條件終止”;
因此 kill - 9 表示強制殺死該進程;
而 kill 則有侷限性,例如後臺進程,守護進程等;
思維導圖
docker常用命令: