Docker安裝&部署


前言

20173月開始docker在原來的基礎上分為兩個版本:Docker CEDocker EE

Docker CE 即社區免費版,Docker EE 即企業版,強調安全,但是需要付費。

Docker官方建議從CentOs7.0已上系統版本安裝部署。

 

一、docker簡介

1、Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從 Apache2.協議開源。

2、Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。

3、容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone app,更重要的是容器性能開銷極低。

4、Docker 17.03 版本之后分為 CECommunity Edition: 社區版) 和 EEEnterprise Edition: 企業版),我們用社區版就可以了。

5Docker是通過內核虛擬化技術(namespacescgroups)來提供容器的資源隔離與資源限制。由於Docker通過操作系統層的虛擬化實現隔離(對操作系統的內核有要求),所以Docker容器在運行時,不需要類似虛擬機(VM)額外的操作系統開銷,從而比kvm虛擬機更輕量。也可以把docker理解為一種簡單的打包技術

 

docker目標

docker的主要目標是"Build,Ship and Run any App,Angwhere",構建,運輸,處處運行

構建:制作docker鏡像,打包容器的所有系統目錄文件

運輸:下載docker鏡像

運行:基於docker鏡像提供的rootfs,啟動容器

總結:只要能運行docker容器,那么docker鏡像中已經安裝好的軟件也可以運行,所以說docker是一種件的打包技術。

 

應用場景

 

1、Web 應用的自動化打包和發布。

 

2、自動化測試和持續集成、發布。

 

3、在服務型環境中部署和調整數據庫或其他的后台應用。

 

4、從頭編譯或者擴展現有的 OpenShift Cloud Foundry 平台來搭建自己的 PaaS 環境。

 

docker優勢

 

1:解決了操作系統和軟件運行環境的依賴例如:nginxgit需要安裝的openssl版本不同,在同一台設備上安裝會造成軟件沖突

 

2:對於開發人員來說,再也不用擔心不會部署開發環境

 

3:開發環境,測試環境和生產環境高度一致。

 

4:讓用戶體驗產品新特性的又一種思路。

 

5:容器不需要進行硬件虛擬以及運行完整操作系統等額外開銷,Docker 對系統資源的利用率更高。無論是應用執行速度、內存損耗或者文件存儲速度,都要比傳統虛擬機技術更高效。因此,相比虛擬機技術,一個相同配置的主機,往往可以運行更多數量的應用。

 

6:傳統的虛擬機技術啟動應用服務往往需要數分鍾,而 Docker 容器應用,由於直接運行於宿主內核,無需啟動完整的操作系統,因此可以做到秒級、甚至毫秒級的啟動時間。大大的節約了開發、測試、部署的時間。

 

7:由於 Docker 確保了執行環境的一致性,使得應用的遷移更加容易。Docker 可以在很多平台上運行,無論是物理機、虛擬機、公有雲、私有雲,甚至是筆記本,其運行結果是一致的。因此用戶可以很輕易的將在一個平台上運行的應用,遷移到另一個平台上,而不用擔心運行環境的變化導致應用無法正常運行的情況。

 

8:Docker 使用的分層存儲以及鏡像的技術,使得應用重復部分的復用更為容易,也使得應用的維護更新更加簡單,基於基礎鏡像進一步擴展鏡像也變得非常簡單。此外,Docker 團隊同各個開源項目團隊一起維護了一大批高質量的 官方鏡像,既可以直接在生產環境使用,又可以作為基礎進一步定制,大大的降低了應用服務的鏡像制作成本。

 

Docker與虛擬機的區別

二、docker的架構

1、docker三個基本概念:

1.鏡像(Image):Docker 鏡像(Image),就相當於是一個 root 文件系統。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 文件系統。

2. 容器(Container):鏡像(Image)和容器(Container)的關系,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。

3.倉庫(Repository):倉庫可看着一個代碼控制中心,用來保存鏡像。

Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。

Docker 容器通過 Docker 鏡像來創建。

2、docker的鏡像分層

一個完整的Docker鏡像可以支撐一個Docker容器的運行,在Docker容器運行過程中主要提供文件系統數據支撐。

Docker鏡像作為docker中最基本的概念,有以下幾個特性:

1.鏡像分層,每個鏡像都由一個或多個鏡像層組成;

2.可通過在某個鏡像加上一定的鏡像層得到新鏡像(此過程可通過編寫dockerfile或基於容器Commit實現);

3.每個鏡像層擁有唯一鏡像ID

4.鏡像在存儲和使用時共享相同的鏡像層(根據ID),所以在pull鏡像時,已有的鏡像層會自動跳過下載;

5.每個鏡像層都是只讀,即使啟動成容器,也無法對其真正的修改,修改只會作用於最上層的容器層;

Docker容器,可以理解為一個或多個運行進程,而這些運行進程將占有相應的內存,相應的CPU計算資源,相應的虛擬網絡設備以及相應的文件系統資源。而Docker容器所占用的文件系統資源,則通過Docker鏡像的鏡像層文件來提供。

3、鏡像與容器的聯系

當啟動一個新的容器時,Docker會加載只讀鏡像,並在其之上添加一個讀寫層,即容器層。

docker 容器=鏡像+可讀層

4、鏡像存儲核心技術:聯合文件系統

鏡像的高效存儲:引入聯合文件系統,將鏡像多層文件聯合掛載到容器文件系統。

5、鏡像存儲核心技術:寫時復制(COW)

引入寫時復制(copy-on-write),需要修改文件操作時,會先從鏡像里把要寫的文件復制到自己的文件系統(容器的讀寫層)中進行修改。源鏡像層中的文件不會發生變化。

前提條件

一、內核

1.Docker運行內核要求比較高,因此一般建議使用Ubuntu這樣的平台運行,但是Docker作為一個標准容器也支持CentOS, Mac OS X, Windows等平台。目前Docker支持以下版本CentOS:

(1)CentOS764位)

(2)CentOS6.564位及以后)

 

2.在運行CentOS 6.5及以后版本時,需要內核版本>=2.6.32-431,因為這些內核包含了運行Docker的一些特定修改。

uname -r

注:網上很多教程說CentOS6.5必須要升級內核到3.10才能使用docker,其實是【可選】升級,但最好升級。

二、Device Mapper

1.Docker默認使用AUFS作為存儲驅動,但是AUFS並沒有被包括在Linux的主線內核中。CentOS中可以使用Device Mapper作為存儲驅動,這是在2.6.9內核版本引入的新功能。我們需要先確認是否啟用該功能:

ls -l /sys/class/misc/device-mapper

(1)如果沒有檢測到Device Mapper,需要安裝device-mapper軟件包:

sudo yum install -y device-mapper

(2)然后重新加載dm_mod內核模塊:

sudo modprobe dm_mod

3)再次確認存儲驅動

ls -l /sys/class/misc/device-mapper

安裝

2.1.CentOS 7

2.2.1.准備

CentOS7能上外網

yum -y install gcc
yum -y install gcc-c++

卸載舊版本

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

如果yum報告未安裝任何這些軟件,表示情況正常。

 

2.2.2.安裝(過程版)    往下看

 

安裝依賴包

安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
設置stable鏡像倉庫
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 鏡像倉庫以來您首次刷新軟件包索引,系統將提示您接受 GPG 密鑰,並且將顯示此密鑰的指紋。驗證指紋是否正確,並且在正確的情況下接受此密鑰。指紋應匹配 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35。

安裝docker

1、安裝指定版本:

yum list docker-ce.x86_64  --showduplicates | sort -r    #從高到低列出Docker-ce的版本

該軟件包名稱是軟件包名稱(docker-ce)加上版本字符串(第二列),從第一個冒號(:)一直到第一個連字符,並用連字符(-)分隔。

例如:指定版本(docker-ce-18.09.9)進行安裝:

 

yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

# 例如:
yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io

 

2、安裝最新版本:

yum -y install docker-ce

啟動docker

執行以下命令啟動docker:

systemctl start docker

啟動時報錯信息解決方法:

Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

systemctl status docker.service

解決方案:卸載docker重新安裝新的docker。

解決步驟:

1、卸載Docker,舊版本docker沒安裝成功直接卸載掉。

1)查看安裝過的包:

yum list installed | grep docker

本機安裝過的舊版本:

docker-ce.x86_64

docker-ce-cli.x86_64

 

 

 

docker-ce-rootless-extras.x86_64

2)刪除安裝的Docker相關的軟件包:

yum -y remove docker-ce.x86_64
yum -y remove docker-ce-cli.x86_64
yum -y remove docker-common.x86_64

 2、安裝Docker

1)查看內核版本【Docker要求Centos系統的內核版本高於3.10】

uname -r        【本機的內核版本:3.10.0-1160.11.1.el7.x86_64】

2)把yum包更新到最新(時間可能有點長,慢慢等待......)

yum update

3)安裝需要的軟件包。

【yum-util提供yum-config-manager功能,另外兩個是devicemapper驅動所需依賴】
yum install -y yum -utils device-mapper-persistent-data lvm2

4)設置yum源

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

5)查看倉庫的docker版本

yum list docker-ce --showduplicates | sort -r

6)安裝docker

yum install docker-ce

7)啟動docker,設置開機啟動docker。

systemctl start docker
systemctl enable docker

systemctl stop docker【補充:這是關閉docker的命令】

(8)查看版本

docker version

用一張圖總結docker命令

Docker工作流

docker安裝與啟動手動版

yum install -y epel-release

yum install docker-io # 安裝docker

# 配置文件vim /etc/sysconfig/docker
chkconfig docker on  # 加入開機啟動

service docker start # 啟動docker服務

# 基本信息查看
docker version # 查看docker的版本號,包括客戶端、服務端、依賴的Go等

docker info # 查看系統(docker)層面信息,包括管理的images, containers數等

 

 

docker pull centos 下載

docker images [ centos ] 查看
docker run -i -t centos /bin/bash
查看鏡像詳細信息
注:下面容器一節會看到,這個命令也能夠用來查看容器的詳細信息
docker inspect [image-id]

docker安裝與啟動shell版

安裝shell腳本

 

install-docker.sh

#!/bin/bash
# 卸載舊版本
echo ""
echo ""
echo "#########################################################"
echo "# 卸載舊版本 -- 開始                                    #"
echo "#########################################################"
yum -y remove docker docker-common docker-selinux docker-engine
echo "#########################################################"
echo "# 卸載舊版本 -- 結束                                    #"
echo "#########################################################"

# 安裝需要的依賴軟件包
echo ""
echo ""
echo "#########################################################"
echo "# 安裝需要的軟件包 -- 開始                              #"
echo "#########################################################"
yum install -y yum-utils device-mapper-persistent-data lvm2
echo "#########################################################"
echo "# 安裝需要的軟件包 -- 結束                              #"
echo "#########################################################"

# 設置 yum 源,清華鏡像倉庫,速度很快
echo ""
echo ""
echo "#########################################################"
echo "# 設置 yum 源 -- 開始                                   #"
echo "#########################################################"
#安裝wget,如果已安裝則會跳過
yum -y install wget
#根據你的發行版下載repo文件:
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
#把軟件倉庫地址替換為 TUNA:
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
echo "#########################################################"
echo "# 設置 yum 源 -- 結束                                   #"
echo "#########################################################"

# 安裝 docker-ce
echo ""
echo ""
echo "#########################################################"
echo "# 安裝 docker-ce -- 開始                                #"
echo "#########################################################"

yum -y install docker-ce
echo "#########################################################"
echo "# 安裝 docker-ce -- 結束                                #"
echo "#########################################################"

# 啟動並加入開機啟動
echo ""
echo ""
echo "#########################################################"
echo "# 啟動並加入開機啟動 -- 開始                            #"
echo "#########################################################"
systemctl start docker
systemctl enable docker
echo "#########################################################"
echo "# 啟動並加入開機啟動 -- 結束                            #"
echo "#########################################################"

# 驗證安裝是否成功
echo ""
echo ""
echo "#########################################################"
echo "# 驗證安裝是否成功 -- 開始                              #"
echo "#########################################################"
docker version
echo "#########################################################"
echo "# 驗證安裝是否成功 -- 結束                              #"
echo "#########################################################"

# 安裝docker-compose
echo ""
echo ""
echo "#########################################################"
echo "# 安裝docker-compose -- 開始                            #"
echo "#########################################################"
# 從國內鏡像 get.daocloud.io 快速下載
curl -L https://get.daocloud.io/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
echo "#########################################################"
echo "# 安裝docker-compose -- 結束                            #"
echo "#########################################################"

# 驗證安裝是否成功
echo ""
echo ""
echo "#########################################################"
echo "# 驗證安裝是否成功 -- 開始                              #"
echo "#########################################################"
docker-compose --version
echo "#########################################################"
echo "# 驗證安裝是否成功 -- 結束                              #"
echo "#########################################################"

# 添加 docker 國內鏡像站點並重啟docker
echo ""
echo ""
echo "#########################################################"
echo "# 添加 docker 國內鏡像站點並重啟docker -- 開始          #"
echo "#########################################################"
#創建目錄:/etc/docker
mkdir -p /etc/docker
echo '{ "registry-mirrors": [ "https://registry.docker-cn.com" ] }' >> /etc/docker/daemon.json
systemctl restart docker
echo "#########################################################"
echo "# 添加 docker 國內鏡像站點並重啟docker -- 結束          #"
echo "#########################################################"

echo ""
echo ""
echo "install OK!" # 提示安裝完成
echo ""
echo "enjoy!"
echo "songbao--"$(date +%F%n%A--%T) #輸出年月日星期時分秒
echo ""
echo ""

卸載shell腳本

Uninstall-docker.sh

#!/bin/bash
echo ""
echo ""
echo ""
echo "#####################################################"
echo "# 刪除docker-ce相關程序及依賴                       #"
echo "#####################################################"
yum -y remove docker-ce \
                  docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

echo ""
echo "#####################################################"
echo "# 刪除docker服務                                    #"
echo "#####################################################"
rm -rf /etc/systemd/system/docker.service.d

echo ""
echo "#####################################################"
echo "# 刪除相關目錄                                      #"
echo "#####################################################"
rm -rf /var/lib/docker
rm -rf /var/run/docker

echo ""
echo "#####################################################"
echo "# 安裝網橋管理工具                                  #"
echo "#####################################################"
yum -y install bridge-utils

echo ""
echo "#####################################################"
echo "# 停止並刪除docker0                                  #"
echo "#####################################################"
ifconfig docker0 down
brctl delbr docker0

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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