Docker是一個開源的應用容器引擎,可以輕松的為任何應用建立一個輕量級的、可移植的、自給自足的容器。利用Linux的LXC、AUFS、Go語言、cgroup實作了資源的獨立,可以很輕松的實作檔案、資源、網絡等隔離,其最終的目标是實作類似PaaS平台的應用隔離。
Docker值得關注的特性:
檔案系統隔離:每個程序容器運作在一個完全獨立的根檔案系統裡。
資源隔離:系統資源,像CPU和記憶體等可以配置設定到不同的容器中,使用cgroup。
網絡隔離:每個程序容器運作在自己的網絡空間,虛拟接口和IP位址。
日志記錄:Docker将會收集和記錄每個程序容器的标準流(stdout/stderr/stdin),用于實時檢索或批量檢索。
變更管理:容器檔案系統的變更可以送出到新的映像中,并可重複使用以建立更多的容器。無需使用模闆或手動配置。
互動式shell:Docker可以配置設定一個虛拟終端并關聯到任何容器的标準輸入上,例如運作一個一次***互shell。
Docker通常用于如下場景:
web應用的自動化打包和釋出;
自動化測試和持續內建、釋出;
在服務型環境中部署和調整資料庫或其他的背景應用;
從頭編譯或者擴充現有的OpenShift或Cloud Foundry平台來搭建自己的PaaS環境。
本文介紹如何在RedHat/CentOS環境下安裝Docker。官方文檔要求Linux kernel至少3.8以上,且docker隻能運作在64位的系統中。由于RHEL6和CentOS6的核心版本為2.6,是以必須要先更新核心。
下面以CentOS6.5(64位)為例,介紹下docker安裝步驟和使用方法:
一、更新核心(帶aufs子產品)
1、yum安裝帶aufs子產品的3.10核心(或到這裡下載下傳kernel手動安裝:http://down.51cto.com/data/1903250)
1
2
3
<code>cd</code> <code>/etc/yum</code><code>.repos.d </code>
<code>wget http:</code><code>//www</code><code>.hop5.</code><code>in</code><code>/yum/el6/hop5</code><code>.repo</code>
<code>yum </code><code>install</code> <code>kernel-ml-aufs kernel-ml-aufs-devel</code>
2、修改grub的主配置檔案/etc/grub.conf,設定default=0,表示第一個title下的内容為預設啟動的kernel(一般新安裝的核心在第一個位置)。
3、重新開機系統,這時候你的核心就成功更新了。
<code>[root@localhost ~]</code><code># uname -r</code>
<code>3.10.5-3.el6.x86_64</code>
檢視核心是否支援aufs:
<code>[root@localhost ~]</code><code># grep aufs /proc/filesystems</code>
<code>nodev aufs</code>
二、安裝docker
<code> 1、首先關閉selinux:</code>
<code>setenforce 0</code>
<code>sed</code> <code>-i </code><code>'/^SELINUX=/c\SELINUX=disabled'</code> <code>/etc/selinux/config</code>
<code></code>
2、在Fedora EPEL源中已經提供了docker-io包,下載下傳安裝epel:
<code>rpm -ivh http:</code><code>//mirrors</code><code>.sohu.com</code><code>/fedora-epel/6/x86_64/epel-release-6-8</code><code>.noarch.rpm</code>
<code>sed</code> <code>-i </code><code>'s/^mirrorlist=https/mirrorlist=http/'</code> <code>/etc/yum</code><code>.repos.d</code><code>/epel</code><code>.repo</code>
3、yum安裝docker-io:
<code>yum -y </code><code>install</code> <code>docker-io</code>
4、啟動docker:
<code>service docker start</code>
5、檢視docker版本:
檢視docker日志:
<code>cat</code> <code>/var/log/docker</code>
三、docker指令的使用
1、直接輸入docker指令來檢視所有的Options和Commands。
檢視某一個command的詳細使用方法:docker COMMAND --help
2、搜尋可用的docker鏡像:docker search NAME
3、下載下傳鏡像:docker pull NAME[:TAG]
比如擷取最新的centos鏡像:docker pull centos:latest
注意:這裡要寫用docker search搜尋到的完整的鏡像名。
4、檢視安裝的鏡像:docker p_w_picpaths [NAME]
5、在docker容器中運作指令:docker run IMAGE [COMMAND] [ARG...]
docker run指令有兩個參數,一個是鏡像名,一個是要在鏡像中運作的指令。
注意:IMAGE=REPOSITORY[:TAG],如果IMAGE參數不指定鏡像的TAG,預設TAG為latest。
在剛剛下載下傳的鏡像中輸出"hello word":docker run centos echo 'hello world!'
6、列出容器:docker ps -a
檢視最近生成的容器:docker ps -l
檢視正在運作的容器:docker ps
7、顯示容器的标準輸出:docker logs CONTAINERID
無需拷貝完整的id,一般寫最開始的三至四個字元即可。
8、在容器中安裝新程式,比如安裝ifconfig指令(centos7預設沒有ifconfig):docker run centos yum install net-tools -y
如果yum不指定-y參數的話,yum指令會進入互動模式,需要使用者輸入指令來進行确認,在docker環境中是無法響應這種互動的。但使用docker run的-i -t參數就會響應這種互動,使用者可以輸入指令了,比如:docker run -i -t centos yum install net-tools
9、儲存對容器的修改并生成新的鏡像:docker commit CONTAINERID [REPOSITORY[:TAG]]
REPOSITORY參數可以是新的鏡像名字,也可以是舊的鏡像名;如果和舊的鏡像名和TAG都相同,會覆寫掉舊的鏡像。
10、停止正在運作的容器:docker stop CONTAINERID
預設等待10秒鐘再殺死指定容器。可以使用-t參數來設定等待時間。
11、檢視容器或鏡像的詳細資訊:docker inspect CONTAINERID|IMAGE
參數可以是容器的ID或者是鏡像名(NAME:TAG)。
12、删除容器:docker rm CONTAINERID
檢視所有容器ID:docker ps -a -q
删除所有的容器:docker rm $(docker ps -a -q)
13、删除鏡像:docker rmi IMAGE
14.檢視docker的資訊,包括Containers和Images數目、kernel版本等。
四、建立容器并登入的操作
1、建立一個新容器并登入:docker run -i -t IMAGE /bin/bash
使用p_w_picpath建立container并進入互動模式,login shell是/bin/bash,現在可以自由的對容器進行操作了。最後使用exit退出容器。
注意:如果IMAGE參數不指定TAG,預設TAG為latest。
2、啟動一個退出的容器:docker start CONTAINERID
3、attach到運作中的容器:docker attach CONTAINERID