1. 程式人生 > 資訊 >僅限今日: 松下智慧馬桶蓋 1049 元探底(日常 1899 元)

僅限今日: 松下智慧馬桶蓋 1049 元探底(日常 1899 元)

Docker


1.什麼是 Docker

官方定義

# 1.官方介紹
- We have a complete container solution for you - no matter who you are and where you are on your containerization journey.
- 翻譯: 我們為你提供了一個完整的容器解決方案,不管你是誰,不管你在哪,你都可以開始容器的的旅程。
- 官方定義: docker是一個容器技術。

Docker的起源

Docker 使用 Google 公司推出的 Go 語言 進行開發實現,基於 Linux 核心的 cgroup,namespace,以及 OverlayFS 類的 Union FS 等技術,對程序進行封裝隔離,屬於作業系統層面的虛擬化技術。由於隔離的程序獨立於宿主和其它的隔離的程序,因此也稱其為容器。

2.為什麼是Docker

  • 在開發的時候,在本機測試環境可以跑,生產環境跑不起來

    這裡我們拿java Web應用程式舉例,我們一個java Web應用程式涉及很多東西,比如jdk、tomcat、mysql等軟體環境。當這些其中某一項版本不一致的時候,可能就會導致應用程式跑不起來這種情況。Docker則將程式以及使用軟體環境直接打包在一起,無論在那個機器上保證了環境一致。

    優勢1: 一致的執行環境,更輕鬆的遷移

    • 有點maven的味道,只不過管理的不是jar而是環境
  • 伺服器自己的程式掛了,結果發現是別人程式出了問題把記憶體吃完了,自己程式因為記憶體不夠就掛了

    這種也是一種比較常見的情況,如果你的程式重要性不是特別高的話,公司基本上不可能讓你的程式獨享一臺伺服器的,這時候你的伺服器就會跟公司其他人的程式共享一臺伺服器,所以不可避免地就會受到其他程式的干擾,導致自己的程式出現問題。Docker就很好解決了環境隔離的問題,別人程式不會影響到自己的程式。

    優勢2:對程序進行封裝隔離,容器與容器之間互不影響,更高效的利用系統資源

    • 容器與映象的關係類似於面向物件程式設計中的物件與類
  • 公司要弄一個活動,可能會有大量的流量進來,公司需要再多部署幾十臺伺服器

    在沒有Docker的情況下,要在幾天內部署幾十臺伺服器,這對運維來說是一件非常折磨人的事,而且每臺伺服器的環境還不一定一樣,就會出現各種問題,最後部署地頭皮發麻。用Docker的話,我只需要將程式打包到映象,你要多少臺服務,我就給力跑多少容器,極大地提高了部署效率。

    優勢3: 通過映象複製N多個環境一致容器

    • docker 的字面意思是 碼頭工人 感覺滿有韻味的

3.Docker和虛擬機器區別

比較上面兩張圖,我們發現虛擬機器是攜帶作業系統,本身很小的應用程式卻因為攜帶了作業系統而變得非常大,很笨重。Docker是不攜帶作業系統的,所以Docker的應用就非常的輕巧。另外在呼叫宿主機的CPU、磁碟等等這些資源的時候,拿記憶體舉例,虛擬機器是利用

  • Hypervisor去虛擬化記憶體,整個呼叫過程是虛擬記憶體->虛擬實體記憶體->真正實體記憶體

  • Docker是利用Docker Engine去呼叫宿主的的資源,這時候過程是虛擬記憶體->真正實體記憶體。

傳統虛擬機器 Docker容器
磁碟佔用 幾個GB到幾十個GB左右 幾十MB到幾百MB左右
CPU記憶體佔用 虛擬作業系統非常佔用CPU和記憶體 Docker引擎佔用極低
啟動速度 (從開機到執行專案)幾分鐘 (從開啟容器到執行專案)幾秒
安裝管理 需要專門的運維技術 安裝、管理方便
應用部署 每次部署都費時費力 從第二次部署開始輕鬆簡捷
耦合性 多個應用服務安裝到一起,容易互相影響 每個應用服務一個容器,達成隔離
系統依賴 需求相同或相似的核心,目前推薦是Linux

4.Docker的安裝

bash安裝(通用所有平臺)

  • 在測試或開發環境中 Docker 官方為了簡化安裝流程,提供了一套便捷的安裝指令碼,CentOS 系統上可以使用這套指令碼安裝,另外可以通過 --mirror 選項使用國內源進行安裝:執行這個命令後,指令碼就會自動的將一切準備工作做好,並且把 Docker 的穩定(stable)版本安裝在系統中。

    $ curl -fsSL get.docker.com -o get-docker.sh
    $ sudo sh get-docker.sh --mirror Aliyun
    
  • 啟動docker

    $ sudo systemctl enable docker
    $ sudo systemctl start docker
    
  • 建立docker使用者組

    $ sudo groupadd docker
    
  • 將當前使用者加入docker組

    $ sudo usermod -aG docker $USER
    
  • 測試docker安裝是否正確

    $ docker run hello-world
    

5. Docker 配置阿里映象加速服務

  • 訪問阿里雲登入自己賬號檢視docker映象加速服務
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://lz2nib3q.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
  • 驗證docker的映象加速是否生效
[root@localhost ~]# docker info
		..........
    127.0.0.0/8
   Registry Mirrors:
    'https://lz2nib3q.mirror.aliyuncs.com/'
   Live Restore Enabled: false
   Product License: Community Engine

6.Docker的入門應用

docker run hello-world

[root@localhost ~]# docker run hello-world

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://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/