Docker 詳細文檔

Docker 文檔

目錄       

⒈ 簡介... 2

1.1什麼是容器?... 2

1.2 什麼是Docker?... 3

1.3 Doceker的目標... 3

1.4 Docker 的使用場景... 3

⒉ Docker 的基本組成... 3

2.1 Docker 客戶端/守護進程... 3

2.2 Docker 鏡像... 4

2.3 Doceker Container容器... 4

2.4 Docker Registry 倉庫... 4

⒊ Docker容器相關技術簡介... 5

3.1 Namespaces 命名空間... 5

3.2 Control groups 控制組... 5

3.3 Docker容器的能力... 5

⒉安裝和部署... 6

2.1 在red-hat安裝Docker. 6

2.2 在windows安裝Docker. 7

4.Docker容器... 8

4.1容器的基本操作... 8

3.2守護式容器... 9

3.3部署靜態網站... 9

5.Docker鏡像與倉庫... 11

5.1 查看和刪除鏡像... 11

5.2 獲取和推送鏡像... 11

5.3 構建鏡像... 12

6.Docker客戶端和守護進程... 14

6.1 docker的c/s 模式(客戶端支持遠程訪問sercer). 14

6.2守護進程的配置和操作... 14

6.3 docker的遠程訪問... 16

7.      dockerfile. 17

7.1 dockerfile指令... 17

7.2  dockerfile構建鏡像過程... 18

8.      網絡連接... 18

8.1docker容器的網絡基礎... 18

8.2 容器的互聯... 19

8.3  docker容器與外部網絡的鏈接... 21

9.docker容器的數據管理... 21

9.1容器的數據卷... 22

9.2 卷容器... 23

9.3 數據卷的備份和還原... 23

10.跨主機鏈接... 23

10.1 網橋實現跨主機鏈接... 24

10.2 使用open switch實現跨主機鏈接... 24

10.3 使用weave實現跨主機鏈接... 26

 

 

簡介

1.1什麼是容器?

一種虛擬化的方案

操作系統級別的虛擬化

只能運行相同或相似內核的操作系統

依賴於Linux內核特性:Namespace 和Cgrops(control group)

1.2 什麼是Docker?

將應用程序自動部署到容器

Go語言開源引擎

2013年初發布

基於Apache 2.0 開源授權協議發行

1.3 Doceker的目標

提供簡單輕量的建模方式

職責的邏輯分離

快速高效的開發生命週期

鼓勵使用面向服務的架構

1.4 Docker 的使用場景

使用Docker容器開發、測試、部署服務

創建隔離的運行環境

搭建測試環境

構建多用戶的平臺即服務(paas)基礎設施

提供軟件即服務(saas)應用程序

高性能、超大規模的宿主機部署

Docker 的基本組成

2.1 Docker 客戶端/守護進程

C/S 架構

本地/遠程

 

2.2 Docker 鏡像

容器的基石 

層疊的只讀文件系統

聯合加載

 

2.3 Doceker Container容器

通過鏡像啓動

啓動和執行階段

寫時複製(copy on write)

 

2.4 Docker Registry 倉庫

公有

私有

Docker Hub

 

 

Docker容器相關技術簡介

3.1 Namespaces 命名空間
 

編程語言

封裝———代碼隔離

操作系統

  系統資源的隔離

  進程、網絡、文件系統、資源…….

3.2 Control groups 控制組

用來資源分配

來源於google

提供的功能

       資源限制

       優先級設定

       資源計量

       資源控制

3.3 Docker容器的能力

文件系統隔離:每個容器都有自己的root文件系統

進程隔離:每個容器都運行在自己的進程環境中

網絡隔離:容器間的虛擬網絡接口和IP地址都是分開的

資源隔離和分組:使用cgroups將cpu和內存之類的資源獨立分配給每個docker容器

 

 

安裝和部署

http://www.docker.org.cn/     參考文檔 Docker中文社區

https://docs.docker.com/      下載

2.1 在red-hat安裝Docker

Docker目前可以在紅帽企業版7(Red Hat Enterprise Linux 7)版本下面安裝

依賴性檢查

Docker需要一個64位系統的紅帽系統,內核的版本必須大於3.10。可以用下面的命令來檢查是否滿足docker的要求。

$ uname -r 3.10.0-229.el7.x86_64 

如果上述的依賴滿足的話,還是推薦您全面地更新紅帽系統,以保證內核相應的bug都得到修復。

 

目前紅帽RHEL系統下面安裝docker可以有兩種方式:一種是使用curl獲得docker的安裝腳本進行安裝,還有一種是使用yum包管理器來安裝docker。

一、使用安裝腳本安裝。

備註:你可以按照同樣的步驟在CentOS系統下面安裝docker。

  1. 使用一個有sudo權限的帳號登錄紅帽系統。
  2. 更新現有的yum包。
$ sudo yum update 
  1. 執行docker安裝腳本。
$ curl -sSL https://get.docker.com/ | sh 
  1. 啓動docker服務。
$ sudo service docker start
  1. 確認docker安裝成功。
  2. $ sudo docker run hello-world

二、使用yum包安裝

  1. 使用有sudo權限的帳號登錄系統。
  2. 更新yum包。
$ sudo yum update 
  1. 添加docker源。
  2. $ cat >/etc/yum.repos.d/docker.repo <<-EOF
  3. [dockerrepo]
  4. name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7 enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF
  1. 使用yum命令安裝docker。
$ sudo yum install docker-engine 
  1. 啓動docker服務。
$ sudo service docker start
  1. 確認docker是否安裝成功。
$ sudo docker run hello-world

 

 

 

 2.2 在windows安裝Docker

方法一、下載Docker for windows (需要運行Microsoft Hyper-V);Docker Community Edition(社區版)和Docker Enterprise Edition(企業版)Docker CE僅支持win10,而Docker EE僅支持WIN SERVER 2016.

方法二、下載Docker Toolbox(需要運行Oracle Virtual Box);Docker 給舊版本的WIN系統提供的是Docker Toolbox下載

Docker ToolBox共包含5個docker工具:

  • Docker Machine:包含了docker-machine命令。
  • 運行Docker命令所需要的引擎。
  • Kitematic,Docker GUI界面。
  • 事先爲docker 命令行環境配置好的shell。
  • Oracle公司的VM VirtualBox包。

因爲Docker守候進程依賴於linux內核,所以無法直接在windows環境中直接運行Docker。解決方案就是使用docker-machine命令創建一個Docker虛擬機並附加到它上面。這個Docker虛擬機來爲你的windows系統提供Docker服務。

這個Docker虛擬機專門爲windows運行環境優化過,輕量級,完全在內存中運行,很小,下載不超過24M,5秒那可以啓動。

安裝完成後桌面會生成三個快捷方式,分別爲

(1) Docker Quickstart Terminal: 提供Docker的命令行操

(2) Oracle VM VirtualBox: 虛擬機軟件

(3) Kitematic (Alpha):圖形化的docker

 

 

4.Docker容器

4.1容器的基本操作

 啓動容器:

$ docker run IMAGE [COMMAND][ARG…]

     RUN 在新容器在中執行命令

啓動交互式容器:

 $ docker run –I –t IMAGE /bin/bash

       -I  --interactive=ture  |   false   默認是false         -------告訴守護進程始終打開標準輸入 交互式

       -t   --tty=ture | false  默認是false                          -------打開命令終端

查看容器:

$ docker ps [-a][-l]

$ docker inspect  (id/name)  查看容器詳細信息

$ docker run --name自定義 –I – t ubutun /bin/bash    ----  自定義容器名稱

$ docker start [-i]  容器名  -----重新啓動

$ docker rm [容器名]   -----刪除一個停止的容器

3.2守護式容器

$ docker run -i –t  IMAGE /bin/bash   退出時用 ctrl + P   ctrl +Q;

$ docker attach  (id/name)     重新進入退出時的容器

啓動守護式容器

$ docker run –d 鏡像名 [COMMAND][ARG…]

$ docker logs [-f][-t][-tail] 容器名

        -f    --follows=ture | false  默認爲false   ---跟蹤日誌變化並返回結果

        -t    --timestamps=true | false   ---加上時間戳

      --tail = “all”    ---返回行數

在運行中的容器內啓動新的進程

