系列文章将包含(打鈎的為本次章節内容):
- docker 簡介
- docker 安裝與啟動
- docker 常用操作指令 ✅
- docker 使用技巧
- docker 一鍵快速搭建環境
- dockerfile 定制鏡像
- docker-compose 容器編排
- docker 公有及私有化鏡像倉庫
- docker 可視化管理工具-dockerUI
一、鏡像操作指令
指令 | 說明 |
pull | 拉取鏡像 |
search | 搜尋相關鏡像 |
tag | 重命名鏡像 |
rmi | 删除鏡像 |
images 或 image ls | 檢視所有鏡像 |
build | 基于Dockerfile建構鏡像 |
commit | 基于已有容器建構鏡像 |
1.拉取鏡像
使用"docker pull 鏡像名稱",拉取遠端倉庫的鏡像到本地(先校驗本地是否存在,本地不存在時再預設從官網拉取最新版本的鏡像)
以busybox為例:
BusyBox 是一個內建了三百多個最常用Linux指令和工具的軟體。BusyBox 包含了一些簡單的工具,例如ls、cat和echo等等,還包含了一些更大、更複雜的工具,例grep、find、mount以及telnet。有些人将 BusyBox 稱為 Linux 工具裡的瑞士軍刀。簡單的說BusyBox就好像是個大工具箱,它內建壓縮了 Linux 的許多工具和指令,也包含了 Linux 系統的自帶的shell。
docker pull busybox # 拉取鏡像
在拉取鏡像前,也可以通過docker search指令搜尋不同類型的鏡像
docker search busybox # 搜尋相關鏡像
2.檢視鏡像
使用 "docker image ls" 或 "docker images" 指令檢視本地已經存在的鏡像
docker images # 檢視所有鏡像
docker images | grep busybox # 檢視指定鏡像
3.修改鏡像名稱
使用 "docker tag 原始鏡像名稱 新名稱" 指令重命名鏡像,如:docker tag busybox:latest mybusybox:V1.0,重命名鏡像會新增一條鏡像,相當于建立了一個副本,但ID相同。
docker tag busybox:latest mybusybox:V1.0
4.删除鏡像
使用 "docker rmi 鏡像名稱" 指令删除無用鏡像,通過鏡像名稱删除,隻會删除指定名稱的鏡像;通過鏡像ID删除,會删除所有ID相同的鏡像。
docker rmi mybusybox:V1.0
docker rmi -f ff4a8eb070e1
二、容器操作指令
容器操作指令:
指令 | 說明 |
create | 建立容器 |
run | 運作容器,run = pull + create + start |
exec...-it...sh | 進入容器内部 |
start | 啟動容器 |
restart | 重新開機容器 |
stop | 停止容器 |
rm | 删除容器 |
commit | 基于已有容器建構鏡像 |
ps | 檢視容器狀态:
|
logs | 檢視容器日志:
|
容器操作相關參數:
指令 | 說明 |
--name | 指定容器名稱:
|
-d | 背景運作 |
-p | 映射端口,主控端端口:容器端口,例如:
|
-v | 挂載目錄到本地,主控端目錄:容器目錄,例如:
|
--restart | 自動重新開機,例如:
|
1.建立容器
docker create (--name=容器名) 鏡像名,例如:
docker create --name=mybusybox busybox
2.檢視容器狀态
docker ps -a # 檢視所有容器
docker ps -a | grep mybusybox # 過濾檢視指定容器
docker ps -l # 檢視最近操作的容器
通過create指令建立完成後的容器是"Created"狀态的,可以通過start指令來啟動容器
3.啟動容器
docker start mybusybox
4.進入容器
通過"docker exec -it 容器名 sh"指令進入容器内部,例如:
docker exec -it mybusybox sh
5.運作容器
docker run = docker pull + docker create + docker start
docker run --name=mynginx -d -p 81:80 nginx
6.停止容器
docker stop 容器名或容器ID,例如:
docker stop mybusybox
docker stop 6fbf5a7a580b
7.删除容器
docker rm 容器名或容器ID,删除前要先停止容器,例如:
docker stop mybusybox
docker rm mybusybox
docker rm 6fbf5a7a580b
8.檢視容器日志
- docker logs 容器名或容器ID:以檔案形式檢視日志,類似 cat;
- docker logs 容器名或容器ID:實時檢視日志,類似 tail -f;
例如:
docker logs sonic_sonic-server-controller_1
docker logs -f sonic_sonic-server-controller_1
9.基于已有容器建構為新的鏡像模闆
用法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
參數 | 說明 |
-a | 标注作者資訊 |
-c | 使用Dockerfile指令來生成鏡像 |
-m | 送出說明資訊,類似于git commit -m "xxxx" |
-p | 在送出時,暫停容器 |
例如:目前有個需求,将目前伺服器上正在運作的一個容器,無痕遷移到另一台伺服器上運作。意味着需要執行以下步驟:
将目前正在運作的容器建構為新的鏡像A>>将新鏡像A的鏡像檔案複制到另一台伺服器或直接将鏡像A送出到鏡像倉庫>>在另一台伺服器上将鏡像A從鏡像倉庫下載下傳下來>>基于鏡像A建立容器并運作
① 打包容器
為了便于示範,先将一個檔案複制到已有容器内
docker cp jdk_install.sh mysql:/home
② 檢視容器内檔案
docker exec -it mysql sh
可以看到,已經将jdk_install.sh檔案複制到了mysql容器的/home目錄下:
③ 基于容器建構新的鏡像
docker commit -a "chenjigang" mysql new-mysql
通過"docker images"指令檢視目前鏡像清單,可以看到名為new-mysql的鏡像:
④ 基于新鏡像運作容器
docker run -d --name new-mysql-container -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306 new-mysql
⑤ 檢視容器内檔案
docker exec -it new-mysql-container sh
通過下圖可以看出,之前複制到容器内的jdk_install.sh檔案,已經儲存到鏡像中、并跟随出現在新的容器内: