Docker 文檔
目錄
6.1 docker的c/s 模式(客戶端支持遠程訪問sercer). 14
10.2 使用open switch實現跨主機鏈接... 24
⒈ 簡介
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中文社區
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。
- 使用一個有sudo權限的帳號登錄紅帽系統。
- 更新現有的yum包。
$ sudo yum update
- 執行docker安裝腳本。
$ curl -sSL https://get.docker.com/ | sh
- 啓動docker服務。
$ sudo service docker start
- 確認docker安裝成功。
- $ sudo docker run hello-world
二、使用yum包安裝
- 使用有sudo權限的帳號登錄系統。
- 更新yum包。
$ sudo yum update
- 添加docker源。
- $ cat >/etc/yum.repos.d/docker.repo <<-EOF
- [dockerrepo]
- name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7 enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF
- 使用yum命令安裝docker。
$ sudo yum install docker-engine
- 啓動docker服務。
$ sudo service docker start
- 確認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 獲取和推送鏡像
查找鏡像
獲取和推送鏡像——拉取鏡像
使用國內倉庫鏡像服務器
在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構建鏡像
- 創建doclerfile文件
- 使用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的遠程訪問
修改服務端啓動配置文件
修改客戶端
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鏡像緩存,再次構建更高效
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 進入容器
第二臺一致的動作