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的進階使用。