Docker安裝,基本概念,執行流程,生命周期簡介


Docker基本概念

在使用Docker前,首先要先知道Docker中這幾個常用的概念:

鏡像:鏡像是文件,只讀的,提供了運行完整軟硬件應用程序的集裝箱。

容器:是鏡像的實例,由Docker負責創建,容器之間彼此隔離,容器可以被創建,刪除,停止。

倉庫:用來保存鏡像,可以理解為代碼控制中的代碼倉庫,Docker官方倉庫名字是Docker Hub

更多內容,通過訪問Docker官方網站獲取:https://www.docker.com/

Docker安裝

使用Docker首先我們要安裝Docker,Docker Engine(Enterprise/Community)有企業版和社區版,平常學習我們選擇社區版(Community)就可以了,更多區別可以訪問官方網站查看二者的區別
Docker所支持的平台和操作系統也是很廣泛的,支持Linux/Windows/Mac系統,這里主要講解Linux其中一個發行版CentOS的安裝使用,官網提供了是怎么獲取安裝Docker的,查看安裝指南

在CentOS上安裝Docker Engine - Community要求CentOS的版本必須是7以上版本,如果之前安裝過先進行移除操作,如果沒有安裝過此步驟則無須執行

yum remove docker \
           docker-client \
           docker-client-latest \
           docker-common \
           docker-latest \
           docker-latest-logrotate \
           docker-logrotate \
           docker-engine

安裝utils

yum install -y yum-utils device-mapper-persistent-data lvm2

配置合適的repo,考慮國外網站的速度建議選擇阿里雲給我們提供的repo

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo         官方倉庫
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo    阿里雲倉庫

配置好安裝源之后,讓yum檢測並使用最快的源

yum makecache fast

開始安裝Docker,ce表示是社區版

yum -y install docker-ce

啟動服務

service docker start 或者 systemctl start docker

查看Docker的安裝版本

docker version

 到此安裝工作就已經完成!

Docker架構

基本架構

Docker使用客戶端-服務器(client-server)架構模式,可以使用docker version來查看安裝的client和server端的版本。通過下面這個圖可以簡單清晰看出Server/Client通信,容器和鏡像、數據之間的關系系,用戶無法直接和Docker Server進行交互。

  • Docker是提供應用打包,部署與運行應用的容器化平台
  • Docker整體可以大致分為三部分
    • 內層:Server,可以是本地的也可以時遠程的,接收並分發Client端發起的請求。
    • 中間層:REST API,使用HTTP協議簡歷Client與Server之間的通信。
    • 外層:Client 通過中間層向Docker Server發起請求,執行命令。

Docker Daemon 是Docker架構中一個常駐在后台的系統進程,主要功能是在后台啟動一個Server接收處理Client發送的請求。Server負載接受Client發送的請求通過路由分發調度,找到相應的Handler來執行請求。

執行流程

客戶端Client向服務端Docker Daemon發送各種命令,包括鏡像的拉取,構建執行等,服務端由Docker daemon來負責管理Containers和Images,Registry是遠程注冊中心,用來提供各種各樣的官方或者第三方鏡像文件。

Docker使用

使用Docker運行鏡像

了解完Docker的基本概念后,接下來就開始一個簡單的例子來使用Docker,體會Docker帶給我我們的方便之處。使用Docker部署一個Tomcat應用。打開Docker的官方鏡像網站,搜索Tomcat可以看到官方給我們提供了很多鏡像版本,執行

docker pull tomcat

或者指定版本:

docker pull tomcat:8.5.49-jdk8-openjdk

可以看到在下載tomcat鏡像的時候里面包含了tomcat運行所需要的JDK,這也說明了鏡像是包含了應用運行的一整套環境,包含操作系統等等。

下載完成后就可以開始運行tomcat容器

docker run tomcat

docker使用常見命令如下:

docker pull imageName<:tags> 抽取遠程倉庫鏡像
docker images 查看已下載鏡像
docker run 創建容器,啟動應用
docker ps 查看正在運行的鏡像
docker rm 刪除容器 添加-f參數強制刪除
docker rmi 刪除鏡像

如果在下載過程中出現下載過慢的情況,可以配置阿里雲鏡像加速來提升下載速度

登錄阿里雲控制台,搜索 容器鏡像服務

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

創建配置文件,重啟Docker服務就可以使用阿里雲幫我們提供的Docker鏡像加速服務了。

宿主機與容器間的通信

直接使用docker run tomcat 容器,這時我們通過外部瀏覽器還是無法正常訪問tomcat首頁,這是因為容器內部端口是與外面隔離的,這時我們可以在啟動時配置端口映射,這時就可以建立容器與宿主機之間的通信,達到外部訪問的目的,其實實現起來也很簡單,只需執行

docker run -p 8080:8080 -d tomcat
-p 映射端口:容器端口
-d 表示在后台運行容器

這時就可以將容器的8080端口,與宿主機的8080端口進行綁定,與外面端口映射的時候我們可以自行指定。

這個時候如果要停止后台運行的容器,可以執行

docker kill containerID

如果不知道容器ID,可以使用docker ps -s來查看當前正在運行的容器信息,獲取containerID。

容器內部結構

通過Docker鏡像就可以快速實例化一個tomcat容器,我們省去了下載安裝JDK,配置環境變量,下載tomcat的過程,是不是很方便快捷,同樣我們如果需要mysql鏡像也可以直接下載MySQL鏡像來實例化一個MySQL數據庫,這樣是我們的應用在部署的時候可以模塊化來部署,這樣松耦合的實現可以方便我們對應用的管理,那么容器的內部結構究竟是如何實現的,其實我們也是可以直接進入容器內部,查看容器的內部結構。

docker exec [-it] 容器id 命令

例如:查看你tomcat,這里的命令是我們可選的,后面將會介紹。

[root@conly ~]# docker exec -it 3c7488f8d35a /bin/bash
root@3c7488f8d35a:/usr/local/tomcat

此處以tomcat容器為例,容器內部結構如圖所示:包含了tomcat運行的必備環境。 

這樣就已經進入容器內部,進入/usrl/ocal目錄,發現這里已經包含tomcat運行所需要的JDK和tomcat,而且容器內部自身是建立在一個Linux系統基礎之上的,我們可能疑惑為什么有一個操作系統,文件還這么小,這里linux僅支持這個應用,其他組件一律沒有安裝,所以占用資源較少,這也很好的解釋為什么Linux適合做服務器系統,可以根據不同業務場景定制化系統所需要的組件。

root@3c7488f8d35a:/usr/local# ls /usr/local/
aegis  bin  etc  games  include  lib  man  openjdk-8  sbin  share  src  tomcat

退出容器內部

exit

容器的生命周期

關於Docker容器的生命周期可以參考下圖:

  • docker run 命令包含 docker create 和 docker start兩個狀態
  • docker create 單執行,則會進入停止狀態
    • 執行docker start 進入開始狀態
    • docker destroy 刪除容器
  • docker kill 或者 docker stop 都置die狀態,緊接着進入stop狀態
    • docker kill 后進行docker start 創建新進程
    • docker stop 后進行docker start 進入恢復
  • docker restart 可以重啟
  • docker pause 進行暫停狀態

內存溢出OOM,會置die,查看狀態 docker ps -a 我們會發現更多子狀態。
關於Docker的基本學習先說這么多,后面介紹Docker中DockerFile,網橋,volume,以及Docker compose的進階使用。


免責聲明!

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



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