Linux高級運維 第八章 部署docker容器虛擬化平臺

8.1  Docker概述html

實驗環境: CENTOS7.4-63 64位java

Dcoker概述linux

Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。容器是徹底使用沙盒機制,相互之間不會有任何接口(相似 iPhone 的 app)。幾乎沒有性能開銷,能夠很容易地在機器和數據中心中運行。最重要的是,他們不依賴於任何語言、框架或包裝系統。android

擴展:沙盒git

沙盒也叫沙箱,英文sandbox。在計算機領域指一種虛擬技術,且多用於計算機安全技術。安全軟件能夠先讓它在沙盒中運行,若是含有惡意行爲,則禁止程序的進一步運行,而這不會對系統形成任何危害。github

Docker是dotCloud公司開源的一個基於LXC的高級容器引擎,源代碼託管在Github上, 基於go語言並聽從Apache2.0協議開源。web

Docker讓開發者能夠打包他們的應用以及依賴包到一個可移植的container中,而後發佈到任何流行的Linux機器上。docker

 

互動:shell

如今接觸的軟件是怎麼發佈的? windows下的  2016-0ffice.exe ,不能在xp運行 ;mk.rpm 在redhat系列Linux上運行,可是不能在其餘linux版本上運行。數據庫

例: /mnt/Packages/vsftpd-3.0.2-10.el7.x86_64.rpm   #這個包是rhel7,就不能在rhel6運行。

 

如今軟件包必須和系統相關。 docker鏡像一次編譯,處處運行。

 

android  :  linux -》 JVM-》 java程序 app  

              linux-》 docker-》把app作成鏡像,運行起來

              windows-》 docker-》把app作成鏡像,運行起來

              IOS 蘋果-》 docker-》把app作成鏡像,運行起來

懂:1

 

擴展:

LXC爲Linux Container的簡寫。Linux Container容器是一種內核虛擬化技術,能夠提供輕量級的虛擬化,以便隔離進程和資源,並且不須要提供指令解釋機制以及全虛擬化的其餘複雜性。

LXC主要經過來自kernel的namespace實現每一個用戶實例之間的相互隔離,經過cgroup實現對資源的配額和度量。

 

官方網站:

https://www.docker.com/

 

docker   [ˈdɒkə(r)]  碼頭工人

 

logo:

 

注:docker服務至關於鯨魚,container容器就是集裝箱。

container :集裝箱,容器

docker: 碼頭工人

源代碼下載:

https://github.com/docker/docker

 

擴展:

集裝箱是海上運貨的一個創新。

源代碼下載:

https://github.com/docker/docker

 

8.1.1  docker容器技術和虛擬機對比:

相同點: docker容器技術和虛擬機技術,都是虛擬化技術。

 

 

 

 

總結:docker相對於VM虛擬機,少了虛擬機操做系統這一層,因此docker效率比虛擬機高

你的物理系統啓動使用幾秒? 10秒

在docker上啓動一個實例 1-2秒    吃鯨:1

 

8.1.2  Docker 架構

 

 

 

 

工做流程:服務器A上運行docker Engine 服務,在docker Engine上啓動不少容器container , 從外網Docker Hub上把image操做系統鏡像下載來,放到container容器運行。這樣一個容器的實例就運行起來了。

最後,經過Docker client 對docker 容器虛擬化平臺進行控制。

Image和Container的關係:image能夠理解爲一個系統鏡像,Container是Image在運行時的一個狀態。
若是拿虛擬機做一個比喻的話,Image就是關機狀態下的磁盤文件,Container就是虛擬機運行時的磁盤文件,包括內存數據。

                                     

dockerhubdockerhub是docker官方的鏡像存儲站點,其中提供了不少經常使用的鏡像供用戶下載,如ubuntu, centos等系統鏡像。經過dockerhub用戶也能夠發佈本身的docker鏡像,爲此用戶須要註冊一個帳號,在網站上建立一個docker倉庫。

 

github : 有本身的賬號:1  沒有:2 

做爲一個成功的開源人士或運維人才: 必定要註冊一個github和dockerhub賬號。

爲了?

Docker 核心技術

1.Namespace — 實現Container的進程、網絡、消息、文件系統和主機名的隔離。

2.Cgroup — 實現對資源的配額和度量。

注:Cgroup的配額,能夠指定實例使用的cpu個數,內存大小等。就像以下圖,vmware虛擬機中的硬件配置參數。

 

 

 

8.1.3  docker特性:

文件系統隔離:每一個進程容器運行在一個徹底獨立的根文件系統裏。

資源隔離:系統資源,像CPU和內存等能夠分配到不一樣的容器中,使用cgroup。

網絡隔離:每一個進程容器運行在本身的網絡空間,虛擬接口和IP地址。

日誌記錄:Docker將會收集和記錄每一個進程容器的標準流(stdout/stderr/stdin),用於實時檢索或批量檢索。

變動管理:容器文件系統的變動能夠提交到新的鏡像中,並可重複使用以建立更多的容器。無需使用模板或手動配置。

交互式shell:Docker能夠分配一個虛擬終端並關聯到任何容器的標準輸入上,例如運行一個一次性交互shell。

 

優勢:

1.一些優點和VM同樣,但不是全部都同樣。

比VM小,比VM快,Docker容器的尺寸減少相比整個虛擬機大大簡化了分佈到雲和從雲分發時間和開銷。Docker啓動一個容器實例時間很短,一兩秒就能夠啓動一個實例。

2.對於在筆記本電腦,數據中心的虛擬機,以及任何的雲上,運行相同的沒有變化的應用程序,IT的發佈速度更快。

Docker是一個開放的平臺,構建,發佈和運行分佈式應用程序。

Docker使應用程序可以快速從組件組裝和避免開發和生產環境之間的摩擦。

3.您能夠在部署在公司局域網或雲或虛擬機上使用它。

4.開發人員並不關心具體哪一個Linux操做系統

使用Docker,開發人員能夠根據全部依賴關係構建相應的軟件,針對他們所選擇的操做系統。

而後,在部署時一切是徹底同樣的,由於一切都在DockerImage的容器在其上運行。

開發人員負責而且可以確保全部的相關性獲得知足。

5.Google,微軟,亞馬遜,IBM等都支持Docker。

6.Docker支持Unix/Linux操做系統,也支持Windows或Mac

缺點侷限性:

1.Docker用於應用程序時是最有用的,但並不包含數據。日誌,跟蹤和數據庫等一般應放在Docker容器外。 一個容器的鏡像一般都很小,不適合存大量數據,存儲能夠經過外部掛載的方式使用。好比使用:NFS,ipsan,MFS等, -v 映射磁盤分區

一句話:docker只用於計算,存儲交給別人。

oracle 不適合使用docker來運行,太大了,存儲的數據太多。

8.2  部署docker容器虛擬化平臺

8.2.1  實驗環境準備

實戰1:部署docker容器虛擬化平臺

實驗環境: CENTOS7.4  64位  IP: 192.168.1.63

把docker-rpm.tar.gz上傳到linux系統上,我已經提下載好安裝包:

[root@xuegod63 ~]# tar zxvf docker-rpm.tar.gz

 

docker.io ,docker ,docker-engine 三個docker發行版本。

 

配置本地yum源:

[root@xuegod63 ~]# vim  /etc/yum.repos.d/docker-rpm.repo

[docker-rpm]

name=docker-rpm

baseurl=file:///root/docker-rpm

enable=1

gpgcheck=0

 

[root@xuegod63 yum.repos.d]# mv CentOS-* /opt/   #移出centos自帶的yum源

安裝 docker軟件包

[root@xuegod63 yum.repos.d]# yum -y install docker  

 

方法2: 直接使用centos系統自帶的yum源安裝,比較慢

[root@xuegod63 yum.repos.d]# yum -y install docker  

 

啓動docker平臺:

[root@xuegod63 ~]# systemctl start docker   #啓動 docker 服務

[root@xuegod63 ~]# systemctl enable docker  #設置開機啓動docker服務

 

[root@xuegod63 ~]# docker version    #顯示 Docker 版本信息

Client:

 Version:         1.12.6

 API version:     1.24

 Package version: docker-1.12.6-55.gitc4618fb.el7.centos.x86_64

 Go version:      go1.8.3

 Git commit:      c4618fb/1.12.6

 Built:           Thu Sep 21 22:33:52 2017

 OS/Arch:         linux/amd64

 

Server:

 Version:         1.12.6

 API version:     1.24

 Package version: docker-1.12.6-55.gitc4618fb.el7.centos.x86_64

 Go version:      go1.8.3

 Git commit:      c4618fb/1.12.6

 Built:           Thu Sep 21 22:33:52 2017

 OS/Arch:         linux/amd64

 

查看 docker 信息(確認服務運行)顯示 Docker 系統信息,包括鏡像和容器數。

[root@xuegod63 ~]# docker info

Containers: 0

 Running: 0

 Paused: 0

 Stopped: 0

Images: 0

Server Version: 1.12.6

Storage Driver: devicemapper

 ...

Data loop file: /var/lib/docker/devicemapper/devicemapper/data   #存儲docker平臺中相關數據

 

[root@xuegod63 ~]# ll -h /var/lib/docker/devicemapper/devicemapper/data

-rw------- 1 root root 100G 9月  27 21:35 /var/lib/docker/devicemapper/devicemapper/data

 

8.2.2  下載docker鏡像

 

https://dev.aliyun.com/list.html?namePrefix=centos

 

搜索 images

[root@xuegod63 ~]# docker search centos  #從 Docker Hub 中搜索符合條件的鏡像。

名字                        描述                             受歡迎受歡迎程度  是否官方提供

若是OFFICIAL 爲[ok] ,說明能夠放心使用。

 

 

方法1:從公網docker hub 拉取(下載)image   pull:拉

[root@xuegod63 ~]# docker pull docker.io/centos

Using default tag: latest

Trying to pull repository docker.io/library/centos ...

latest: Pulling from docker.io/library/centosGet https://registry-1.docker.io/v2/library/centos/manifests/sha256:822de5245dc5b659df56dd32795b08ae42db4cc901f3462fc509e91e97132dc0: net/http: TLS handshake timeout

#報錯了,由於網絡的問題。 沒法鏈接到dockerhub 下載鏡像。 若是你的網絡沒有問題,你能夠下載。

解決:換一個docker下載地址

或: 使用阿里雲docker鏡像加速,提高pull的速度:

你只須要登陸容器Hub服務 https://cr.console.aliyun.com的控制檯,使用你的支付寶賬號,第一次登陸時,須要設置一個獨立的密碼,左側的加速器幫助頁面就會顯示爲你獨立分配的加速地址。

 

 

 

網易鏡像:

https://c.163.com/hub#/m/home/   #須要先註冊登陸上,才能打開此站點

[root@xuegod63 ~]# vim  /etc/docker/daemon.json   #改爲如下內容

改: {}

爲:

{

"registry-mirrors": ["https://e9yneuy4.mirror.aliyuncs.com"]

}

[root@xuegod63 ~]# systemctl daemon-reload

[root@xuegod63 ~]# systemctl restart docker

[root@xuegod63 ~]# docker pull docker.io/centos  #再下載,就能夠了。

 

方法2:把以前下載好的image鏡像導入image:

把docker.io-centos.tar  鏡像上傳到linux上

參數:  -i " docker.io-centos.tar  " 指定載入的鏡像歸檔。

[root@xuegod63 ~]# docker load -i  /root/docker.io-centos.tar  

 

方法3:直接下載其餘站點的鏡像

[root@xuegod63 ~]# docker pull hub.c.163.com/library/tomcat:latest

[root@xuegod63 ~]# docker images

REPOSITORY                     TAG           IMAGE ID            CREATED             SIZE

hub.c.163.com/library/tomcat   latest         72d2be374029        4 months ago        292.4 MB

 

查看 images 列表

[root@xuegod63 ~]# docker images  #列出本地全部鏡像。其中 [name] 對鏡像名稱進行關鍵詞查詢。

[root@xuegod63 ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

docker.io/centos    latest              8caf41e7a3ea        31 minutes ago      205.3 MB

 

8.2.3  開啓動網絡轉發功能

開啓動網絡轉發功能,默認會自動開啓.

[root@xuegod63 ~]# vim  /etc/docker/daemon.json   #改爲如下內容

改: {}

爲:

{

"registry-mirrors": ["https://e9yneuy4.mirror.aliyuncs.com"]

}

[root@xuegod63 ~]# systemctl daemon-reload

[root@xuegod63 ~]# systemctl restart docker

[root@xuegod63 ~]# docker pull docker.io/centos  #再下載,就能夠了。

 

方法2:把以前下載好的image鏡像導入image:

把docker.io-centos.tar  鏡像上傳到linux上

參數:  -i " docker.io-centos.tar  " 指定載入的鏡像歸檔。

[root@xuegod63 ~]# docker load -i  /root/docker.io-centos.tar  

 

方法3:直接下載其餘站點的鏡像

[root@xuegod63 ~]# docker pull hub.c.163.com/library/tomcat:latest

[root@xuegod63 ~]# docker images

REPOSITORY                     TAG           IMAGE ID            CREATED             SIZE

hub.c.163.com/library/tomcat   latest         72d2be374029        4 months ago        292.4 MB

 

查看 images 列表

[root@xuegod63 ~]# docker images  #列出本地全部鏡像。其中 [name] 對鏡像名稱進行關鍵詞查詢。

[root@xuegod63 ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

docker.io/centos    latest              8caf41e7a3ea        31 minutes ago      205.3 MB

 

8.2.3  開啓動網絡轉發功能

開啓動網絡轉發功能,默認會自動開啓.

 

 

8.3  docker平臺基本使用方法

例1:運行一個 container並加載鏡像centos,運行起來這個實例後,在實例中執行 /bin/bash命令

docker經常使用參數:

run  運行

-i   以交互模式運行容器,一般與 -t 同時使用;
-t  爲容器從新分配一個僞輸入終端,一般與 -i 同時使用;

[root@xuegod63 ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

docker.io/centos    latest              196e0ce0c9fb        12 days ago         196.6 MB

[root@xuegod63 ~]# docker run  -it docker.io/centos:latest /bin/bash   #啓動一個實例,也就2秒就能夠搞定

[root@068fd8c70344 /]# ls   #查看實例環境

[root@f072b5ae7542 /]# cat /etc/redhat-release

退出容器:

[root@f072b5ae7542 /]#exit

 

例2:在 container 中啓動一個長久運行的進程,不斷向stdin輸出 hello world 。模擬一個後臺運行的服務

docker經常使用參數:

-d  後臺運行容器,並返回容器ID;
-c  後面跟待完成的命令

[root@xuegod63 ~]# docker run  -d docker.io/centos:latest /bin/sh -c "while true;do echo hello world; sleep 1; done"

1b3493487c4fde6eb233d59fa9ab9a204ad993cd3debbd5a9a28be6816694605

#容器的ID

 

從一個容器中取日誌,查看輸出的內容

語法: docker  logs   容器實例的Name/ID 

[root@xuegod63 ~]# docker logs 1b3493487c4    #容器的ID能夠寫全,也能夠不寫全,只要惟一就能夠了

hello world

hello world

hello world

hello world

 

查看正在運行的容器:

[root@xuegod63 ~]# docker ps  #列出全部運行中容器。

 

 

也可使用短ID或docker實例的名字查看日誌輸出:

[root@xuegod63 ~]# docker logs c4a213627f1b

或:

[root@xuegod63 ~]# docker logs compassionate_mclean

 

[root@xuegod63 ~]# docker ps -a  #-a 列出全部容器(包含沉睡/退出狀態的容器);

 

 

[root@xuegod63 ~]# docker images  #列出全部本地鏡像

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

centos              latest              0f0be3675ebb        12 days ago         196.6 MB

 

例3:殺死一個容器。 好比:殺死一個正在後臺運行的容器

查看要殺死容器的ID:

[root@xuegod63 ~]# docker ps -a  #-a 列出全部容器(包含沉睡/退出狀態的容器);

 

 

殺死ID爲c4a213627f1b的容器

[root@xuegod63 ~]# docker kill c4a213627f1b  #殺死一個容器 

c4a213627f1b

 

查看結果:

[root@xuegod63 ~]# docker ps

CONTAINER ID        IMAGE    COMMAND      CREATED    STATUS   PORTS               NAMES

 

例4:啓動、中止、重啓 container容器實例

啓動: run # 建立並運行docker實例

[root@xuegod63 ~]# docker run  -d docker.io/centos:latest /bin/sh -c "while true;do echo hello world; sleep 1; done"

查看容器:

[root@xuegod63 ~]# docker ps

[root@xuegod63 ~]# docker stop 1a63ddea6571  關閉容器

1a63ddea6571

查看:

[root@xuegod63 ~]# docker ps

 

[root@xuegod63 ~]# docker start 1a63ddea6571

1a63ddea6571

[root@xuegod63 ~]# docker ps

 

[root@xuegod63 ~]# docker restart 1a63ddea6571

1a63ddea6571

 

刪除指定 container : rm

[root@xuegod63 ~]# docker rm  e085da6919af

Error response from daemon: You cannot remove a running container e085da6919af2f294d73f8e717f93326f6c1a803938e8057aebfc36e28d05808. Stop the container before attempting removal or use -f

解決:你能夠先把容器1a63ddea6571 關閉,而後再刪除或加-f 強制刪除

[root@xuegod63 ~]# docker rm -f 1a63ddea6571

1a63ddea6571

8.4  docker鏡像製做方法

Docker Image 的製做兩種方法

方法1:docker commit   #保存 container 的當前狀態到 image後,而後生成對應的image

方法2:docker build  #使用 Dockerfile 文件自動化製做 image

 

8.4.1  方法1:docker commit

建立一個安裝好apache工具的容器鏡像

[root@xuegod63 ~]# docker run -it docker.io/centos:latest /bin/bash

[root@1d3563200047 /]# yum -y install  httpd   #在 container 中安裝 apache 軟件包

[root@1d3563200047 /]# exit

 

 

查看 images 列表

[root@xuegod63 ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

docker.io/centos    latest              196e0ce0c9fb        13 days ago         196.6 MB注:當前只有一個image centos

 

根據容器當前狀態作一個image鏡像:建立一個安裝了apache工具的centos鏡像

語法: docker commit <container的ID>或<image_name>

例:

查看容器ID:

[root@xuegod63 ~]# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES

1d3563200047        centos              "/bin/bash"              10 minutes ago      Exited (0) 6 minutes ago                          tender_joliot

 

[root@xuegod63 ~]# docker commit bbd01c4b8567 docker.io/centos:apache

sha256:e5917c01599c70d0680beeb35f6df98889dd22106399efd6907d956d8a943242

[root@xuegod63 ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

docker.io/centos    apache              38fa5452c20d        5 seconds ago       304.3 MB

docker.io/centos    latest              196e0ce0c9fb        13 days ago         196.6 MB

 

使用新建立的docker.io/centos:apache鏡像,生成一臺容器實例:

鏡像,生成一臺容器實例:

[root@xuegod63 ~]# docker run -it centos:apache /bin/bash

[root@8b1afc920454 /]# rpm -qa httpd    #查看,已經安裝好apache命令

httpd-2.4.6-67.el7.centos.2.x86_64

注:說明基於apache鏡像的容器建立成功。

 

8.4.2  方法二:經過:docker build建立一個基於centos的httpd web服務器鏡像。

使用docker build建立鏡像時,須要使用 Dockerfile 文件自動化製做 image 鏡像

注:Dockerfile有點像源碼編譯時./configure後產生的Makefile

 

如下操做要在docker物理機上操做:

1、建立工做目錄

[root@xuegod63 ~]#  mkdir /docker-build

[root@xuegod63 ~]# cd /docker-build

[root@xuegod63 docker-build]# touch Dockerfile

注: make自動化編譯時須要Makefile文件,自動化建立docker鏡像時,須要Dockerfile

 

2、編輯 Dockerfile

Dockerfile用來建立一個自定義的image,包含了用戶指定的軟件依賴等。

[root@xuegod63 docker-build]# vim  Dockerfile   

FROM docker.io/centos:latest

MAINTAINER  <mk@xuegod.cn>

RUN yum -y install httpd

ADD start.sh /usr/local/bin/start.sh

ADD index.html /var/www/html/index.html

註釋:

FROM  docker.io/centos:latest  # FROM 基於哪一個鏡像

MAINTAINER  <mk@xuegod.cn>  # MAINTAINER 鏡像建立者

RUN yum -y install httpd   #RUN 安裝軟件用

ADD start.sh /usr/local/bin/start.sh  

ADD index.html /var/www/html/index.html

CMD /usr/local/bin/start.sh

# ADD  將文件<src>拷貝到新產生的鏡像的文件系統對應的路徑<dest>。全部拷貝到新鏡像中的文件和文件夾權限爲0755,uid和gid爲0

CMD echo hello world    #container啓動時執行的命令或啓動服務,可是一個Dockerfile中只能有一條CMD命令,多條則只執行最後一條CMD.

 

如:dockefile1 中的內容以下:

#test

FROM ubuntu

MAINTAINER xxx

RUN echo hello1 > test1.txt

RUN echo hello2 > /test2.txt

EXPOSE 80

EXPOSE 81

CMD ["/bin/bash"]

 

3、建立 start.sh腳本啓動httpd服務和apache默認首頁index.html文件

[root@xuegod63 docker-build]# echo "/usr/sbin/httpd -DFOREGROUND" > start.sh

注:/usr/sbin/httpd -DFOREGROUND    至關於執行了 systemctl start httpd

[root@xuegod63 docker-build]# chmod a+x start.sh

 

建立 index.html

[root@xuegod63 docker-build]# echo "docker image build test" > index.html

 

4、使用命令build來建立新的image

語法:docker build -t  父鏡像名:鏡像的tag   Dockerfile文件所在路徑

-t :表示tage,鏡像名

 

例:使用命令docker build來建立新的image,並命名爲docker.io/centos:httpd

[root@xuegod63 docker-build]# docker build -t docker.io/centos:httpd ./

注: ./ 表示當前目錄。另外你的當前目錄下要包含Dockerfile

 

Sending build context to Docker daemon 4.096 kB

Step 1 : FROM docker.io/centos:latest

 ---> 0f0be3675ebb

Step 2 : MAINTAINER userabc <mk@xuegod.cn>

 ---> Using cache

 ---> 9d1cc5ad2a7b

Step 3 : RUN yum -y install httpd

Complete!

 ---> bce6b3f0a700

Removing intermediate container c9567092d67b

Step 4 : ADD start.sh /usr/local/bin/start.sh

 ---> 521463f9bbeb

Removing intermediate container 18b34849606d

Step 5 : ADD index.html /var/www/html/index.html

 ---> 585eb8e1d7ad

Removing intermediate container ecdbd06a3c1e

Successfully built 585eb8e1d7ad

 

查看 images 列表

[root@xuegod63 ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

docker.io/centos    httpd               bfaf1b0488d1        31 seconds ago      324.5 MB

注:docker鏡像=應用/程序+庫 

 

8.4.3  Docker Image 的發佈:

方法1:Save Image To TarBall

方法2:Push Image To Docker Hub

 

方法1:Save Image To TarBall

保存 Image 到 tar 包

語法:docker save -o 導出的鏡像名.tar  本地鏡像名:鏡像標籤

例:

[root@xuegod63 ~]# docker save -o docker.io-centos-httpd-docker-image.tar docker.io/centos:httpd

[root@xuegod63 ~]# ll -h

-rw-------  1 root root 319M 12月 27 22:48 docker.io-centos-httpd-docker-image.tar

 

例: 使用導入本地鏡像:

[root@xuegod63 ~]# docker rmi docker.io/centos:httpd   #刪除鏡像,這裏寫本身鏡像的ID或名字

[root@xuegod63 ~]# docker images

[root@xuegod63 docker-build]# docker load -i centos-httpd-docker-image.tar

 

 

方法2:Push Image To Docker Hub  發佈到外網

1、Signup on docker hub & create repo    註冊一個賬號

https://hub.docker.com/

2、Login to docker hub

# docker login -u userabc -p abc123 -e userab@gmail.com

3、Push image to docker hub   #上傳鏡像

# docker push centos:httpd

4、Pull image from docker hub   #下載鏡像

# docker pull userabc/centos:httpd     #  用戶名/鏡像名

 

方法3: 使用阿里雲的私有倉庫來發布,等下節講完私有倉庫的搭建,再講

 

8.5  Container容器端口映射

8.5.1  實戰:Container 端口映射

啓動 container

[root@xuegod63 ~]# docker run -d -p 80:80  docker.io/centos:httpd  87fadc0249a96736f588f16b7d3ad662ef3536a06d7a74115cd7c76546ed3a22

注: -p 物理機的80端口:容器實例的80端口  ,把容器中的80端口映射到物理機上的80端口

 

在物理機上查看容易狀態:

[root@xuegod63 ~]# docker ps

CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                NAMES

c72fdb8da879        docker.io/centos:httpd   "/bin/bash -c /usr/lo"   2 minutes ago       Up 2 minutes        0.0.0.0:80->80/tcp   sleepy_newton

 

查看物理機上開啓的80代理端口

[root@xuegod63 ~]# netstat  -antup | grep 80

tcp6       0      0 :::80                   :::*                    LISTEN   50768/docker-proxy-

 

測試:http://192.168.1.63

 

 

注:如今docker實例運行的網絡模式像VMware的NAT模式。 後期會講給docker配置靜態IP,就像VMware的橋接模式。

 

實戰6:訪問正在運行的 container 容器實例

語法: docker exec -it <container id | name> /bin/bash

查看正在運行的容器ID:

[root@xuegod63 ~]# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES

87fadc0249a9        centos:httpd        "/bin/sh -c /usr/loca"   4 minutes ago       Up 4 minutes        0.0.0.0:9000->80/tcp   elated_perlman

 

[root@xuegod63 ~]# docker exec -it 87fadc0249a9 /bin/bash  #進入容器

 

建立 test.html 文件

[root@87fadc0249a9 /]# echo xuegod > /var/www/html/test.html

[root@87fadc0249a9 /]#

 

測試:在物理機上查看新添加的test.html文件

[root@xuegod63 ~]# curl http://192.168.1.63/test.html

xuegod

 

 

查看物理機和容器的網絡:

查看容器的IP:

[root@a9c3a7bf2054 /]# yum install net-tools -y

[root@a9c3a7bf2054 /]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 172.17.0.2  netmask 255.255.0.0  broadcast 0.0.0.0

 

物理機的IP:

[root@xuegod63 ~]# ifconfig

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 172.17.0.1  netmask 255.255.0.0  broadcast 0.0.0.0

注:至關於虛擬機的NAT網絡模式

 

測試網絡:

[root@xuegod63 ~]# ping  172.17.0.2

PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.

64 bytes from 172.17.0.4: icmp_seq=1 ttl=64 time=0.414 ms

 

 

配置容器root密碼:

[root@a9c3a7bf2054 /]# echo 123456 | passwd --stdin root

在容器中安裝sshd服務,而後把22端口映射出去,就能夠遠程登陸容器了。

相關文章
相關標籤/搜索