docker的安裝和鏡像容器的基本操作!(離你最近的地方,路途最遠。)


一、Docker 概述

1.1 Docker 初識
 
Docker是一個開源的應用容器引擎,基於go語言開發並遵循了apache2.0協議開源。
Docker是在Linux容器里運行應用的開源工具,是一種輕量級的“虛擬機”。
Docker 的容器技術可以在一台主機上輕松為任何應用創建一個輕量級的、可移植的、自給自足的容器。
 
Docker的Logo設計為藍色鯨魚,拖着許多集裝箱。
鯨魚可看作為宿主機,集裝箱可理解為相互隔離的容器,每個集裝箱中都包含自己的應用程序。
 

 

 

Docker的設計宗旨:Build,Ship and Run Any App,Anywhere
即通過對應用組件的封裝、發布、部署、運行等生命周期的管理,達到應用組件級別的“一次封裝,到處運行”的目的。這里的組件,既可以是一個應用,也可以是一套服務,甚至是一個完整的操作系統。
1.2 容器的特點
 
容器化越來越受歡迎,因為容器是:
 
靈活:即使是最復雜的應用也可以集裝箱化。
輕量級:容器利用並共享主機內核。
可互換:可以即時部署更新和升級。
便攜式:可以在本地構建,部署到雲,並在任何地方運行。
可擴展:可以增加並自動分發容器副本。
可堆疊:可以垂直和即時堆疊服務。
 
1.3 容器和Docker與虛擬機的區別
1.3.1 容器與虛擬機的區別
 
1)容器
是在linux上本機運行,並與其他容器共享主機的內核,它運行的是一個獨立的進程,不占用其他任何可執行文件的內存,非常輕量。
2)虛擬機
運行的是一個完成的操作系統,通過虛擬機管理程序對主機資源進行虛擬訪問,相比之下需要的資源更多。
1.3.2 Docker與虛擬機的區別
特性 Docker容器 虛擬機
啟動速度 秒級 分鍾級
計算能力損耗 幾乎無 損耗 50%左右
性能 接近原生 弱於
系統支持量(單機) 上千個 幾十個
隔離性 資源隔離/限制 完全隔離
1.3.3 容器在內核中支持2種重要技術
 
docker本質就是宿主機的一個進程,docker是通過namespace實現資源隔離,通過cgroup實現資源限制,通過寫時復制技術(copy-on-write)實現了高效的文件操作(類似虛擬機的磁盤比如分配500g並不是實際占用物理磁盤500g)。
1.4 Docker核心概念
1)鏡像
 
Docker的鏡像是創建容器的基礎,類似虛擬機的快照,可以理解為一個面向 Docker 容器引擎的只讀模板。
通過鏡像啟動一個容器,一個鏡像是一個可執行的包,其中包括運行應用程序所需要的所有內容包含代碼,運行時間,庫、環境變量、和配置文件。
 
2)容器
 
Docker的容器是從鏡像創建的運行實例,它可以被啟動、停止和刪除。所創建的每一個容器都是相互隔離、互不可見,以保證平台的安全性。
可以把容器看做是要給簡易版的linux環境(包括root用戶權限、鏡像空間、用戶空間和網絡空間等)和運行在其中的應用程序。
 
3)倉庫
 
Docker倉庫是用來集中保存鏡像的地方,當創建了自己的鏡像之后,可以使用push命令將它上傳到公有倉庫(Public)或者私有倉庫(Private)。當下次要在另外一台機器上使用這個鏡像時,只需從倉庫獲取。
 
Docker 的鏡像、容器、日志等內容全部都默認存儲在 /var/lib/docker 目錄下。

二、Docker的安裝

2.1 docker的安裝步驟
 
目前 Docker 只能支持 64 位系統。
 
systemctl stop firewalld.service
setenforce 0
 
#安裝依賴包
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
 
systemctl start docker.service
systemctl enable docker.service
 
#查看 docker 版本信息
docker version
 
2.2 docker的具體實驗操作步驟
 
1.關閉防火牆和SElinux
 

2.恢復yum官方源,然后按照依賴程序

3.設置阿里雲鏡像源后安裝 Docker-CE
 
4.Docker-CE設置為開機自動啟動
 

