docker
- 一、概述
-
- 1.1 設計宗旨
- 1.2 特點
- 1.3 Docker與虛拟機的差別
- 1.4 Docker核心概念
-
- 鏡像
- 容器
- 倉庫
- 二、服務安裝
-
- 2.1 準備工作
- 2.2 安裝docker
-
- 安裝依賴包
- 設定阿裡雲鏡像源
- 安裝 Docker-CE并設定為開機自動啟動
- 檢視版本資訊
- 三、docker鏡像操作
-
- 3.1 搜尋鏡像
- 3.2 擷取鏡像
- 3.3 各項資訊查詢
- 3.4 本地鏡像添加新的标簽
- 3.5 删除鏡像
- 3.6 存出鏡像
- 3.7 載入鏡像
- 四、docker容器操作
-
- 4.1 容器建立
- 4.2 檢視運作狀态
- 4.3 使用容器
-
- 啟動容器
- 建立并啟動容器
- 在背景持續運作 docker run 建立的容器
- 終止容器
- 4.4 容器的進入
- 4.5 容器的導出與導入
-
- 導出格式
- 導入格式
- 4.6 删除容器
一、概述
- Docker是一個開源的應用容器引擎,基于go語言開發并遵循了apache2.0協定開源
- Docker是在Linux容器裡運作應用的開源工具,是一種輕量級的“虛拟機”
- Docker 的容器技術可以在一台主機上輕松為任何應用建立一個輕量級的、可移植的、自給自足的容器
1.1 設計宗旨
Build,Ship and Run Any App,Anywhere
即通過對應用元件的封裝、釋出、部署、運作等生命周期的管理,達到應用元件級别的“一次封裝,到處運作”的目的。這裡的元件,既可以是一個應用,也可以是一套服務,甚至是一個完整的作業系統
1.2 特點
- 靈活:即使是最複雜的應用也可以集裝箱化
- 輕量級:容器利用并共享主機核心
- 可互換:可以即時部署更新和更新
- 便攜式:可以在本地建構,部署到雲,并在任何地方運作
- 可擴充:可以增加并自動分發容器副本
- 可堆疊:可以垂直和即時堆疊服務
1.3 Docker與虛拟機的差別
容器是在linux上本機運作,并與其他容器共享主機的核心,它運作的是一個獨立的程序,不占用其他任何可執行檔案的記憶體,非常輕量
虛拟機運作的是一個完成的作業系統,通過虛拟機管理程式對主機資源進行虛拟通路,相比之下需要的資源更多
特性 | Docker容器 | 虛拟機 |
---|---|---|
啟動速度 | 秒級 | 分鐘級 |
計算能力損耗 | 幾乎無 | 損耗 50%左右 |
性能 | 接近原生 | 弱于 |
系統支援量(單機) | 上千個 | 幾十個 |
隔離性 | 資源隔離/限制 | 完全隔離 |
容器在核心中支援2種重要技術
docker本質就是主控端的一個程序,docker是通過namespace實作資源隔離,通過cgroup實作資源限制,通過寫時複制技術(copy-on-write)實作了高效的檔案操作(類似虛拟機的磁盤比如配置設定500g并不是實際占用實體磁盤500g)
1.4 Docker核心概念
鏡像
- Docker的鏡像是建立容器的基礎,類似虛拟機的快照,可以了解為一個面向 Docker 容器引擎的隻讀模闆
- 通過鏡像啟動一個容器,一個鏡像是一個可執行的包,其中包括運作應用程式所需要的所有内容包含代碼,運作時間,庫、環境變量、和配置檔案
容器
- Docker的容器是從鏡像建立的運作執行個體,它可以被啟動、停止和删除。所建立的每一個容器都是互相隔離、互不可見,以保證平台的安全性
- 可以把容器看做是要給簡易版的linux環境(包括root使用者權限、鏡像空間、使用者空間和網絡空間等)和運作在其中的應用程式
倉庫
- Docker倉庫是用來集中儲存鏡像的地方,當建立了自己的鏡像之後,可以使用push指令将它上傳到公有倉庫(Public)或者私有倉庫(Private)。當下次要在另外一台機器上使用這個鏡像時,隻需從倉庫擷取
Docker 的鏡像、容器、日志等内容全部都預設存儲在 /var/lib/docker 目錄下
二、服務安裝
目前 Docker 隻支援 64 位系統
2.1 準備工作
關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2.2 安裝docker
安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
- yum-utils
- 提供了 yum-config-manager 工具
- device mapper
- 是Linux核心中支援邏輯卷管理的通用裝置映射機制,它為實作用于存儲資源管理的塊裝置驅動提供了一個高度子產品化的核心架構
- device mapper存儲驅動程式需要 device-mapper-persistent-data 和 lvm2
設定阿裡雲鏡像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安裝 Docker-CE并設定為開機自動啟動
yum install -y docker-ce docker-ce-cli containerd.io
- systemctl start docker.service
- systemctl enable docker.service
檢視版本資訊
- docker version
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作
三、docker鏡像操作
3.1 搜尋鏡像
格式
docker search 關鍵字
- docker search nginx
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作
3.2 擷取鏡像
格式
如果下載下傳鏡像時不指定标簽,則預設會下載下傳倉庫中最新版本的鏡像,即選擇标簽為 latest 标簽
- docker pull nginx
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作
3.3 各項資訊查詢
檢視鏡像資訊
- 鏡像下載下傳後存放在 /var/lib/docker
檢視下載下傳的鏡像檔案資訊
- cat /var/lib/docker/image/overlay2/repositories.json
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作
檢視下載下傳到本地的所有鏡像
- docker images
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作 - REPOSITORY:鏡像屬于的倉庫
- TAG:鏡像的标簽資訊,标記同一個倉庫中的不同鏡像
- IMAGE ID:鏡像的唯一ID 号,唯一辨別一個鏡像
- CREATED:鏡像建立時間
- VIRTUAL SIZE:鏡像大小
根據鏡像的唯一辨別 ID 号,擷取鏡像詳細資訊
格式
docker inspect 鏡像ID号
- docker inspect 08b152afcfae
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作
3.4 本地鏡像添加新的标簽
格式
- docker tag nginx:latest cc44/nginx:web
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作
3.5 删除鏡像
格式
docker rmi 倉庫名稱:标簽 #當一個鏡像有多個标簽時,隻是删除其中指定的标簽
或者
docker rmi 鏡像ID号 #會徹底删除該鏡像
注意:如果該鏡像已經被容器使用,正确的做法是先删除依賴該鏡像的所有容器,再去删除鏡像
- docker rmi cc4/nginx:web
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作
3.6 存出鏡像
将鏡像儲存成為本地檔案
格式
docker save -o 存儲檔案名 存儲的鏡像
- docker save -o nginx nginx:latest
- 存出鏡像命名為nginx存在目前目錄下
- ls -lh
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作
3.7 載入鏡像
将鏡像檔案導入到鏡像庫中
格式
docker load < 存出的檔案
或者
docker load -i 存出的檔案
- docker load < nginx
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作
四、docker容器操作
4.1 容器建立
建立就是将鏡像加載到容器的過程
新建立的容器預設處于停止狀态,不允許任何程式,需要在其中發起一個程序來啟動容器
格式
docker create 【選項】 鏡像
常用選項
- -i
- 讓容器的輸入保持打開
- -t
- 讓docker配置設定一個僞終端
建立
docker create -it nginx:latest /bin/bash
4.2 檢視運作狀态
- CONTAINER ID:容器的ID号
- IMAGE:加載的鏡像
- COMMAND:運作的程式
- CREATED:建立時間
- STATUS:目前狀态
- PORTS:目前端口狀态
- NAMES:名稱
4.3 使用容器
啟動容器
格式
docker start 容器的ID/名稱
- docker start 08b152afcfae
- docker ps -a
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作
建立并啟動容器
可以直接執行 docker run 指令, 等同于先執行 docker create 指令,再執行 docker start 指令
注意:容器是一個與其中運作的 shell 指令共存亡的終端,指令運作容器運作, 指令結束容器退出
當利用 docker run 來建立容器時, Docker 在背景的标準運作過程是:
- 檢查本地是否存在指定的鏡像。當鏡像不存在時,會從公有倉庫下載下傳
- 利用鏡像建立并啟動一個容器
- 配置設定一個檔案系統給容器,在隻讀的鏡像層外面挂載一層可讀寫層
- 從宿主主機配置的網橋接口中橋接一個虛拟機接口到容器中
- 配置設定一個位址池中的 IP 位址給容器
- 執行使用者指定的應用程式,執行完畢後容器被終止運作
docker run centos:7 /usr/bin/bash -c ls /
docker ps -a
建立了一個新容器并啟動執行一條 shell 指令,之後就停止了
在背景持續運作 docker run 建立的容器
需要在 docker run 指令之後添加 -d 選項讓 Docker 容器以守護形式在背景運作。并且容器所運作的程式不能結束
docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
docker ps -a #可以看出容器始終處于 UP,運作狀态
- docker run -itd --name test centos:7 /bin/bash
- 背景運作,不會自動退出
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作
- 背景運作,不會自動退出
終止容器
格式
docker stop 容器的ID/名稱
- docker stop d871d6961411
- docker ps -a
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作
4.4 容器的進入
需要進入容器進行指令操作時,可以使用 docker exec 指令進入運作着的容器
格式
docker exec -it 容器ID/名稱 /bin/bash
- -i 選項表示讓容器的輸入保持打開
- -t 選項表示讓 Docker 配置設定一個僞終端
進入容器前要确定是正在運作的狀态
- docker start 1f7cd38535a0
- docker exec -it 1f7cd38535a0 /bin/bash
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作 - exit
- 退出容器後,容器仍在運作
- docker ps -a
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作
4.5 容器的導出與導入
使用者可以将任何一個 Docker 容器從一台機器遷移到另一台機器。在遷移過程中,可以使用docker export 指令将已經建立好的容器導出為檔案,無論這個容器是處于運作狀态還是停止狀态均可導出。可将導出檔案傳輸到其他機器,通過相應的導入指令實作容器的遷移
導出格式
docker export 容器ID/名稱 > 檔案名
- docker export 1f7cd38535a0 > centos7tar
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作
導入格式
cat 檔案名 | docker import – 鏡像名稱:标簽
#導入後會生成鏡像,但不會建立容器
cat centos7tar | docker import - centos7:test
sha256:582ec3f0b706941b8023ea80dddef95be622022acd96eb1b1525d96ea87116ad
#檢視
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7 test 582ec3f0b706 About a minute ago 204MB
#開啟
docker run -itd centos7:test bash
88eb7ac9433ac513dde7cd4283e40798ced8df08149383d5b4d6a85bdc34b6c3
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
88eb7ac9433a centos7:test "bash" 2 seconds ago Up 1 second jovial_elion
docker exec -it 88eb7ac9433a /bin/bash
#可以看到内容為上一個虛拟機内的容器内容
[[email protected] opt]# cd
[[email protected] ~]# ls
111.txt anaconda-ks.cfg
4.6 删除容器
格式
docker rm [-f] 容器ID/名稱
普通删除
docker stop 1f7cd38535a0 #删除前需關閉
docker rm 1f7cd38535a0 #删除已經終止狀态的容器
強制删除
其他删除
- docker ps -a | awk ‘NR>=2{print "docker stop "$1}’ | bash
- 批量停止容器
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作
- 批量停止容器
- docker ps -a | awk ‘NR>=2{print "docker rm "$1}’ | bash
- 批量删除所有容器
docker簡單了解及安裝使用一、概述二、服務安裝三、docker鏡像操作四、docker容器操作
- 批量删除所有容器
- docker images | awk ‘NR>=2{print "docker rmi "$3}’ | bash #批量删除鏡像