基礎知識與準備:linux
1、基礎知識:docker
1.Docker runtimeubuntu
runtime是容器真正運行的地方。藉助JAVA中JVM的概念來理解。vim
lxc、runc、rkt是目前主流的三種容器runtime。瀏覽器
2.容器管理工具安全
lxd是lxc對應的管理工具。服務器
runc的管理工具是Docker engine,包括後臺deamon和cli兩部分,咱們一般提到的Docker通常就是指docker engine。網絡
rkt的管理工具是rkt cli。curl
3.容器定義工具
docker image是Docker容器的模板,runtime根據docker image來建立容器。
dockerfile是包含若干個命令的文本文件,能夠經過該文件建立出docker image。
定義過程:dockerfile--->docker image--->container
4.容器倉庫(Registry)
Registry分爲共有和私有兩種:
Docker Registry :私有倉庫
Docker Hub:共有倉庫(私有收費)
Quay.io :另外一個共有倉庫
5.容器OS
除了在傳統的Linux、MACOS、Windows上運行容器,目前也存在一些容器OS,例如CoreOS、Atomic、Ubuntu Core等。
好比傳統操做系統,容器操做系統體積更小,啓動更快。
6.容器平臺
1.容器編排引擎:docker swarm、kubernetes、mesos+marathon等。
2.容器管理平臺:Rancher、ContainerShip等。
3.基於容器的PaaS:Deis、Flynn、Dokku等。
7.容器網絡
docker network
flannel
weave
calico
8.服務發現
etcd
consul
zookeeper
9.監控
docker ps/top/stats
docker stats API
sysdig
cAdvisor/Heapster
Weave Scope
10.數據管理、日誌管理和安全性
數據管理:REX-Ray
日誌管理:docker logs、logspout
安全性:OpenSCAP
2、實驗環境準備
1.環境選擇
管理工具:Docker engine
runtime:runc,Docker默認runtime
操做系統:Ubuntu16.04
2.安裝Docker(Docker CE版,即Community Edition社區版,Docker EE爲Enterprise Edition收費版)
3.運行第一個容器
sudo docker run -d -p 80:80 httpd
上述命令中-d表明在後臺運行容器,-p表示端口映射(容器端口80映射到host的端口80),httpd爲docker image名。
使用host的瀏覽器輸入http://localhost:80,顯示It works,表示容器運行成功。
4.鏡像下載加速
若是docker在下載鏡像時很慢(服務器在國外)能夠按如下步驟使用代理:
容器使用:
1、構建鏡像
構建鏡像有兩種方式:docker commit和利用dockerfile來建立。
docker commit:
1.運行容器。
2.修改容器。
3.將容器保存爲新的鏡像。
過程:
不建議使用docker commit來建立鏡像,由於這是一種手工建立鏡像的方式,容易出錯,效率低且可重複性弱。更重要的是其餘用戶不知道該鏡像是怎麼建立出來的,是否存在惡意程序,即沒法對鏡像進行審計,存在安全隱患。(dockerfile建立的容器可查看建立過程)
dockerfile:
dockerfile是一個文本文件,記錄了構建鏡像的全部步驟。
例如:
FROM ubuntu #表示使用ubuntu鏡像做爲基礎鏡像
RUN apt-get update && apt-get install -y vim #在ubuntu鏡像中更新源(ubuntu鏡像中的源是默認的ubuntu官方源),並安裝vim
sudo docker image ls :查看本地鏡像:
sudo docker history [image name] :查看某個鏡像的建立過程:
dockerfile中經常使用命令:
2、分發鏡像
三種方式:
1.使用一樣的dockerfile在其餘host中構建鏡像。
2.上傳鏡像到公共Registry上,例如Docker Hub。
3.上傳鏡像到私有Registry上,供本地Host使用。
給鏡像命名:
一個特定鏡像的名字由兩部分組成:repository和tag。
[image name] = [repository] : [tag]
若是執行docker build時沒有指定tag,則會使用默認tag latest。至關於docker build -t ubuntu-with-vim:latest
Tag一般用來指定鏡像的版本信息,可是當心latest只是一個默認tag,不必定是指最新的版本。可是在Docker Hub中,約定將latest做爲最新穩定版本的別名,但不是強制規定。因此咱們在使用鏡像時最好避免使用latest,明確指定某個tag,例如httpd:2.3,ubuntu:xenial等。
使用公共Registry:
將鏡像上傳到Docker Hub中:
1.首先在Docker Hub註冊一個帳號。
2.在Docker Hub上登陸,docker login -u leokale
3.修改鏡像的repository,使之與Docker Hub帳號匹配。 docker tag leokale/httpd:v1
4.將鏡像上傳到Docker Hub上,docker push leokale/httpd:v1
搭建本地Registry:
1.啓動一個registry容器。docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2