1 Docker技術簡介
1.1 概述
Docker是一個虛擬化平臺( 官網https://www.docker.com/),誕生于 2013 年初,基于 Google 公司的 Go 語言進行實作,可以通過虛擬化方式,為應用提供可運行的容器,基于這種方式,可更快地打包、測驗以及部署應用程式,

現階段,很多應用軟體的安裝都在向基于docker方式的安裝進行實作,例如mysql,那么為什么不直接在作業系統中安裝一個mysql,而是用容器呢?因為,安裝MySql程序并不簡單,要配置安裝源,安裝依賴包,對mysql進行配置…如果要在多臺主機上安裝,每臺主機都要進行這些繁瑣的操作,萬一服務器掛了,這一系列操作還要再重來一遍,但有了docker,一個安裝配置好的mysql容器,可以直接拿到另一臺主機上啟動,而不必重新安裝mysql,另外,docker還有一重要的用處,就是可以保證開發,測驗和生產環境的一致.
1.2 版本說明
Docker分成了兩個版本:Docker EE (企業版)和Docker CE(社區版本),其中,Docker EE由公司支持,可在經過認證的作業系統和云提供商中使用,Docker CE是免費的Docker產品的新名稱,Docker CE包含了完整的Docker平臺,非常適合開發人員和運維團隊構建容器APP,
2 Docker 核心物件
2.1 鏡像(Image)
Docker 鏡像是一個特殊的檔案系統(https://hub.docker.com/),鏡像可以打包應用的運行環境以及應用程式,可以通過 Docker 啟動這個鏡像,進而將應用程式在一個容器中啟動運行起來,在 Docker 鏡像中,作業系統是高度精簡的,鏡像中的作業系統還不包含內核,容器都是共享所在的宿主機的內核,所以有時會說容器僅包含必要的作業系統(通常只有作業系統檔案和檔案系統物件),容器中查看到的 Linux 內核版本與宿主機一致,假如現在理解鏡像有些抽象,可以暫時先將其理解為一個安裝程式,
2.2 容器(Container)
Docker容器可以將其理解為一個運行鏡像的載體,鏡像(Image)和容器(Container)的關系,就像是光碟和光驅,容器基于鏡像創建、啟動,然后運行鏡像的中的檔案,我們常常說使用鏡像打包應用程式,使用 Docker 發布、部署應用程式,那么當你的應用成功在 Docker 上運行時,稱這個應用就是容器化應用( containerized applications),
3 Docker 應用架構分析
3.1 架構圖
Docker 是一種Client/Server架構的應用程式,如圖所示(參考docker 官網https://docs.docker.com/get-started/overview/)

其中:
- Docker Host是我們的docker宿主機(就是安裝了docker的作業系統)
- Registry是docker拉取鏡像的遠程倉庫,提供大量的鏡像供下載,下載完成之后保存在Images中
- Docker Daemon是docker的服務執行緒,處理Docker客戶端命令,
- Images 是Docker本地的鏡像倉庫,可以通過docker images查看鏡像檔案,
3.2 Docker運行機制
docker pull 執行程序:
1. 客戶端將指令發送給docker daemon
2. docker daemon 先檢查本地images中有沒有相關的鏡像
3. 如果本地沒有相關的鏡像,則向鏡像服務器請求,將遠程鏡像下載到本地
docker run 執行程序:
1. 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
2. 利用鏡像創建并啟動一個容器
3. 分配一個檔案系(簡版linux系統),并在只讀的鏡像層外面掛載一層可讀寫層
4. 從宿主機配置的網橋介面中橋接一個虛擬介面到容器中去
5. 從地址池配置一個 ip 地址給容器
6. 執行用戶指定的應用程式
4 Docker安裝實踐
4.1 準備作業
第一步:準備CentOS,本次以CentOS7為例進行安裝,
第二步:基于vmvare打開CentOS

第三步:克隆CentOS(選擇鏈接克隆-更省空間),命名為CentOS7964-docker






4.2 開啟虛擬機系統
第一步:啟動虛擬機,默認賬號密碼為root/root

第二步:在系統中右鍵,打開終端,通過ifconfig指令檢查網路,
[root@centos7964 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.227.129 netmask 255.255.255.0 broadcast 192.168.227.255
inet6 fe80::20c:29ff:fee9:918a prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:e9:91:8a txqueuelen 1000 (Ethernet)
RX packets 287398 bytes 419668874 (400.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 127375 bytes 8442701 (8.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
....
第三步:通過MobaXterm工具鏈接虛擬機系統




4.3 卸載Docker
假如已經有docker,可通過執行如下指令卸載Docker(一般只針對于線上安裝情況),例如:
sudo yum remove docker-ce \
docker-ce-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
4.4 在線安裝Docker
第一步:安裝一組工具
sudo yum install -y yum-utils
第二步:設定 yum 倉庫地址
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
第三步:更新 yum 快取
sudo yum makecache fast #yum 是包管理器
第四步:安裝新版 docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
4.5 離線安裝Docker
推薦使用課前資料中已經下載好的資源(docker-setup.zip),也可以按如下步驟自己下載,然后將資源放到一個目錄再安裝,例如:
第一步:下載docker離線包
https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz
說明,也可以從https://download.docker.com/linux/static/stable/網址下載指定版本
第二步:下載離線安裝工具
https://github.com/Jrohy/docker-install/

說明,將下載好的這個工具解壓,
第三步:將下載好的資源放在一個目錄,例如:

第四步:在linux環境下,創建/root/setup/docker目錄,然后拷貝下載好的資源到此目錄(可通過MobaXterm工具直接上傳到linux目錄),例如

第五步:執行安裝操作
# 進入/root/setup/docker 檔案夾
cd /root/setup/docker
# 為 install.sh添加執行權限
chmod +x install.sh
# 安裝
./install.sh -f docker-20.10.6.tgz
安裝成功后,會出現如下資訊:
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
docker 20.10.6 install success!
第六步:安裝成功以后,檢查安裝狀態
docker info
5 Docker服務基本操作
5.1 啟動docker服務
systemctl start docker
5.2查看Docker狀態
查看docker是否啟動了,是否是運行狀態.
systemctl status docker
例如:

5.3設定Docker開機自啟
systemctl enable docker
5.4禁用Docker開機自啟
systemctl disable docker
5.5重新啟動Docker服務
systemctl restart docker
5.6查看Docker資訊
docker info
查看docker info中具體key的資訊,例如:
systemctl stop docker
5.7停止docker服務
systemctl stop docker
5.8Docker鏡像加速
由于國內網路問題,需要配置加速器來加速,修改組態檔 /etc/docker/daemon.json
下面命令直接生成檔案 daemon.json
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker"
}
EOF
說明:在執行如上指令時,保證你的登錄用戶為root管理員用戶,并且設定好以后重啟docker服務.
6 Docker鏡像操作實踐
6.1 下載鏡像
語法:docker pull 鏡像名
案例:
docker pull hello-world
6.2瀏覽鏡像檔案
docker images
6.3查看鏡像詳情
語法:docker inspect 鏡像名或鏡像id
docker inspect hello-world
6.4查看鏡像歷史
一個鏡像是由多個層(layer)組成的,那么,我們要如何知道各個層的具體內容呢?通過 docker history 命令,可以列出各個層(layer)的創建資訊,例如:
docker history hello-world
6.5匯出鏡像檔案
鏡像匯出(linux系統中的鏡像檔案下載到本地-例如window),匯出后給他人使用
docker save hello-world | gzip > hello-world.tar.gz
6.6洗掉鏡像檔案
語法:docker image rm 鏡像名或鏡像id
docker image rm hello-world
6.7匯入鏡像操作
鏡像匯入(要在hello-world.tar.gz 檔案所在目錄下執行)
docker load < hello-world.tar.gz
6.8運行鏡像檔案
基于鏡像,啟動容器運行,
docker run hello-world
7 Docker 容器操作實踐
本次以CentOS鏡像為例,講解容器的基本操作,
7.1 下載鏡像(Image)
通過docker pull指令下載CentOS鏡像,例如:
docker pull centos:7
說明,官方鏡像倉庫地址為https://hub.docker.com/
下載完以后,查看centos7鏡像檔案,
docker images
7.2創建并啟動容器(Container)
基本語法決議:
docker run -it xxxx bash
其中:
1)xxxx - 鏡像名, 或 image id 的前幾位,
2)-it 這是兩個引數(-i表示互動式操作, -t 表示終端)
3) bash 表示進入操作終端,基于互動式進行相關操作(例如執行linux相關指令),
案例:通過docker啟動運行 centos7鏡像
docker run -it centos:7 bash

7.3查看Docker中的容器(Container)
查看docker運行中的容器(要在宿主機執行docker指令)
docker ps
說明,假如在容器中執行docker指令會出現如下問題,例如:

查看docker運行中的所有容器
docker ps -a
其中,-a表示全部(all),
7.4查看容器日志(logs)資訊
查看容器啟動運行日志時,這個指令非常重要,假如容器沒有啟動,要通過此指令去看一下錯誤日志,
docker container logs 802 #802為自己的容器id(一般寫前三位即可)
說明,查看容器的運行日志時,容器應該處于一種運行狀態.
7.5停止(stop)或重啟(Restart)容器(Container)
停止運行的容器,代碼如下:
docker container stop 802 #802為容器自己的id
重新啟動容器,代碼如下:
docker container restart 802 #802位容器自己的id
7.6進入(exec)指定容器(Container)
當容器處于運行狀態,要進入容器,可以使用 docker exec 命令,例如:
docker exec -it 802 bash #802為容器id
說明,假如容器處于一種非運行狀態,此時你執行docker exec進入容器會出現如下問題:

7.7從容器(Container)中退出(exit)
假如從宿主機進入了啟動的容器,退出容器需要使用exit指令,例如:
exit
7.8洗掉(rm)容器(Container)
假如容器不用了,可執行洗掉操作,例如:
docker container rm 802 #802為容器id
說明,假如容器正在運行執行洗掉,會出現如下問題,例如:

其中,如果洗掉運行中的容器,需要添加 -f 引數執行強制洗掉,例如:
docker container rm -f 802 #802為容器id
清理所有處于終止狀態容器,例如:
docker container prune
說明,執行完這個指令以后,可以通過docker ps -a 再查看容器,看看是否有洗掉.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/376054.html
標籤:其他