三、Docker的鏡像操作

3.1 搜索鏡像
 
格式:docker search 關鍵字
docker search nginx
 
示例:
 
3.2 獲取鏡像
 
格式:docker pull 倉庫名稱[:標簽]
#如果下載鏡像時不指定標簽,則默認會下載倉庫中最新版本的鏡像,即選擇標簽為 latest 標簽。
docker pull nginx
 
示例:
 
3.3 鏡像加速下載
 
瀏覽器訪問 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 獲取鏡像加速器配置
 
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
}
EOF
systemctl daemon-reload
systemctl restart docker
 
示例:
① 登錄阿里雲獲取鏡像加速地址並復制。
 
② 在虛擬機上執行命令
 
③ docker info查看是否啟用加速
 
3.4 查看鏡像信息
 
鏡像下載后存放在 /var/lib/docker
 
#查看下載的鏡像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
 
#查看下載到本地的所有鏡像
docker images
 
 
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ae2feff98a0c 9 days ago 133MB
--------------------------------------------------------------------------------------------
REPOSITORY:鏡像屬於的倉庫;
TAG:鏡像的標簽信息,標記同一個倉庫中的不同鏡像;
IMAGE ID:鏡像的唯一ID 號,唯一標識一個鏡像;
CREATED:鏡像創建時間;
VIRTUAL SIZE:鏡像大小;
--------------------------------------------------------------------------------------------
 
#根據鏡像的唯一標識 ID 號,獲取鏡像詳細信息
格式:docker inspect 鏡像ID號
docker inspect ae2feff98a0c
 
示例:
 
3.5 為本地的鏡像添加新的標簽
 
格式:docker tag 名稱:[標簽] 新名稱:[新標簽]
docker tag nginx:latest nginx:web
 
docker images | grep nginx
 
3.6 刪除鏡像
 
格式:
docker rmi 倉庫名稱:標簽 #當一個鏡像有多個標簽時,只是刪除其中指定的標簽
或者
docker rmi 鏡像ID號 #會徹底刪除該鏡像
 
注意:如果該鏡像已經被容器使用,正確的做法是先刪除依賴該鏡像的所有容器,再去刪除鏡像。普通刪除無法刪除時,可以加-f選項強制刪除。
 
docker rmi nginx:web
 
實例:
 
3.7 存出鏡像:將鏡像保存成為本地文件
 
格式:docker save -o 存儲文件名 存儲的鏡像
docker save -o nginx nginx:latest #存出鏡像命名為nginx存在當前目錄下
ls -lh
 
示例:
 
3.8載入鏡像:將鏡像文件導入到鏡像庫中
 
格式:
docker load < 存出的文件
或者
docker load -i 存出的文件
 
docker load < nginx
 
示例:
 
3.8 上傳鏡像
 
默認上傳到 docker Hub 官方公共倉庫,需要注冊使用公共倉庫的賬號。
可以使用 docker login 命令來輸入用戶名、密碼和郵箱來完成注冊和登錄。
在上傳鏡像之前,還需要先對本地鏡像添加新的標簽,然后再使用 docker push 命令進行上傳。
 
docker tag nginx:latest nginx:web #添加新的標簽
docker login #登錄公共倉庫
Username:
password:
docker push wl/nginx:web #上傳鏡像
 

四、Docker 容器操作

4.1 容器創建:就是將鏡像加載到容器的過程。
 
新創建的容器默認處於停止狀態,不運行任何程序,需要在其中發起一個進程來啟動容器。
 
格式:docker create [選項] 鏡像
常用選項:
-i:讓容器的輸入保持打開
-t:讓 Docker 分配一個偽終端
 
docker create -it nginx:latest /bin/bash
 
示例:
4.2 查看容器的運行狀態
 
docker ps -a #-a 選項可以顯示所有的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b0a7be0ff58 nginx:latest "/docker-entrypoint.…" 57 seconds ago Created inspiring_swanson
 
容器的ID號 加載的鏡像 運行的程序 創建時間 當前的狀態 端口映射 名稱
 
示例:
 
4.3 啟動容器
 
格式:docker start 容器的ID/名稱
docker start 8b0a7be0ff58
docker ps -a
 
