Docker是一種新興的虛擬化技術,可以必定程度上的代替傳統虛擬機。不過,Docker 跟傳統的虛擬化方式相比具備衆多的優點。開發者能夠打包他們的應用以及依賴包到一個可移植的Docker容器中,而後在Linux 機器上進行部署。php
直白一點,咱們能夠不嚴謹地理解爲:一臺linux服務器安裝了Docker,就比如咱們的電腦上安裝了Vmware虛擬機管理軟件。服務器裏面建立的Docker容器比如電腦裏面建立的虛擬機。前端
Docker有不少用途,簡化配置、代碼管道化管理、開發人員的生產化、應用隔離、服務合併、多租戶、快速部署等等。node
這裏舉一個最貼近廣大開發者的例子來講明下Docker的強大:運行環境快速部署。python
假設有一個程序員小明,某天完成了一個PHP網站的開發,須要把它部署到一臺linux服務器A上。傳統的作法是,用apt-get或者手動編譯安裝好LNMP(linux+nginx+mysql+php)環境,而後對nginx.conf、my.cnf、php.ini各類配置和參數進行調整和優化,終於把環境搞好了。mysql
過了一段時間,這個網站的訪問量變大了,原來一臺服務器已經沒法支撐網站服務了,須要擴展一臺服務器B進行負載均衡。這時小明須要把原來在服務器A上作的事情,在服務器B上再進行一次,把服務器B的環境弄好。這個過程不只費心費力,並且容易出錯,致使兩臺服務器的環境不一致。linux
若是小明使用Docker進行環境部署的話,這個難題就變得容易解決了。小明只須要在A服務器裏面建立一個docker容器,在裏面進行各類環境的安裝和參數配置(PS:這裏只是舉個例子,不建議把不少服務塞到一個容器裏,最好每一個服務對應一個容器,有利解耦),而後把這個docker打包成鏡像。接着在B服務器建立一個容器並加載這個鏡像,就能輕鬆實現環境搭建以及保持環境一致了。nginx
這個例子的具體實現筆者在下面會進行詳細介紹。程序員
ubuntu 16.04安裝最新版本Docker命令(PS:直接用apt-get、yum安裝的版本比較舊):redis
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官網安裝指南。sql
運行一個後臺運行、可交互、鏡像爲ubuntu16.0四、名稱爲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=[]: 開放一個端口或一組端口;
複製代碼
docker exec -it salasolo /bin/bash
複製代碼
docker stop salasolo
複製代碼
docker start salasolo
複製代碼
docker rm salasolo
複製代碼
docker ps [OPTIONS]
複製代碼
-a :顯示全部的容器,包括未運行的。
-f :根據條件過濾顯示的內容。
--format :指定返回值的模板文件。
-l :顯示最近建立的容器。
-n :列出最近建立的n個容器。
--no-trunc :不截斷輸出。
-q :靜默模式,只顯示容器編號。
-s :顯示總的文件大小。
複製代碼
每一個容器初始化時候能夠指定一個鏡像,有php-fpm環境、mysql環境、ubuntu純淨環境、centos環境、nodejs環境、python環境等等,咱們能夠去hub.docker.com官網查找咱們須要的鏡像。
首次使用run命令建立基於遠程鏡像的容器、或者使用pull命令拉取時會下載鏡像緩存到本地,能夠在本地鏡像列表進行查看。
docker pull ubuntu:16.04
複製代碼
docker images
複製代碼
docker rmi ubuntu:16.04
複製代碼
docker commit salasolo salasolo:1.0
複製代碼
因爲網絡緣由,下載Docker官方倉庫的鏡像會比較慢,可使用國內鏡像加速:
www.docker-cn.com/registry-mi…
docker run -d --name container nginx:latest
複製代碼
docker run -d --name container php:php:7.2-fpm
複製代碼
docker run -d --name container tomcat:latest
複製代碼
docker run -d --name container python:latest
複製代碼
docker run -d --name container redis:latest
複製代碼
關注微信公衆號「全棧社區」,可獲取更多站長、開發者必備的前端、後端、運維技術乾貨。
18元美國VPS、建站主機:www.salasolo.com