溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Docker系列:第一講.Docker簡介與安裝

發(fā)布時間:2020-06-30 02:02:40 來源:網(wǎng)絡(luò) 閱讀:1106 作者:好筆記運(yùn)維 欄目:云計算

什么是 Docker?

Docker的英文翻譯是“搬運(yùn)工”的意思,他搬運(yùn)的東西就是我們常說的集裝箱Container,Container 里面裝的是任意類型的 App,我們的開發(fā)人員可以通過 Docker 將App 變成一種標(biāo)準(zhǔn)化的、可移植的、自管理的組件,我們可以在任何主流的操作系統(tǒng)中開發(fā)、調(diào)試和運(yùn)行。
Docker系列:第一講.Docker簡介與安裝

Docker和虛擬機(jī)有什么區(qū)別?

從概念上來看 Docker 和我們傳統(tǒng)的虛擬機(jī)比較類似,只是更加輕量級,更加方便使,Docker 和虛擬機(jī)最主要的區(qū)別有一下幾點(diǎn):
Docker系列:第一講.Docker簡介與安裝

  • 虛擬化技術(shù)依賴的是物理CPU和內(nèi)存,是硬件級別的;而我們的 Docker 是構(gòu)建在操作系統(tǒng)層面的,利用操作系統(tǒng)的容器化技術(shù),所以 Docker 同樣的可以運(yùn)行在虛擬機(jī)上面。
  • 我們知道虛擬機(jī)中的系統(tǒng)就是我們常說的操作系統(tǒng)鏡像,比較復(fù)雜;而 Docker 比較輕量級,我們的可以用 Docker 部署一個獨(dú)立的 Redis,就類似于在虛擬機(jī)當(dāng)中安裝一個 Redis 應(yīng)用,但是我們用 Docker 部署的應(yīng)用是完全隔離的。
  • 我們都知道傳統(tǒng)的虛擬化技術(shù)是通過快照來保存狀態(tài)的;而 Docker 引入了類似于源碼管理的機(jī)制,將容器的快照歷史版本一一記錄下來,切換成本非常之低。
  • 傳統(tǒng)虛擬化技術(shù)在構(gòu)建系統(tǒng)的時候非常復(fù)雜;而 Docker 可以通過一個簡單的 Dockerfile 文件來構(gòu)建整個容器,更重要的是 Dockerfile 可以手動編寫,這樣應(yīng)用程序開發(fā)人員可以通過發(fā)布 Dockerfile 來定義應(yīng)用的環(huán)境和依賴,這樣對于持續(xù)交付非常有利。

為啥要用容器?

應(yīng)用容器是個啥樣子呢,一個做好的應(yīng)用容器長得就像一個裝好了一組特定應(yīng)用的虛擬機(jī)一樣,比如我現(xiàn)在想用 Redis,那我就找個裝好了 Redis 的容器就可以了,然后運(yùn)行起來,我就能直接使用了。

那為什么不能直接安裝一個 Redis 呢?肯定是可行的,但是有的時候根據(jù)每個人電腦的不同,在安裝的時候可能會報出各種各樣的錯誤,萬一你的機(jī)器中毒了,你的電腦掛了,你所有的服務(wù)都需要重新安裝。但是有了 Docker 或者說有了容器就不一樣了,你就相當(dāng)于有了一個可以運(yùn)行起來的虛擬機(jī),只要你能運(yùn)行容器,Redis 的配置就省了。而且如果你想換個電腦,沒問題,很簡單,直接把容器”端過來”就可以使用容器里面的服務(wù)了。

Docker 架構(gòu)

