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

什麼是 Docker?

Docker的英文翻譯是「搬運工」的意思,他搬運的東西就是咱們常說的集裝箱Container,Container 裏面裝的是任意類型的 App,咱們的開發人員能夠經過 Docker 將App 變成一種標準化的可移植的自管理的組件,咱們能夠在任何主流的操做系統中開發、調試和運行。
輸入圖片說明linux

Docker和虛擬機有什麼區別?

從概念上來看 Docker 和咱們傳統的虛擬機比較相似,只是更加輕量級,更加方便使,Docker 和虛擬機最主要的區別有一下幾點:
輸入圖片說明docker

  • 虛擬化技術依賴的是物理CPU和內存,是硬件級別的;而咱們的 Docker 是構建在操做系統層面的,利用操做系統的容器化技術,因此 Docker 一樣的能夠運行在虛擬機上面。
  • 咱們知道虛擬機中的系統就是咱們常說的操做系統鏡像,比較複雜;而 Docker 比較輕量級,咱們的能夠用 Docker 部署一個獨立的 Redis,就相似於在虛擬機當中安裝一個 Redis 應用,可是咱們用 Docker 部署的應用是徹底隔離的。
  • 咱們都知道傳統的虛擬化技術是經過快照來保存狀態的;而 Docker 引入了相似於源碼管理的機制,將容器的快照歷史版本一一記錄下來,切換成本很是之低。
  • 傳統虛擬化技術在構建系統的時候很是複雜;而 Docker 能夠經過一個簡單的 Dockerfile 文件來構建整個容器,更重要的是 Dockerfile 能夠手動編寫,這樣應用程序開發人員能夠經過發佈 Dockerfile 來定義應用的環境和依賴,這樣對於持續交付很是有利。

爲啥要用容器?

應用容器是個啥樣子呢,一個作好的應用容器長得就像一個裝好了一組特定應用的虛擬機同樣,好比我如今想用 Redis,那我就找個裝好了 Redis 的容器就能夠了,而後運行起來,我就能直接使用了。json

那爲何不能直接安裝一個 Redis 呢?確定是可行的,可是有的時候根據每一個人電腦的不一樣,在安裝的時候可能會報出各類各樣的錯誤,萬一你的機器中毒了,你的電腦掛了,你全部的服務都須要從新安裝。可是有了 Docker 或者說有了容器就不同了,你就至關於有了一個能夠運行起來的虛擬機,只要你能運行容器,Redis 的配置就省了。並且若是你想換個電腦,沒問題,很簡單,直接把容器」端過來」就可使用容器裏面的服務了。ubuntu

Docker 架構

Docker 使用 C/S(客戶端/服務器)體系的架構,Docker 客戶端與 Docker 守護進程通訊,Docker 守護進程負責構建,運行和分發 Docker 容器。Docker 客戶端和守護進程能夠在同一個系統上運行,也能夠將 Docker 客戶端鏈接到遠程 Docker 守護進程。Docker 客戶端和守護進程使用 REST API 經過UNIX套接字或網絡接口進行通訊。
輸入圖片說明centos

  • Docker Damon:dockerd,用來監聽 Docker API 的請求和管理 Docker 對象,好比鏡像、容器、網絡和 Volume。
  • Docker Client:docker,docker client 是咱們和 Docker 進行交互的最主要的方式方法,好比咱們能夠經過 docker run 命令來運行一個容器,而後咱們的這個 client 會把命令發送給上面的 Dockerd,讓他來作真正事情。
  • Docker Registry:用來存儲 Docker 鏡像的倉庫,Docker Hub 是 Docker 官方提供的一個公共倉庫,並且 Docker 默認也是從 Docker Hub 上查找鏡像的,固然你也能夠很方便的運行一個私有倉庫,當咱們使用 docker pull 或者 docker run 命令時,就會從咱們配置的 Docker 鏡像倉庫中去拉取鏡像,使用 docker push 命令時,會將咱們構建的鏡像推送到對應的鏡像倉庫中。
  • Images:鏡像,鏡像是一個只讀模板,帶有建立 Docker 容器的說明,通常來講的,鏡像會基於另外的一些基礎鏡像並加上一些額外的自定義功能。好比,你能夠構建一個基於 Centos 的鏡像,而後在這個基礎鏡像上面安裝一個 Nginx 服務器,這樣就能夠構成一個屬於咱們本身的鏡像了。
  • Containers:容器,容器是一個鏡像的可運行的實例,可使用 Docker REST API 或者 CLI 來操做容器,容器的實質是進程,但與直接在宿主執行的進程不一樣,容器進程運行於屬於本身的獨立的命名空間。所以容器能夠擁有本身的 root 文件系統、本身的網絡配置、本身的進程空間,甚至本身的用戶 ID 空間。容器內的進程是運行在一個隔離的環境裏,使用起來,就好像是在一個獨立於宿主的系統下操做同樣。這種特性使得容器封裝的應用比直接在宿主運行更加安全。
  • 底層技術支持:Namespaces(作隔離)、CGroups(作資源限制)、UnionFS(鏡像和容器的分層) the-underlying-technology Docker 底層架構分析

Docker安裝

直接前往官方文檔選擇合適的平臺安裝便可,好比咱們這裏想要在centos系統上安裝 Docker,這前往地址https://docs.docker.com/install/linux/docker-ce/centos/根據提示安裝便可。安全

一、安裝依賴軟件包:bash

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

二、添加軟件倉庫,咱們這裏使用穩定版 Docker,執行下面命令添加 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

三、而後直接安裝便可:網絡

$ sudo yum install docker-ce

四、若是要安裝指定的版本,可使用 yum list 列出可用的版本:架構

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

五、好比這裏能夠安裝18.03.0.ce版本:

$ sudo yum install docker-ce-18.03.0.ce

六、要啓動 Docker 也很是簡單:

$ sudo systemctl enable docker
$ sudo systemctl start docker

七、另一種安裝方式是能夠直接下載指定的軟件包直接安裝便可,前往地址: https://download.docker.com/linux/centos/7/x86_64/stable/Packages/找到合適的.rpm包下載,而後安裝便可:

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

Docker 加速器

國內從 Docker Hub 拉取鏡像有時會遇到困難,此時能夠配置鏡像加速器。Docker 官方和國內不少雲服務商都提供了國內加速器服務,例如:
Docker 官方提供的中國 registry mirror https://registry.docker-cn.com
七牛雲加速器 https://reg-mirror.qiniu.com/

當配置某一個加速器地址以後,若發現拉取不到鏡像,請切換到另外一個加速器地址。國內各大雲服務商均提供了 Docker 鏡像加速服務,建議根據運行 Docker 的雲平臺選擇對應的鏡像加速服務。

對於使用 systemd 的系統,請在 /etc/docker/daemon.json 中寫入以下內容(若是文件不存在請新建該文件)

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

注意:必定要保證該文件符合 json 規範,不然 Docker 將不能啓動。

從新啓動服務。

$ 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/

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

添加內核參數

默認配置下,若是在 CentOS 使用 Docker CE 看到下面的這些警告信息:

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

請添加內核配置參數以啓用這些功能。

$ 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
相關文章
相關標籤/搜索