Docker系列:第一講.Docker簡介與安裝
Docker的英文翻譯是“搬運工”
的意思,他搬運的東西就是我們常說的集裝箱Container
,Container 裏面裝的是任意類型的 App,我們的開發人員可以通過 Docker 將App 變成一種標準化的
、可移植的
、自管理的
組件,我們可以在任何主流的操作系統中開發、調試和運行。
Docker和虛擬機有什麽區別?
從概念上來看 Docker 和我們傳統的虛擬機比較類似,只是更加輕量級,更加方便使,Docker 和虛擬機最主要的區別有一下幾點:
- 虛擬化技術依賴的是物理CPU和內存,是硬件級別的;而我們的 Docker 是構建在操作系統層面的,利用操作系統的容器化技術,所以 Docker 同樣的可以運行在虛擬機上面。
- 我們知道虛擬機中的系統就是我們常說的操作系統鏡像,比較復雜;而 Docker 比較輕量級,我們的可以用 Docker 部署一個獨立的 Redis,就類似於在虛擬機當中安裝一個 Redis 應用,但是我們用 Docker 部署的應用是完全隔離的。
- 我們都知道傳統的虛擬化技術是通過快照來保存狀態的;而 Docker 引入了類似於源碼管理的機制,將容器的快照歷史版本一一記錄下來,切換成本非常之低。
- 傳統虛擬化技術在構建系統的時候非常復雜;而 Docker 可以通過一個簡單的 Dockerfile 文件來構建整個容器,更重要的是 Dockerfile 可以手動編寫,這樣應用程序開發人員可以通過發布 Dockerfile 來定義應用的環境和依賴,這樣對於持續交付非常有利。
為啥要用容器?
應用容器是個啥樣子呢,一個做好的應用容器長得就像一個裝好了一組特定應用的虛擬機一樣,比如我現在想用 Redis,那我就找個裝好了 Redis 的容器就可以了,然後運行起來,我就能直接使用了。
那為什麽不能直接安裝一個 Redis 呢?肯定是可行的,但是有的時候根據每個人電腦的不同,在安裝的時候可能會報出各種各樣的錯誤,萬一你的機器中毒了,你的電腦掛了,你所有的服務都需要重新安裝。但是有了 Docker 或者說有了容器就不一樣了,你就相當於有了一個可以運行起來的虛擬機,只要你能運行容器,Redis 的配置就省了。而且如果你想換個電腦,沒問題,很簡單,直接把容器”端過來”就可以使用容器裏面的服務了。
Docker 架構
Docker 使用 C/S(客戶端/服務器)體系的架構,Docker 客戶端與 Docker 守護進程通信,Docker 守護進程負責構建,運行和分發 Docker 容器。Docker 客戶端和守護進程可以在同一個系統上運行,也可以將 Docker 客戶端連接到遠程 Docker 守護進程。Docker 客戶端和守護進程使用 REST API 通過UNIX套接字或網絡接口進行通信。
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/
根據提示安裝即可。
1、安裝依賴軟件包:
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2、添加軟件倉庫,我們這裏使用穩定版 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
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 加速器
國內從 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
Docker系列:第一講.Docker簡介與安裝