一、什麼是docker?
Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的鏡像中,而後發佈到任何流行的 Linux或Windows 機器上,也能夠實現虛擬化。容器是徹底使用沙箱機制,相互之間不會有任何接口。php
二、服務模式html
C/S模式。Docker是一個客戶端-服務端(c/s)的架構程序。docker是以客戶端(client)和守護進程(server)來運行。mysql
三、通訊方式nginx
Unix的socket套接字,如:unix:///var/run/docker/sock(默認鏈接方式)sql
四、完整的Docker組成docker
(1)Docker Client客戶端
(2)Docker Daemon服務端(守護進程)
(3)Docker Image 鏡像
(4)Docker Container 容器shell
五、Docker 倉庫(hub)網絡
倉庫(Repository)是集中存放鏡像的地方。目前 Docker 官方維護了一個公共倉庫 dDocker Hub。大部分需求均可以經過在 Docker Hub 中直接下載鏡像來實現。架構
六、鏡像(image)composer
可理解爲一個面向Docker引擎的只讀模板,包含了文件系統。如:一個鏡像能夠只包含一個完整的操做系統環境,也能夠安裝了其餘的應用程序。經過版本管理和增量的文件系統,Docker提供了一套十分簡單的機制來建立和更新現有的鏡像。
七、鏡像構建
即建立一個鏡像,它包含安裝運行所需的環境、程序代碼等。這個建立過程就是使用 dockerfile 來完成的。默認是從 Docker Hub 公共鏡像源下載。
dockerfile 的做用是從無到有的構建鏡像。它包含安裝運行所需的環境、程序代碼等。這個建立過程就是使用 dockerfile 來完成的。Dockerfile 爲 docker build 命令準備的,用於構建一個自定義的 image 鏡像。
在 docker-compose 裏也能夠用來實時 build。docker-compose.yml 爲 docker-compose 準備的腳本,能夠同時管理多個鏡像,多個鏡像之間能夠使用官方 image 、和自定義的Dockerfile 構建的 image混合編排容器以及各類網絡端口定義、儲存空間定義等。
若是 image 鏡像是從 docker hub registry 拉取下來的,那麼 Dockerfile 就不須要;若是鏡像是須要 build 的,那就須要提供 Dockerfile .
Dockerfile 就是記錄了一個鏡像的製做過程。把腳本把安裝過程所有記錄下來,再次安裝的時候,執行腳本就好了。只要有了 Dockerfile 腳本文件(shell腳本), 只需執行 docker build . 就能製做鏡像,並且 Dockerfile 就是文本文件,修改也很方便。
八、容器啓動
容器最終運行起來是經過拉取構建好的鏡像,經過一系列運行指令(如端口映射、外部數據掛載、環境變量等)來啓動服務的。
(1)針對單個容器,這能夠經過 docker run 來運行。
(2)針對多個容器,這能夠經過 docker-compose up 來運行。
九、多個容器的運行
而若是涉及多個容器的運行(如服務編排)就能夠經過 docker-compose 來實現,它能夠輕鬆的將多個容器做爲 service 來運行(固然也可僅運行其中的某個),而且提供了 scale (服務擴容) 的功能。
docker-compose 是編排容器的。例如,你有一個php鏡像,一個mysql鏡像,一個nginx鏡像。若是沒有docker-compose,那麼每次啓動的時候,你須要敲各個容器的啓動參數,環境變量,容器命名,指定不一樣容器的連接參數等等一系列的操做,至關繁瑣。
而用了docker-composer以後,你就能夠把這些命令一次性寫在docker-composer.yml文件中,之後每次啓動這一整個環境(含3個容器)的時候,你只要敲一個docker-composer up命令就能夠了
docker-compose 是解決項目須要哪些鏡像、每一個鏡像怎麼配置、要掛載哪些 volume、映射哪些端口 等等信息,都包含在 docker-compose.yml 裏。
要啓動服務,只須要 docker-compose up 就行,中止也只須要 docker-compse stop/down
Dockerfile 與 docker-compse.yml 文件的區別
Dockerfile 記錄單個鏡像的構建過程, docker-compse.yml 記錄一個編排容器(多個鏡像)的構建過程。