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

前言

Docker是一種新興的虛擬化技術,可以必定程度上的代替傳統虛擬機。不過,Docker 跟傳統的虛擬化方式相比具備衆多的優點。開發者能夠打包他們的應用以及依賴包到一個可移植的Docker容器中,而後在Linux 機器上進行部署。php

直白一點,咱們能夠不嚴謹地理解爲:一臺linux服務器安裝了Docker,就比如咱們的電腦上安裝了Vmware虛擬機管理軟件。服務器裏面建立的Docker容器比如電腦裏面建立的虛擬機。前端

1、 爲何使用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

這個例子的具體實現筆者在下面會進行詳細介紹。程序員

2、Docker優勢

  • 硬件成本低,虛擬化硬件損耗低,性能好;
  • 快速部署,秒級啓動,彈性伸縮;
  • 支持鏡像打包管理,「易分享」,保證環境一致性;
  • 動態調度遷移成本低。

3、安裝

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

4、基本使用

1.容器管理

(1) 運行容器
  • 例子:

運行一個後臺運行、可交互、鏡像爲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=[]: 開放一個端口或一組端口;
複製代碼
(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…

5、應用實踐

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

相關文章
相關標籤/搜索