一、準備一臺linux系統,本次為centos-6.8(64位),并且配置好網絡,將虛擬機配置為NAT方式共享windows網絡;
二、簡單了解一下Docker:
Docker出現的原因?
因開發與運維之間會因為環境和配置導致程序無法運行。(從OS,到運行環境,再到應用配置....)
docker使得軟件可以帶環境安裝,安裝時,把原始環境完全復制(由下而上打包)。開發人員利用Docker可以消除協作編碼時“在自己機器可正常工作”問題。(一次封裝,到處運行) 實現跨平臺,跨服務器,簡化了操作。
三、 Docker是什么?
Docker解決了運行環境和配置問題的軟件容器,方便做持續集成并有助于整體發布的容器虛擬化技術。
一次構建、隨處運行,可以:更快速的應用交付和部署;更便捷的升級和擴縮容;更簡單的系統運維;更高效的計算資源利用。
Docker的優勢:
1,輕量,秒級的快速啟動速度;2,簡單、易用,活躍的社區;3,標準統一的打包/部署/運行方案;4,鏡像支持增量分發,易于部署;
5,易于構建,良好的REST API, 也很適合自動化測試和持續集成; 6,性能,尤其是內存和IO的開銷。
四: 虛擬機缺點:資源占用多,冗余步驟多,啟動慢。
Docker提供另一種虛擬化技術:Linux容器(LXC),不需要捆綁一整套系統,只需要軟件工作所需的庫資源和設置。
----------------------------------
Linux 容器不是模擬一個完整的操作系統,而是對進程進行隔離。有了容器,就可以將軟件運行所需的所有資源打包到一個隔離的容器中。
容器與虛擬機不同,不需要捆綁一整套操作系統,只需要軟件工作所需的庫資源和設置。系統因此而變得高效輕量并保證部署在任何環境中的軟件都能始終如一地運行。
----------------------------------
比較,Docker和傳統虛擬化方式的不同之處:
.傳統虛擬機技術是虛擬出一套硬件后,在其上運行一個完整操作系統,在該系統上再運行所需應用進程;
.而容器內的應用進程直接運行于宿主的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬。因此容器要比傳統虛擬機更為輕便。
五、Docker 安裝:
Docker支持以下的CentOS版本:
CentOS 7 (64-bit)
CentOS 6.5 (64-bit)或更高的版本
前提條件:
目前,CentOS僅發行版本中的內核支持Docker。
Docker運行在CentOS 7上,要求系統為64位、系統內核版本為3 10以上
Docker運行在CentOS-6.5或更高的版本的CentOS上,要求系統為64位、系境內核版本為2.6.32-431或更高版本
查看系統的內核:
uname命令川于打印當前系統相關信息(內核版本號、硬件架構、主機名稱和操作系統類型等)。
[root@promote ~]# uname -r
2.6.32-642.el6.x86_64
[root@promote ~]# cat /etc/redhat-release
-----------------------------------
六、 docker_centos6 的安裝: (本次在node04上(192.168.89.10)---這是本人自己機器的配置,學者可對照改為自己的)
1,yum install -y epel-release (依賴庫)
2, yum install -y docker-io
------------------------------------------------
出現問題:Another App is currently holding the yum lock; waiting for it to exit.
處理:可能是系統自動升級正在運行,yum在鎖定狀態中。
已經有一個yum進程在運行了,使用kill干掉它:
# kill -s 9 25960
# ps aux|grep yum
root 6744 0.0 0.0 103260 900 pts/1 S+ 14:59 0:00 grep yum
root 25960 0.0 0.0 0 0 ? Z Sep19 0:01 [yumBackend.py] <defunct>
很遺憾,kill對付不了它,那怎么辦呢?
可以通過強制關掉yum進程:
#rm -f /var/run/yum.pid
然后就可以使用yum了。
----------------------------------------------------
-------如果出現以下錯誤-----
No package docker-io available.
Error: Nothing to do:
原因:直接使用命令: yum install docker-io 是會報錯的!!! 提示:No package docker-io available.
解決辦法:需要先安裝yum 源 正確版:
yum install https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm
----OK ******************(安裝成功)
3,安裝后的配置文件:/etc/sysconfig/docker (在命令行下用ls /etc/sysconfig/docker 查看)
4, 啟動Docker后如服務:service docker start.
5, docker version驗證:出現如下信息表示成功安裝:
[root@promote ~]# docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 786b29d
OS/Arch (server): linux/amd64
[root@promote ~]#
------------------------------------------------------以上安裝完成,以下為操作:------------------------------------
七:操作Helloworld.
理論上應該從https://hub.docker.com上拉鏡像,但速度太慢,所以用國內的鏡像加速版。
阿里云鏡像加速器步驟:
1, 是什么 https://dev.aliyun.com/search.html(轉到:https://promotion.aliyun.com/ntms/act/kubernetes.html)
a,注冊一個屬于自己的阿里云賬戶(可復用淘寶賬號)
b, 獲得加速器地址連接 (登陸阿里云開發者平臺后獲取加速器地址)
在容器鏡像服務-->快速入門-->官方鏡像加速---> 點擊“容器鏡像服務控制臺”-->前往開通。
(容器鏡像服務控制臺后左側的加速器幫助頁面就會顯示為您獨立分配的加速地址):
到了“容器鏡像服務”后,右邊會有一個“設置Registry登錄密碼”,(設置為:admin****(需要自定義))
找到鏡像中心---> 鏡像加速器-->CentOS, 看到我的加速器地址為:https://z2jkh8aj.mirror.aliyuncs.com
c,配置本機Docker運行鏡像加速器
cat /etc/sysconfig/docker
vi /etc/sysconfig/docker 在other_args="" 上修改,內容如下:
------------------------
# /etc/sysconfig/docker
#
# Other arguments to pass to the docker daemon process
# These will be parsed by the sysv initscript and appended
# to the arguments list passed to docker -d
other_args="--registry-mirror=https://z2jkh8aj.mirror.aliyuncs.com"
DOCKER_CERT_PATH=/etc/docker
# Resolves:
DOCKER_NOWARN_KERNEL_VERSION=1
---------------------
wq保存,重啟docker.
d,重新啟動Docker后臺服務:service docker restart
e, Linux系統下配置完加速器需要檢查是否生效,
命令為: ps -ef|grep docker
[root@promote ~]# ps -ef|grep docker
root 27217 1 4 06:44 pts/0 00:00:03 /usr/bin/docker -d --registry-mirror=https://z2jkh8aj.mirror.aliyuncs.com
root 27267 26600 0 06:45 pts/0 00:00:00 grep docker
八、演示HelloWorld:
1, docker run hello-world:
[root@promote ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally ---- 表示本地沒有,要從阿里云上下載一個hello-world的鏡像,并在容器內運行
latest: Pulling from hello-world
65b27d3bd74d: Pull complete
9f5834b25059: Pull complete
Digest: sha256:fb158b7ad66f4d58aa66c4455858230cd2eab4cdf29b13e5c3628a6bfc2e9f05 (ID號)
Status: Downloaded newer image for hello-world:latest
Hello from Docker! ------表示拉取成功。
This message shows that your installation appears to be working correctly.
...............
輸出以上提示后,hello world 就會停止運行,容器自動終止。
如果云上也沒有所需的鏡像,會給出錯誤提示。
九、 Docker常用命令:
1,幫助命令:
docker version, docker info , docker --help(查看各種命令)*****
2, 鏡像命令:
(1) docker images: 列出本地主機上的鏡像
REPOSITORY :表示鏡像的倉庫源 TAG: 鏡像的標簽
IMAGE ID: 鏡像ID CREATED:鏡像的創建時間 VIRTUAL SIZE: 鏡像大小
同一倉庫源可以有多個TAG,代表這個倉庫源的不同個版本,我們使用REPOSITORY:TAG來定義不同的鏡像。
如果你不指定一個鏡像的版本標簽,例如你只使用ubuntu,docker將默認使用ubuntu:latest鏡像
options說明:
-a :列出本地所有的鏡像(含中間映像層(如里面的none等....));
-q: 只顯示鏡像ID; (或-qa)
--digests: 顯示鏡像的摘要信息; --no-trunc: 顯示完整的鏡像信息。
(2) docker search [OPTIONS] 某個鏡像的名字,(http://hub.docker.com)查詢的時候,是從hub.docker.com上查,拉取的時候可以從上面配置的阿里云上下。 例: 命令:docker search Tomcat
OPTIONS說明: --no-trunc: 顯示完整的鏡像描述; -s: 列出收藏數不小于指定值的鏡像;(***** 一般用點贊數多的)
--automated: 只列出automated build 類型的鏡像
docker search -s 30 tomcat : 查詢出點贊數超過30的tomcat. ( docker search -s 30 --no-trunc tomcat )
(3) docker pull: 下載鏡像
例: docker pull tomcat 等價于 docker pull tomcat:lastest (:lastest 可省略) (docker pull tomcat:5.9 ---表示拉取tomcat 5.9版本)
完成后查看:
[root@promote ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
tomcat latest 7658501bf516 5 days ago 506.8 MB
hello-world latest 9f5834b25059 11 months ago 1.84 kB
(4) docker rmi 鏡像ID: 刪除某個鏡像
docker rmi hello-world (=docker rmi hello-world:lastest)
[root@promote ~]# docker rmi hello-world
Error response from daemon: Conflict, cannot delete 9f5834b25059 because the container 2084769ea199 is using it, use -f to force
Error: failed to remove images: [hello-world]
出現以上信息是因為前面運行了hello-world, 所以無法刪除,可以用-f強制刪除。 (docker rmi -f hello-world)
[root@promote ~]# docker rmi -f hello-world
Untagged: hello-world:latest
Deleted: 9f5834b25059239faef06a9ba681db7b7c572fc0d87d2b140b10e90e50902b53
Deleted: 65b27d3bd74d2cf4ea3aa9e250be6c632f0a347e8abd5485345c55fa6eed0258
(可以發現刪除了兩層, 說明鏡像是分層的)