天天看點

docker從入門到實戰系列2-docker常用操作指令

作者:大剛測試開發實戰

系列文章将包含(打鈎的為本次章節内容):

  • docker 簡介
  • docker 安裝與啟動
  • docker 常用操作指令 ✅
  • docker 使用技巧
  • docker 一鍵快速搭建環境
  • dockerfile 定制鏡像
  • docker-compose 容器編排
  • docker 公有及私有化鏡像倉庫
  • docker 可視化管理工具-dockerUI

一、鏡像操作指令

docker從入門到實戰系列2-docker常用操作指令
指令 說明
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從入門到實戰系列2-docker常用操作指令

在拉取鏡像前,也可以通過docker search指令搜尋不同類型的鏡像

docker search busybox  # 搜尋相關鏡像           
docker從入門到實戰系列2-docker常用操作指令

2.檢視鏡像

使用 "docker image ls" 或 "docker images" 指令檢視本地已經存在的鏡像

docker images  # 檢視所有鏡像
docker images | grep busybox  # 檢視指定鏡像           
docker從入門到實戰系列2-docker常用操作指令

3.修改鏡像名稱

使用 "docker tag 原始鏡像名稱 新名稱" 指令重命名鏡像,如:docker tag busybox:latest mybusybox:V1.0,重命名鏡像會新增一條鏡像,相當于建立了一個副本,但ID相同。

docker tag busybox:latest mybusybox:V1.0           
docker從入門到實戰系列2-docker常用操作指令

4.删除鏡像

使用 "docker rmi 鏡像名稱" 指令删除無用鏡像,通過鏡像名稱删除,隻會删除指定名稱的鏡像;通過鏡像ID删除,會删除所有ID相同的鏡像。

docker rmi mybusybox:V1.0
docker rmi -f ff4a8eb070e1           
docker從入門到實戰系列2-docker常用操作指令

二、容器操作指令

容器操作指令:

指令 說明
create 建立容器
run 運作容器,run = pull + create + start
exec...-it...sh 進入容器内部
start 啟動容器
restart 重新開機容器
stop 停止容器
rm 删除容器
commit 基于已有容器建構鏡像
ps 檢視容器狀态:
  • docker ps -a:檢視所有容器
  • docker ps -l:檢視最近操作的容器
logs 檢視容器日志:
  • docker logs 容器名:檢視指定容器的運作日志
  • docker logs -f 容器名:實時檢視指定容器的運作日志

容器操作相關參數:

指令 說明
--name 指定容器名稱:
  • --name=容器名
  • --name 容器名
-d 背景運作
-p 映射端口,主控端端口:容器端口,例如:
  • -p 3307:3306
-v 挂載目錄到本地,主控端目錄:容器目錄,例如:
  • -v /usr/local/nginx:/usr/local/nginx
--restart 自動重新開機,例如:
  • --restart=always,跟随docker服務的重新開機而重新開機

1.建立容器

docker create (--name=容器名) 鏡像名,例如:

docker create --name=mybusybox busybox           

2.檢視容器狀态

docker ps -a  # 檢視所有容器
docker ps -a | grep mybusybox  # 過濾檢視指定容器
docker ps -l  # 檢視最近操作的容器           

通過create指令建立完成後的容器是"Created"狀态的,可以通過start指令來啟動容器

docker從入門到實戰系列2-docker常用操作指令

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從入門到實戰系列2-docker常用操作指令

用法: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從入門到實戰系列2-docker常用操作指令

③ 基于容器建構新的鏡像

docker commit -a "chenjigang" mysql new-mysql           

通過"docker images"指令檢視目前鏡像清單,可以看到名為new-mysql的鏡像:

docker從入門到實戰系列2-docker常用操作指令

④ 基于新鏡像運作容器

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檔案,已經儲存到鏡像中、并跟随出現在新的容器内:

docker從入門到實戰系列2-docker常用操作指令