最火的容器技術|Docker入門與實踐

全棧社群發表於2019-04-10

前言

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

相關文章