前言
上一篇文章說到了docker的鏡像以及常用指令,在docker的使用過程中,一般都是先拉去鏡像,然後在鏡像的基礎上建立并啟動容器來運作我們的項目。故此本篇主要是說下容器的建立和相關指令以及簡單使用。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZ2gDMhNzN3UmY3kTL1ADNi1iY0IDNtUGNiVWLycDO5QzM5M2LcJXZsRmbhhWZnFWbp1yYpZGZvwVZnJXYs9CXt92YuAHdhR3cw5yMw9CXvwlOzBHd0hWPsJXdmYDM3YjZkJGNzQDNl1SOhRGOtETMiVWLhJTMx0SY5MWM5EzN30DZpV3ZmITPlBXe0ZyPldWYtl2LcdXZpZ3Lc12bj5SZjVjL5h3byBnLyATLn1Wavw1LcpDc0RHaiojIsJye.jpg)
建立并啟動容器
在docker我們可以通過docker run來建立并啟動一個容器,該指令下面有很多選項。下面來列舉一些常用的指令:
-d:表示背景運作
-P:随機端口映射
-p:指定端口映射
-t:在新容器内指定一個僞終端或終端。
-i:允許你對容器内的标準輸入 (STDIN) 進行互動。
–network:指定網絡模式 有以下4個參數可選
【–network=bridge:預設選項,表示連接配接到預設的網橋】
【–network=host:容器使用主控端的網絡】
【–network=container:NAME_or_ID:告訴Docker讓建立的容器使用已有容器的網絡配置】
【–network=none:不配置該容器的網絡,使用者可自定義網絡配置】
示例1
docker run java /bin/echo 'Hello World'docekr:Docker 的二進制執行檔案。run:與前面的 docker 組合來運作一個容器。java:指定要運作的鏡像,如果不存在,則從docekr hub上拉去。/bin/echo:可以在啟動容器裡執行指令。
示例2
docker run -d -p 80:80 nginx-d:表示背景運作-p:表示将容器端口80映射到主控端端口80
注意:每次docker run都會建立并啟動一個容器。
列出容器
使用docker ps可以列出所有運作中的容器,執行指令後可以看到如下的内容
docker ps指令
列出所有的容器,包括停止的容器可以使用docker ps-a,查出的列字段含義如下
CONTAINER_ID:表示容器ID。
IMAGE:表示鏡像名稱。
COMMAND:表示啟動容器時運作的指令。
CREATED:表示容器的建立時間。
STATUS:表示容器運作的狀态。Up表示運作中,Exited表示已停止。
PORTS:表示容器對外的端口号。
NAMES:表示容器名稱。該名稱預設由Docker自動生成,也可使用docker run指令的–name選項自行指定。
指令格式:docekr ps [options]
--all,-a default:false 列出所有容器,包括未運作的容器,預設隻展示運作的容器
--filter, -f 根據條件過濾顯示内容
--format 通過Go語言模闆檔案展示鏡像
--last, -n default:-1 顯示最近建立n個容器(包含所有狀态)
--latest, -l default:-1 顯示最近建立的容器(包含所有狀态)
--no-trunc default:fallse 不截斷輸出
--quiet, -q default:false 靜默模式,隻展示容器的編号
--size, -s default :false 顯示總檔案大小
示例
docekr ps -n 5docekr ps -a -s
停止容器
使用docker stop
--time, -t default:10 強制殺死容器前等待的時間,機關是秒
示例
docker stop 4a30b910f793 或者 docker stop 容器名稱
強制停止容器使用docker kill
--signal, -s default:KILL 向容器發送一個信号
示例
docker kill 4a30b910f793 此處為容器id
啟動停止容器
docker run 是建立并啟動一個容器,而docker start是啟動一個已經建立的容器。
指令格式
docker start [OPTIONS] CONTAINER [CONTAINER...]
--attach, -a default:false 連接配接STDOUT/STDERR并轉發信号
--checkpoint 從該檢查點還原
--checkpoint-dir 使用自定義的檢查點存儲目錄
--detach-keys 覆寫斷開容器的關鍵順序
--interactive, -i default:false 連接配接容器的STDIN
示例:
docker start 4a30b910f793/容器名稱 啟動容器
重新開機容器指令格式
docker restart [OPTIONS] CONTAINER [CONTAINER...]
--time, -t default:10 關閉容器前等待的時間,機關是秒
示例:
docerk restart 4a30b910f793/容器名稱 實際是先stop 然後再start
進入容器
在某些場景下面我們需要進入到容器進行相關操作
1、使用docker attach指令進入到容器
docker attach 4a30b910f793
在使用attach指令時,如果是多個視窗同時進入容器,很容易發生阻塞。
2、使用nsenter進入容器
nsenter工具包含在util-linux 2.23或更高版本中。為了連接配接到容器,我們需要找到容器第一個程序的PID,可通過以下指令擷取
docker inspect --format "{{.State.Pid}}" $CONTAINER_ID
獲得pid後就可以進入容器了
nsenter --target "$PID" --mount --uts --ipc --net --pid
示例
[[email protected] ~]# docker inspect --format "{{.State.Pid}}" 784fd3b294d795492[[email protected] ~]# nsenter --target 95492 --mount --uts --ipc --net [email protected]:/#
3、使用docker exec進入到容器
docker exec -it 容器id /bin/bash
删除容器
使用docker rm可以删除指定容器
--force, -f default:false 通過SIGKILL信号強制删除正在運作中的容器
--link, -l default:false 删除容器間的網絡連接配接
--volumes, -v default:false 删除與容器關聯的卷
示例
docker rm 4a30b910f793 删除指定的容器 如果删除運作中的容器則用-f參數docker rm -f $(docker ps -a -q) 删除所有容器
導出容器
導出容器指的是将容器導出為一個壓縮包
docker export [OPTIONS] CONTAINER-output, -o将内容寫到檔案而非STDOUT
示例
docker export docker export 容器id > latest.tar > latest.tardocker export --output="latest.tar" red_panda
導入容器
使用docker import 指令即可從歸檔檔案導入内容并建立鏡像
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
--change, -c 将Dockerfile指令應用到建立的鏡像
--message, -m 為導入的鏡像設定送出資訊
示例
docker import nginx2.tar nginx 将打包的nginx容器導入