基础知识与准备: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