示例:
4.4 創建並啟動容器
 
可以直接執行 docker run 命令, 等同於先執行 docker create 命令,再執行 docker start 命令。
注意:容器是一個與其中運行的 shell 命令共存亡的終端,命令運行容器運行, 命令結束容器退出。
 
當利用 docker run 來創建容器時, Docker 在后台的標准運行過程是:
(1)檢查本地是否存在指定的鏡像。當鏡像不存在時,會從公有倉庫下載;
(2)利用鏡像創建並啟動一個容器;
(3)分配一個文件系統給容器,在只讀的鏡像層外面掛載一層可讀寫層;
(4)從宿主主機配置的網橋接口中橋接一個虛擬機接口到容器中;
(5)分配一個地址池中的 IP 地址給容器;
(6)執行用戶指定的應用程序,執行完畢后容器被終止運行。
 
docker run centos:7 /usr/bin/bash -c ls /
docker ps -a #會發現創建了一個新容器並啟動執行一條 shell 命令,之后就停止了
 
示例:
 
4.5 在后台持續運行 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,運行狀態
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2592d3fad0fb centos:7 "/usr/bin/bash -c 'w…" 2 seconds ago Up 2 seconds peaceful_chatelet
 
docker run -itd --name test1 centos:7 /bin/bash
 
實示例:
 
4.6 終止容器運行
 
格式:docker stop 容器的ID/名稱
docker stop 2592d3fad0fb
 
docker ps -a
 
示例:
 
4.7 容器的進入
 
需要進入容器進行命令操作時,可以使用 docker exec 命令進入運行着的容器。
 
格式:docker exec -it 容器ID/名稱 /bin/bash
-i 選項表示讓容器的輸入保持打開;
-t 選項表示讓 Docker 分配一個偽終端。
 
docker start 2592d3fad0fb #進入容器前,確保容器正在運行
docker exec -it 2592d3fad0fb /bin/bash
ls
exit #退出容器后,容器仍在運行
docker ps -a
 
示例:
 
4.8 從宿主機上將文件導入到容器中
 
docker ps -a #先獲取需要導入到的容器ID,然后重新開一個終端
 
另一個終端上操作
echo "this is test file" >> 123.txt #創建測試文件
docker cp 123.txt cef59022a4dd:/opt #將測試文件導入到容器內后到容器內的/opt目錄下查看
 
示例:
① 先獲取容器ID
 
② 重新開一個終端,然后創建測試文件導入到指定ID的容器內
 
③ 進入容器進行查看
 
4.9 容器的導出與導入
 
用戶可以將任何一個 Docker 容器從一台機器遷移到另一台機器。在遷移過程中,可以使用docker export 命令將已經創建好的容器導出為文件,無論這個容器是處於運行狀態還是停止狀態均可導出。可將導出文件傳輸到其他機器,通過相應的導入命令實現容器的遷移。
 
#導出格式:docker export 容器ID/名稱 > 文件名
docker export 2592d3fad0fb > centos7tar
 
#導入格式:cat 文件名 | docker import – 鏡像名稱:標簽
cat centos7tar | docker import - centos7:test #導入后會生成鏡像,但不會創建容器
 
示例:
① 導出容器
 
② 使用scp發給另一個虛擬機(已安裝docker)
 
③ 在另一個虛擬機中導入容器查看
 
4.10 刪除容器
 
格式:docker rm [-f] 容器ID/名稱
docker stop 2592d3fad0fb
docker rm 2592d3fad0fb #刪除已經終止狀態的容器
 
docker rm -f 2592d3fad0fb #強制刪除正在運行的容器
 
docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash #批量停止所有容器
docker ps -a | awk 'NR>=2{print $1}' | xargs docker stop
-----------------------------------------------------------------------------------
docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash #批量刪除所有容器
docker ps -a | awk 'NR>=2{print $1}' | xargs docker rm
-----------------------------------------------------------------------------------
docker images | awk 'NR>=2{print "docker rmi "$3}' | bash #批量刪除所有鏡像
docker images | awk 'NR>=2{print $3}' | xargs docker rmi
 
示例:
① 停止狀態刪除
 
② 運行狀態強制刪除
 
③ 批量停止和刪除容器

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM