一、Docker 概述
1.1Docker的概念
- Docker是一個開源的應用容器引擎,基于go語言開發并遵循了apache2.0協議開源
- Docker是在Linux容器里運行應用的開源工具,是一種輕量級的“虛擬機”
- Docker 的容器技術可以在一臺主機上輕松為任何應用創建一個輕量級的、可移植的、自給自足的容器
Docker的Logo設計為藍色鯨魚,拖著許多集裝箱
鯨魚可看作為宿主機,集裝箱可理解為相互隔離的容器,每個集裝箱中都包含自己的應用程式
Docker的設計宗旨:Build,Ship and Run Any App,Anywhere,
即通過對應用組件的封裝、發布、部署、運行等生命周期的管理,達到應用組件級別的“一次封裝,到處運行”的目的,這里的組件,既可以是一個應用,也可以是一套服務,甚至是一個完整的作業系統
1.2容器的優點
容器化越來越受歡迎,因為容器是:
- 靈活:即使是最復雜的應用也可以集裝箱化,
- 輕量級:容器利用并共享主機內核,
- 可互換:可以即時部署更新和升級,
- 便攜式:可以在本地構建,部署到云,并在任何地方運行,
- 可擴展:可以增加并自動分發容器副本,
- 可堆疊:可以垂直和即時堆疊服務,
1.3容器與虛擬機的區別
容器是在linux上本機運行,并與其他容器共享主機的內核,它運行的是一個獨立的行程,不占用其他任何可執行檔案的記憶體,非常輕量,
虛擬機運行的是一個完成的作業系統,通過虛擬機管理程式對主機資源進行虛擬訪問,相比之下需要的資源更多,

1.4容器在內核中支持2種重要技術
docker本質就是宿主機的一個行程,docker是通過namespace實作資源隔離,通過cgroup實作資源限制,通過寫時復制技術(copy-on-write)實作了高效的檔案操作(類似虛擬機的磁盤比如分配500g并不是實際占用物理磁盤500g),
(1)namespace資源隔離——用容器技術封裝

1.5Docker核心概念
(1)鏡像
Docker的鏡像是創建容器的基礎,類似虛擬機的快照,可以理解為一個面向 Docker 容器引擎的只讀模板,
通過鏡像啟動一個容器,一個鏡像是一個可執行的包,其中包括運行應用程式所需要的所有內容包含代碼,運行時間,庫、環境變數、和組態檔,
(2)容器
Docker的容器是從鏡像創建的運行實體,它可以被啟動、停止和洗掉,所創建的每一個容器都是相互隔離、互不可見,以保證平臺的安全性,
可以把容器看做是要給簡易版的linux環境(包括root用戶權限、鏡像空間、用戶空間和網路空間等)和運行在其中的應用程式,
(3)倉庫
Docker倉庫是用來集中保存鏡像的地方,當創建了自己的鏡像之后,可以使用push命令將它上傳到公有倉庫(Public)或者私有倉庫(Private),當下次要在另外一臺機器上使用這個鏡像時,只需從倉庫獲取,
Docker 的鏡像、容器、日志等內容全部都默認存盤在 /var/lib/docker 目錄下,
二、Docker的安裝
2.1docker的安裝步驟
目前 Docker 只能支持 64 位系統, systemctl stop firewalld.service setenforce 0 1、安裝依賴包 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, 2、設定阿里云鏡像源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3、安裝 Docker-CE并設定為開機自動啟動 yum install -y docker-ce systemctl start docker.service systemctl enable docker.service 4、查看 docker 版本資訊 docker version 目前 Docker 只能支持 64 位系統,
2.2實體操作:安裝docker
2.2.1關閉防火墻
![]()
2.2.2安裝依賴包


2.2.3設定阿里云鏡像源并安裝 Docker-CE并設定為開機自動啟動(使用在線源安裝)


2.2.4查看 docker 版本資訊

三、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' { "registry-mirrors": ["https://anx0by6z.mirror.aliyuncs.com"] } EOF systemctl daemon-reload systemctl restart docker


3.4查看鏡像資訊
鏡像下載后存放在 /var/lib/docker
3.4.1查看下載的鏡像檔案資訊
cat /var/lib/docker/image/overlay2/repositories.json

3.4.2查看下載到本地的所有鏡像
docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 3964ce7b8458 32 hours ago 142MB 解釋: REPOSITORY:鏡像屬于的倉庫; TAG:鏡像的標簽資訊,標記同一個倉庫中的不同鏡像; IMAGE ID:鏡像的唯一ID 號,唯一標識一個鏡像; CREATED:鏡像創建時間; VIRTUAL SIZE:鏡像大小;

3.5根據鏡像的唯一標識 ID 號,獲取鏡像詳細資訊
格式:docker inspect 鏡像ID號
docker inspect 3964ce7b8458

3.6為本地的鏡像添加新的標簽
格式:docker tag 名稱:[標簽] 新名稱:[新標簽] docker tag nginx:latest nginx:web docker images | grep nginx