$ docker exex [-d][-it[-t]

$docker stop  容器名  

$ docker kill 容器名

3.3部署靜態網站

設置容器的端口映射

run [-P]  [-p]

NGINX 部署流程

docker run --name web1 -p 8080 -i -t centos /bin/bash  創建docker

正常部署並啓動tomcat

Ctrl p   ctrl q  返回宿主機

[root@QiYong-APP-T01 ~]# docker port web1

8080/tcp -> 0.0.0.0:32769

顯示宿主機的32769端口映射docker的8080端口

訪問宿主機的32769端口正常顯示頁面

Docker top web1  顯示docker的進程

Docker exec web1 nginx 啓動容器相關服務

5.Docker鏡像與倉庫

5.1 查看和刪除鏡像

存儲位置:/var/lib/docker

Docker info  ----查看信息

列出鏡像

 

 

 

 

刪除鏡像

 

 

5.2 獲取和推送鏡像

查找鏡像

獲取和推送鏡像——拉取鏡像

                                                                                      

 

使用國內倉庫鏡像服務器

登錄https://www.daocloud.io註冊

在dashboard中申請鏈接xxx

修改啓動配置文件 Vi /etc/default/docker 

添加DOCKER_OPTS=”.XXX”

重啓

上傳鏡像到dockerhup中

Docker push image

5.3 構建鏡像

手動構建鏡像

實例:
1.運行一個docker容器並做修改

docker run -i -t --name test centos /bin/bash   ---運行了一個test的容器

安裝一個nginx  然後退出

 [root@QiYong-APP-T01 ~]# docker ps –l      列出docker信息

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

72a9de314e75        centos              "/bin/bash"         2 minutes ago       Up 2 minutes                            test

2.將容器轉化爲鏡像作者齊勇鏡像名image_test

docker commit -a  qiyong  test image_test

[root@QiYong-APP-T01 ~]# docker images     列出鏡像

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

image_test          latest              9cf7917b729d        15 seconds ago      298MB 

使用Dockerfile構建鏡像

  1. 創建doclerfile文件
  2. 使用docker build 命令

創建一個目錄創建dokerfile文件並將以上內容放入,使用build構建鏡像

6.Docker客戶端和守護進程

6.1 docker的c/s 模式(客戶端支持遠程訪問sercer)

Remote API

鏈接方式

6.2守護進程的配置和操作

啓動關閉重啓守護進程

systemctl [commod] docker   start stop  restart

docker –d  --以守護方式運行

   

以上選項在配置文件中配置

6.3 docker的遠程訪問

修改服務端啓動配置文件

修改客戶端

  1. dockerfile

7.1 dockerfile指令

指令格式(兩部分:註釋 指令)

四種指令

    FROM

 

 

   MAINTAINER<NAME>--指定鏡像的作者信息,包含鏡像的所有者和聯繫信息

   RUN    ----指定鏡像中運行的命令

   RUN<COMMAND>  (shell模式)    RUN [“excutable”,”param1”,”param2”] (exec模式)

   EXPOSE  ----指定運行改鏡像的容器使用的端口

其他指令

   CMD  <COMMAND> --- RUN類似 區別是容器運行過程中執行命令

   ENTRYPOINT <COMMAND> --CMD相像,區別是不會被run命令替換

ADD<src>   ---將文件和目錄複製到鏡像中  包含了tar的解壓功能

COPY <src> ---將文件和目錄複製到鏡像中

VOLUME [“/DATA”]

WORKDIR /PATH/TO/WORKDIR   ----指定工作目錄 默認使用絕對路徑

ENV <key><value>   --設置環境變量

USER daemon  ----指定

ONBUILD   [intruc] 創建觸發器

7.2  dockerfile構建鏡像過程

1.從基礎鏡像運行一個容器

2.執行一條指令,對容器進行修改

3.執行類似docker commit的操作,提交一個新的鏡像層

4.再基於剛提交的鏡像運行一個新容器

5.執行dockerfile的下一條指令,直至所有指令執行完畢

Docker history <images>  查看鏡像構建過程

Dockerfile鏡像緩存,再次構建更高效

  1. 網絡連接

8.1docker容器的網絡基礎

 

 

 

 

 

 

Brctl show   --顯示網橋信息

8.2 容器的互聯

                                                                                       

 

 

 

1)允許容器互聯

默認(-icc=ture)情況下同一宿主機之間的容器沒有網絡限制,都是通過虛擬網橋進行鏈接的

容器在重啓後ip地址會發生改變,這樣我們就無法鏈接到指定的服務器了,這是我們不希望的,所以docker給我們提供了下面的選項:爲容器間創建鏈接和別名,設置link選項後容器在重啓時,系統會自動修改ip地址和別名的映射 具體可以 /etc/hosts  實驗

2)拒絕容器的互聯

-icc=false

Vi /etc/default/docker

添加:DOCKER_OPTS=” –icc=false”

3)允許特定的容器間鏈接

1.Vi /etc/default/docker

添加:DOCKER_OPTS=” --icc=false  --iptables=true”

Webtest爲別名

2.iptables –F  清空配置

3.重啓docker   docker  restart

4.重啓容器

5.進入容器查看 iptables –L

Docker鏈變成了第一位,而且設置link的兩個容器之間是通的規則

 

8.3  docker容器與外部網絡的鏈接

Ip_forward   linux中的變量:決定了系統是否會轉發流量  默認值 ture

查看命令 :systectl  net4.conf.all.forwarding

Iptables(包過濾)

主要

Iptables  -I DOCKER  -s 10.3.3.3 –d 10.3.3.2 –p TCP  --dport 80 –j DROP    (阻止10.3.3.3  訪問10.3.3.2)

 

9.docker容器的數據管理

 

9.1容器的數據卷

 

不能指定本地映射的路徑

9.2 卷容器

--volumes-from  指定數據卷容器

Docker  run –it  --name dvt5  --volumes-from  dvt4  ubutun /bin/bash

 

9.3 數據卷的備份和還原

 10.跨主機鏈接

 

10.1 網橋實現跨主機鏈接

 

10.2 使用open switch實現跨主機鏈接

10.3 使用weave實現跨主機鏈接

Chmod +x /usr/bin/weave

Weace launch  啓動

啓動命令時 會在主機上創建一個weave的docker容器

Weave launch 192.168.59.103  分配一個ip(第二臺也傳入這個ip

用weave命令創建一個容器

C2=$(Weave  run  192.168.1.2/24  -it  centos /bin/bash)

Echo $c2   返回docker的id

Docker  attrch  $c2   進入容器

 

第二臺一致的動作

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章