docker的安裝步驟和出現的問題
docker的安裝
1、Docker簡介
Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
Docker 從 17.03 版本之後分爲 CE(Community Edition: 社區版) 和 EE(Enterprise Edition: 企業版),我們用社區版就可以了。
Docker官網:https://www.docker.com/
Docker的應用場景
Web 應用的自動化打包和發佈。
自動化測試和持續集成、發佈。
在服務型環境中部署和調整數據庫或其他的後臺應用。
從頭編譯或者擴展現有的 OpenShift 或 Cloud Foundry 平臺來搭建自己的 PaaS 環境。
Docker 的優點
1、簡化程序:
Docker 讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上,便可以實現虛擬化。Docker改變了虛擬化的方式,使開發者可以直接將自己的成果放入Docker中進行管理。方便快捷已經是 Docker的最大優勢,過去需要用數天乃至數週的 任務,在Docker容器的處理下,只需要數秒就能完成。
2、避免選擇恐懼症:
如果你有選擇恐懼症,還是資深患者。那麼你可以使用 Docker 打包你的糾結!比如 Docker 鏡像;Docker 鏡像中包含了運行環境和配置,所以 Docker 可以簡化部署多種應用實例工作。比如 Web 應用、後臺應用、數據庫應用、大數據應用比如 Hadoop 集羣、消息隊列等等都可以打包成一個鏡像部署。
3、節省開支:
一方面,雲計算時代到來,使開發者不必爲了追求效果而配置高額的硬件,Docker 改變了高性能必然高價格的思維定勢。Docker 與雲的結合,讓雲空間得到更充分的利用。不僅解決了硬件管理的問題,也改變了虛擬化的方式。
Docker的架構
Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。
Docker 容器通過 Docker 鏡像來創建。
容器與鏡像的關係類似於面向對象編程中的對象與類。
Docker | 面向對象 |
---|---|
容器 | 對象 |
鏡像 | 類 |
名稱 | 作用 |
---|---|
Docker 鏡像(Images) | 是用於創Docker 鏡像建 Docker 容器的模板。 |
Docker 容器(Container) | 容器是獨立運行的一個或一組應用。 |
Docker 客戶端(Client) | Docker 客戶端通過命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 與 Docker 的守護進程通信。 |
Docker 主機(Host) | 一個者物理或虛擬的機器用於執行 Docker 守護進程和容器。 |
Docker 倉庫(Registry) | Docker 倉庫用來保存鏡像,可以理解爲代碼控制中的代碼倉庫。 |
Docker Hub(https://hub.docker.com) | 提供了龐大的鏡像集合供使用。 |
Docker Machine Docker Machine是一個簡化Docker安裝的命令行工具,通過一個簡單的命令行即可在相應的平臺上安裝Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。
2.Docker 和虛擬機的區別
Docker是一種輕量級的虛擬化技術,比傳統的虛擬機性能更好。
下圖是虛擬機的體系結構:
server - 表示真實電腦。
Host OS - 真實電腦的操作系統,例如:Windows,Linux
Hypervisor - 虛擬機平臺,模擬硬件,如VMWare,VirtualBox
Guest OS - 虛擬機平臺上安裝的操作系統,例如CentOS Linux
App - 虛擬機操作系統上的應用,例如nginx
下圖是Docker的體系結構:
server - 表示真實電腦。
Host OS - 真實電腦的操作系統,例如:Windows,Linux
Docker Engine - 新一代虛擬化技術,不需要包含單獨的操作系統。
App - 所有的應用程序現在都作爲Docker容器運行。
這種體系結構的明顯優勢是,不需要爲虛擬機操作系統提供硬件模擬。所有應用程序都作爲Docker容器工作,性能更好。
3.Centos7安裝Docker
Docker從1.13版本之後採用時間線的方式作爲版本號,分爲社區版CE和企業版EE。
社區版是免費提供給個人開發者和小型團體使用的,企業版會提供額外的收費服務,比如經過官方測試認證過的基礎設施、容器、插件等。
社區版按照stable和edge兩種方式發佈,每個季度更新stable版本,如17.06,17.09;每個月份更新edge版本,如17.09,17.10。
我們平時用社區版就足夠了。所以我們安裝社區版;
我們主要參考:https://docs.docker.com/install/linux/docker-ce/centos/ 來安裝;
我們切換到root用戶
1、Docker 要求 CentOS 系統的內核版本高於 3.10 ,查看本頁面的前提條件來驗證你的CentOS 版本是否支持 Docker 。
通過 uname -r 命令查看你當前的內核版本
uname -r
2、使用 root 權限登錄 Centos。確保 yum 包更新到最新。
yum update
3、卸載舊版本(如果安裝過舊版本的話)
yum remove docker docker-common docker-selinux docker-engine
4、安裝需要的軟件包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的
yum install -y yum-utils device-mapper-persistent-data lvm2
5、設置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
6,安裝最新版本的Docker
yum install docker-ce docker-ce-cli containerd.io
如果出現下面問題
遇到這種情況有兩種做法:
1、沒網,試着:ping www.baidu.com
如果顯示沒有連接的話,就說明沒網,也就無法使用yum 命令。
2、ping通了的話,還是是用不了yum命令,說明是yum鏡像沒有了,那麼就得下載一個來更新。
在安裝完CentOS後一般需要修改yum源,才能夠在安裝更新rpm包時獲得比較理想的速度。國內比較快的有163源、sohu源。這裏以163源爲例子。
A、 cd /etc/yum.repos.d
B、 mv CentOS-Base.repo CentOS-Base.repo.backup
C、wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
D、mv CentOS6-Base-163.repo CentOS-Base.repo
E、yum clean all
最後在使用yum 就可以了。
7,啓動Docker並設置開機啓動
systemctl start docker
systemctl enable docker
8,驗證Docker
docker version
說明安裝OK;
9,Docker HelloWorld測試;
docker run hello-world
默認的遠程倉庫 https://hub.docker.com/ 網速稀爛
Docker HelloWorld運行原理解析
運行 docker run hello-world
本地倉庫未能找到該鏡像,然後去遠程倉庫尋找以及下載該鏡像;
然後我們再執行該命令:
出來了 Hellowold。我們具體來分析下 執行原理和過程;
從左到右 client客戶端,Docker運行主機,遠程倉庫;
docker build ,pull,run分別是 構建,拉取,運行命令,後面再細講;
中間Docker主機裏有 Docker daemon主運行線程,以及Containers容器,容器裏可以運行很多實例,(實例是從右側Images鏡像實例化出來的)Images是存儲再本地的鏡像文件,比如 Redis,Tomat這些鏡像文件;
右側是Registry鏡像倉庫,默認遠程鏡像倉庫 https://hub.docker.com/ 不過是國外主機,下載很慢,不穩定,所以我們後面要配置成阿里雲倉庫鏡像地址,穩定快捷;
執行 docker run hello-world的過程看如下圖例:
阿里雲鏡像倉庫
Docker默認遠程倉庫是https://hub.docker.com/
比如我們下載一個大點的東西,龜速
由於是國外主機,類似Maven倉庫,慢得一腿,經常延遲,破損;
所以我們一般都是配置國內鏡像,比如阿里雲,網易雲等;推薦阿里雲,穩定點;
配置步驟如下:
1,登錄進入阿里雲鏡像服務中心,獲取鏡像地址
進入阿里雲容器鏡像服務地址:
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
使用你的淘寶賬號密碼登錄
這裏我們獲取鏡像地址;
2,在/etc/docker目錄下找到在daemon.json文件(沒有就新建),將下面內容寫入
{
“registry-mirrors”: [“https://xxxxxxx.mirror.aliyuncs.com”]
}
3,重啓daemon
systemctl daemon-reload
4,重啓docker服務
systemctl restart docker
5,測試下載centoc7查看網速1M左右就OK了
安裝是遇到的問題
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
解決centos7中安裝好Docker後報以下錯誤
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
解決方法:
1 systemctl daemon-reload
2 sudo service docker restart
3 sudo service docker status
Job for docker.service failed because the control process exited with error code. See
在Liunx中使用Docker, 注: Liunx使用的是在虛擬機下的centOS7版本
在剛開始安裝Docker時沒有任何錯誤, 但是在後續的docker啓動過程中, 出現以下問題:
Job for docker.service failed because the control process exited with error code. See “systemctl status docker.service”
解決方法
1.仔細查看查看docker配置文件daemon.json中書寫是否規範。
2.從新安裝docker
步驟一:將以前下載好的Docker卸載乾淨, 使用如下命令:
yum remove docker-*
步驟二:更新該Liunx系統的內核版本,使用如下命令:
yum update
建議更新完之後, 重啓一下系統
步驟三:繼續下載安裝docker(儘量使用高級管理員權限下載)使用如下命令
yum install dacker
步驟四:使用如下命令啓動docker
systemctl start docker
問題解決!