Docker 使用 C/S(客戶端/服務(wù)器)體系的架構(gòu),Docker 客戶端與 Docker 守護(hù)進(jìn)程通信,Docker 守護(hù)進(jìn)程負(fù)責(zé)構(gòu)建,運(yùn)行和分發(fā) Docker 容器。Docker 客戶端和守護(hù)進(jìn)程可以在同一個系統(tǒng)上運(yùn)行,也可以將 Docker 客戶端連接到遠(yuǎn)程 Docker 守護(hù)進(jìn)程。Docker 客戶端和守護(hù)進(jìn)程使用 REST API 通過UNIX套接字或網(wǎng)絡(luò)接口進(jìn)行通信。
Docker系列:第一講.Docker簡介與安裝

  • Docker Damon:dockerd,用來監(jiān)聽 Docker API 的請求和管理 Docker 對象,比如鏡像、容器、網(wǎng)絡(luò)和 Volume。
  • Docker Client:docker,docker client 是我們和 Docker 進(jìn)行交互的最主要的方式方法,比如我們可以通過 docker run 命令來運(yùn)行一個容器,然后我們的這個 client 會把命令發(fā)送給上面的 Dockerd,讓他來做真正事情。
  • Docker Registry:用來存儲 Docker 鏡像的倉庫,Docker Hub 是 Docker 官方提供的一個公共倉庫,而且 Docker 默認(rèn)也是從 Docker Hub 上查找鏡像的,當(dāng)然你也可以很方便的運(yùn)行一個私有倉庫,當(dāng)我們使用 docker pull 或者 docker run 命令時,就會從我們配置的 Docker 鏡像倉庫中去拉取鏡像,使用 docker push 命令時,會將我們構(gòu)建的鏡像推送到對應(yīng)的鏡像倉庫中。
  • Images:鏡像,鏡像是一個只讀模板,帶有創(chuàng)建 Docker 容器的說明,一般來說的,鏡像會基于另外的一些基礎(chǔ)鏡像并加上一些額外的自定義功能。比如,你可以構(gòu)建一個基于 Centos 的鏡像,然后在這個基礎(chǔ)鏡像上面安裝一個 Nginx 服務(wù)器,這樣就可以構(gòu)成一個屬于我們自己的鏡像了。
  • Containers:容器,容器是一個鏡像的可運(yùn)行的實例,可以使用 Docker REST API 或者 CLI 來操作容器,容器的實質(zhì)是進(jìn)程,但與直接在宿主執(zhí)行的進(jìn)程不同,容器進(jìn)程運(yùn)行于屬于自己的獨(dú)立的命名空間。因此容器可以擁有自己的 root 文件系統(tǒng)、自己的網(wǎng)絡(luò)配置、自己的進(jìn)程空間,甚至自己的用戶 ID 空間。容器內(nèi)的進(jìn)程是運(yùn)行在一個隔離的環(huán)境里,使用起來,就好像是在一個獨(dú)立于宿主的系統(tǒng)下操作一樣。這種特性使得容器封裝的應(yīng)用比直接在宿主運(yùn)行更加安全。
  • 底層技術(shù)支持:Namespaces(做隔離)、CGroups(做資源限制)、UnionFS(鏡像和容器的分層) the-underlying-technology Docker 底層架構(gòu)分析

Docker安裝

直接前往官方文檔選擇合適的平臺安裝即可,比如我們這里想要在centos系統(tǒng)上安裝 Docker,這前往地址https://docs.docker.com/install/linux/docker-ce/centos/根據(jù)提示安裝即可。

1、安裝依賴軟件包:

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

2、添加軟件倉庫,我們這里使用穩(wěn)定版 Docker,執(zhí)行下面命令添加 yum 倉庫地址:

$ sudo yum-config-manager \
    --add-repo \
    https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

# 官方源
# $ sudo yum-config-manager \
#     --add-repo \
#     https://download.docker.com/linux/centos/docker-ce.repo

3、然后直接安裝即可:

$ sudo yum install docker-ce

4、如果要安裝指定的版本,可以使用 yum list 列出可用的版本:

$ yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64            18.03.0.ce-1.el7.centos             docker-ce-stable

5、比如這里可以安裝18.03.0.ce版本:

$ sudo yum install docker-ce-18.03.0.ce

6、要啟動 Docker 也非常簡單:

$ sudo systemctl enable docker
$ sudo systemctl start docker

7、另外一種安裝方式是可以直接下載指定的軟件包直接安裝即可,前往地址: https://download.docker.com/linux/centos/7/x86_64/stable/Packages/找到合適的.rpm包下載,然后安裝即可:

$ sudo yum install /path/to/package.rpm

Docker 加速器

國內(nèi)從 Docker Hub 拉取鏡像有時會遇到困難,此時可以配置鏡像加速器。Docker 官方和國內(nèi)很多云服務(wù)商都提供了國內(nèi)加速器服務(wù),例如:
Docker 官方提供的中國 registry mirror https://registry.docker-cn.com
七牛云加速器 https://reg-mirror.qiniu.com/

當(dāng)配置某一個加速器地址之后,若發(fā)現(xiàn)拉取不到鏡像,請切換到另一個加速器地址。國內(nèi)各大云服務(wù)商均提供了 Docker 鏡像加速服務(wù),建議根據(jù)運(yùn)行 Docker 的云平臺選擇對應(yīng)的鏡像加速服務(wù)。

對于使用 systemd 的系統(tǒng),請在 /etc/docker/daemon.json 中寫入如下內(nèi)容(如果文件不存在請新建該文件)

{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ]
}

注意:一定要保證該文件符合 json 規(guī)范,否則 Docker 將不能啟動。

重新啟動服務(wù)。

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

測試 Docker 是否安裝正確

$ docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete
Digest: sha256:be0cd392e45be79ffeffa6b05338b98ebb16c87b255f48e297ec7f98e123905c
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

若能正常輸出以上信息,則說明安裝成功。

添加內(nèi)核參數(shù)

默認(rèn)配置下,如果在 CentOS 使用 Docker CE 看到下面的這些警告信息:

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

請?zhí)砑觾?nèi)核配置參數(shù)以啟用這些功能。

$ sudo tee -a /etc/sysctl.conf <<-EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

然后重新加載 sysctl.conf 即可

$ sudo sysctl -p
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI