前言
Docker是一種新興的虛擬化技術,能夠一定程度上的代替傳統虛擬機器。不過,Docker 跟傳統的虛擬化方式相比具有眾多的優勢。開發者可以打包他們的應用以及依賴包到一個可移植的Docker容器中,然後在Linux 機器上進行部署。
直白一點,我們可以不嚴謹地理解為:一臺linux伺服器安裝了Docker,就好比我們的電腦上安裝了Vmware虛擬機器管理軟體。伺服器裡面建立的Docker容器好比電腦裡面建立的虛擬機器。
一、 為什麼使用Docker
Docker有很多用途,簡化配置、程式碼管道化管理、開發人員的生產化、應用隔離、服務合併、多租戶、快速部署等等。
這裡舉一個最貼近廣大開發者的例子來說明下Docker的強大:執行環境快速部署。
假設有一個程式設計師小明,某天完成了一個PHP網站的開發,需要把它部署到一臺linux伺服器A上。傳統的做法是,用apt-get或者手動編譯安裝好LNMP(linux+nginx+mysql+php)環境,然後對nginx.conf、my.cnf、php.ini各種配置和引數進行調整和優化,終於把環境搞好了。
過了一段時間,這個網站的訪問量變大了,原來一臺伺服器已經無法支撐網站服務了,需要擴充套件一臺伺服器B進行負載均衡。這時小明需要把原來在伺服器A上做的事情,在伺服器B上再進行一次,把伺服器B的環境弄好。這個過程不僅費心費力,而且容易出錯,導致兩臺伺服器的環境不一致。
如果小明使用Docker進行環境部署的話,這個難題就變得容易解決了。小明只需要在A伺服器裡面建立一個docker容器,在裡面進行各種環境的安裝和引數配置(PS:這裡只是舉個例子,不建議把很多服務塞到一個容器裡,最好每個服務對應一個容器,有利解耦),然後把這個docker打包成映象。接著在B伺服器建立一個容器並載入這個映象,就能輕鬆實現環境搭建以及保持環境一致了。
這個例子的具體實現筆者在下面會進行詳細介紹。
二、Docker優點
- 硬體成本低,虛擬化硬體損耗低,效能好;
- 快速部署,秒級啟動,彈性伸縮;
- 支援映象打包管理,“易分享”,保證環境一致性;
- 動態排程遷移成本低。
三、安裝
ubuntu 16.04安裝最新版本Docker命令(PS:直接用apt-get、yum安裝的版本比較舊):
apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
apt-get update
apt-get install docker-ce
複製程式碼
其他作業系統安裝方法大家可以參考Docker官網安裝指南。
四、基本使用
1.容器管理
(1) 執行容器
- 例子:
執行一個後臺執行、可互動、映象為ubuntu16.04、名稱為salasolo的容器
docker run -dit --name salasolo ubuntu:16.04
複製程式碼
- 命令:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
複製程式碼
- 引數
-a stdin: 指定標準輸入輸出內容型別,可選 STDIN/STDOUT/STDERR 三項;
-d: 後臺執行容器,並返回容器ID;
-i: 以互動模式執行容器,通常與 -t 同時使用;
-p: 埠對映,格式為:主機(宿主)埠:容器埠
-t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
--name="nginx-lb": 為容器指定一個名稱;
--dns 8.8.8.8: 指定容器使用的DNS伺服器,預設和宿主一致;
--dns-search example.com: 指定容器DNS搜尋域名,預設和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 設定環境變數;
--env-file=[]: 從指定檔案讀入環境變數;
--cpuset="0-2" or --cpuset="0,1,2": 繫結容器到指定CPU執行;
-m :設定容器使用記憶體最大值;
--net="bridge": 指定容器的網路連線型別,支援 bridge/host/none/container: 四種型別;
--link=[]: 新增連結到另一個容器;
--expose=[]: 開放一個埠或一組埠;
複製程式碼
(2)訪問容器
docker exec -it salasolo /bin/bash
複製程式碼
(3)停止容器
docker stop salasolo
複製程式碼
(4)啟動容器
docker start salasolo
複製程式碼
(5)移除容器
docker rm salasolo
複製程式碼
(6) 檢視容器列表
- 命令:
docker ps [OPTIONS]
複製程式碼
- 引數:
-a :顯示所有的容器,包括未執行的。
-f :根據條件過濾顯示的內容。
--format :指定返回值的模板檔案。
-l :顯示最近建立的容器。
-n :列出最近建立的n個容器。
--no-trunc :不截斷輸出。
-q :靜默模式,只顯示容器編號。
-s :顯示總的檔案大小。
複製程式碼
2.映象管理
每個容器初始化時候可以指定一個映象,有php-fpm環境、mysql環境、ubuntu純淨環境、centos環境、nodejs環境、python環境等等,我們可以去hub.docker.com官網查詢我們需要的映象。
首次使用run命令建立基於遠端映象的容器、或者使用pull命令拉取時會下載映象快取到本地,可以在本地映象列表進行檢視。
(1)拉取遠端倉庫的映象
docker pull ubuntu:16.04
複製程式碼
(2)檢視本地映象列表
docker images
複製程式碼
(3)移除本地映象
docker rmi ubuntu:16.04
複製程式碼
(4)容器打包為映象
docker commit salasolo salasolo:1.0
複製程式碼
3.國內映象加速
由於網路原因,下載Docker官方倉庫的映象會比較慢,可以使用國內映象加速:
www.docker-cn.com/registry-mi…
五、應用實踐
1.安裝最新版nginx
docker run -d --name container nginx:latest
複製程式碼
2.安裝php 7.2
docker run -d --name container php:php:7.2-fpm
複製程式碼
3.安裝最新版tomcat
docker run -d --name container tomcat:latest
複製程式碼
4.安裝最新版python
docker run -d --name container python:latest
複製程式碼
5.安裝最新版redis
docker run -d --name container redis:latest
複製程式碼
-
關注微信公眾號“全棧社群”,可獲取更多站長、開發者必備的前端、後端、運維技術乾貨。
-
18元美國VPS、建站主機:www.salasolo.com