3.7洗掉鏡像
格式:
docker rmi 倉庫名稱:標簽 #當一個鏡像有多個標簽時,只是洗掉其中指定的標簽
或者
docker rmi 鏡像ID號 #會徹底洗掉該鏡像
注意:如果該鏡像已經被容器使用,正確的做法是先洗掉依賴該鏡像的所有容器,再去洗掉鏡像,
docker rmi nginx:web

3.8存出鏡像:將鏡像保存成為本地檔案
格式:docker save -o 存盤檔案名 存盤的鏡像 docker save -o nginx nginx:latest #存出鏡像命名為nginx存在當前目錄下 ls -lh

3.9載入鏡像:將鏡像檔案匯入到鏡像庫中
格式: docker load < 存出的檔案 或者 docker load -i 存出的檔案 舉例:docker load < nginx

3.10上傳鏡像
默認上傳到 docker Hub 官方公共倉庫,需要注冊使用公共倉庫的賬號,https://hub.docker.com
可以使用 docker login 命令來輸入用戶名、密碼和郵箱來完成注冊和登錄,
在上傳鏡像之前,還需要先對本地鏡像添加新的標簽,然后再使用 docker push 命令進行上傳,
docker tag nginx:web rui123456/nginx:web #添加新的標簽 docker login #登錄公共倉庫 Username: password: docker push rui123456/nginx:web #上傳鏡像



四、Docker 容器操作
4.1容器創建:就是將鏡像加載到容器的程序
新創建的容器默認處于停止狀態,不運行任何程式,需要在其中發起一個行程來啟動容器
docker create命令能夠基于鏡像創建容器,
該命令執行的效果類似于docker run -d,即創建一個將在系統后臺運行的容器,
但是與docker run -d不同的是,docker create創建的容器并未實際啟動,還需要執行docker start命令或docker run命令以啟動容器,
事實上,docker create命令常用于在啟動容器之前進行必要的設定,
格式:docker create [選項] 鏡像 常用選項: -i:讓容器的輸入保持打開 -t:讓 Docker 分配一個偽終端 docker create -it nginx:latest /bin/bash
注釋:
-it就等于-i和-t,這兩個引數的作用是,為該docker創建一個偽終端,這樣就可以進入到容器的互動模式(也就是直接進入到容器里面)
后面的/bin/bash的作用是表示載入容器后運行bash ,docker中必須要保持一個行程的運行,要不然整個容器啟動后就會馬上kill itself,這個/bin/bash就表示啟動容器后啟動bash


4.2查看容器的運行狀態
docker ps -a #-a 選項可以顯示所有的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a72736a1b1b7 nginx:latest "/docker-entrypoint.…" 2 minutes ago Created strange_goldwasser 6b46367b4be0 nginx:latest "/docker-entrypoint.…" 5 minutes ago Created keen_ardinghelli 容器的ID號 加載的鏡像 運行的程式 創建時間 當前的狀態 埠映射 名稱
![]()
4.3啟動容器
格式:docker start 容器的ID/名稱 docker start a72736a1b1b7 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/kill ? 容器ID/名稱
stop: 停止容器,可以給容器一個等待時間,以防止資料的丟失,
kill: 立即強行停止一個容器(相當于linux命令 kill -9) ,不會給容器反應時間,可能會造成資料丟失
格式:docker stop 容器的ID/名稱 docker stop 9c08e89c75c1 docker ps -a

4.7容器的進入
需要進入容器進行命令操作時,可以使用 docker exec 命令進入運行著的容器,
格式:docker exec -it 容器ID/名稱 /bin/bash -i 選項表示讓容器的輸入保持打開; -t 選項表示讓 Docker 分配一個偽終端, docker start 731cf8b160da #進入容器前,確保容器正在運行 docker exec -it 731cf8b160da /bin/bash ls exit #退出容器后,容器仍在運行 docker ps -a


4.8從宿主機上將檔案匯入到容器中
docker ps -a #先獲取需要匯入到的容器ID,然后重新開一個終端 另一個終端上操作 echo "xkq" >> 123.txt #創建測驗檔案 docker cp 123.txt 731cf8b160da:/opt

4.9容器的匯出與匯入
用戶可以將任何一個 Docker 容器從一臺機器遷移到另一臺機器,在遷移程序中,可以使用docker export 命令將已經創建好的容器匯出為檔案,無論這個容器是處于運行狀態還是停止狀態均可匯出,可將匯出檔案傳輸到其他機器,通過相應的匯入命令實作容器的遷移,
#匯出格式:docker export 容器ID/名稱 > 檔案名 docker export 2592d3fad0fb > centos7.tar #匯入格式:cat 檔案名 | docker import – 鏡像名稱:標簽 cat centos7.tar | docker import - centos7:test #匯入后會生成鏡像,但不會創建容器
![]()


4.10洗掉容器
(1)洗掉容器和強制洗掉容器

(2)批量停止和洗掉容器

![]()


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/540037.html
標籤:其他
