Docker
什么是Docker?
Docker 是个开源的应用容器引擎, 基于 Go语言 并遵从Apache2.0协议开源.
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中, 然后发布到任何流行的Linux机器上, 也可以实现虚拟化.
容器是完全使用沙箱机制, 相互之间不会有任何接口(类似iPone的 app), 更重要的是容器性能开销极低.谁适合阅读本教程?
适合运维工程师及后端开发人员.阅读本教程前, 您需要了解的知识
你需要掌握Linux常用命令. 可通过linux教程来学习想着命令.Docker的应用场景
. Web应用的自动化打包和发布
. 自动化测试和持续集成、发布
. 在服务环境中部署和调整数据库或其他的后台应用
. 从头编译或者扩展现有的OpenShift或Cloud Foundry 平台来搭建自己的PaaS环境.Docker的优点
1). 简化程序:
Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中, 然后发布到任何流行的Linux机器上, 便可以实现虚拟化. Docker改变了虚拟化的方式, 使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是Docker的最大优势, 过去需要用数天乃至数周的任务, 在Docker容器的处理下, 只需要数秒就能完成。
2). 避免选择恐惧症
如果你有选择恐惧症, 还是资源患者. Docker帮你打包你纠结!
比如Docket镜像: 其中包含了运行环境和配置, 所以Docker可以简化部署多种应用实例工作. 比如 Web应用, 后台应用,数据库应用, 大数据应用(比如Hadoop集群), 消息队列等待都可以打包成一个镜像部署.
3). 节省开支:
一方面, 云计算时代到来,使开发者不必为了追求效果而配置高额的硬件, Docker改变了高性能必然高价格的思维定势. Docker与云的结合, 让云空间得到充分的利用. 不仅解决了硬件管理的问题,也改变了虚拟化的方式.
Docker 架构
Docker 使用客户端-服务器(C/S)架构模式, 使用远程API来管理和创建Docker容器.
Docker 容器 通过Docker镜像来创建.
容器和镜像的关系类似于面向对象中的对象与类.
Docker | 面向对象 |
---|---|
容器 | 对象 |
镜像 | 类 |
Client( Docker客户端 ) | Hosts( Docker 主机 ) | Registries( Docker仓库 )
docker | local host | Docker hub |
---|---|---|
daemon | repository 1 | |
container 1 image 1 | image 1 | |
container 2 image 3 | image 2 | |
container 3 | repository 2 | |
remote host | private registry | |
daemon | repostory | |
Docker machine | container 3 image 3 | image 5 |
container 5 image 5 | image 5 | |
container 6 image 6 | image 6 |
Docker镜像( Images ) | Docker镜像是用于创建Docker容器的模板
Docker容器( Container ) | 容器是独立运行的一个或一组应用
Docker客户端( Client ) | Docker客户端通过命令行或其他工具使用Docker API与Docker的守护进程通信.
Docker主机(Hosts) | 一个物理或虚拟的机器用于执行Docker守护进程和容器
Docker仓库(Registry) | Docker仓库用来保存镜像, 可以理解为代码控制中的代码仓库. Docker Hub提供了庞大的镜像集合供使用.
Docker Machine| Docker machine是一个简化Docker安装的命令行工具, 通过一个简单的命令行即可在相应的平台上安装Docker, 比如Virtual Box, Diigital Ocean, Microsoft Azure.
Docker的安装: CentOS Docker安装
Docker支持以下的CentOS版本:
. CentOS 7( 64-bit )
. CentOS 6.5 ( 64-bit ) 或更高的版本
前提条件:
目前, CentOS仅发行版本中的内核支持Docker.
Docker运行在 CentOS 7上, 要求系统为64位, 系统内核版本为3.10以上.
Docker运行在CentOS 6.5或更高的版本上, 要求系统为64位, 系统内核版本为 2.6.32-431或更高版本.使用yum 安装( CentOS 7)
Docker要求CentOS系统的内核版本高于3.10, 查看前提条件来验证你的CentOS版本是否支持 Docker
通过 uname -r 命令看系统当前内核版本
uname -r
- 安装Docker
从2017年3月开始 Docker在原来的基础上分为两个分支版本: Docker CE 和 Docker EE.
Docker CE即社区免费版本, Docker EE即企业版, 强调安全, 但需付费使用.
我们介绍Docker CE的安装使用.
移除旧的版本:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docket-selinux \
docker-engine-selinux \
docket-engine
安装一些必要的系统工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源信息:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum缓存:
sudo yum makecache fast
安装Docker-ce:
sudo yum -y install docker-ce
启动 Docker后台服务:
sudo service docker start
测试运行hello-world
docker run hello-world
使用脚本安装Docker
- 使用sudo或root权限登录 CentOS
- 确保yum 包更新到最新
sudo yum update
- 执行Docker安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
执行这个脚本会添加docker.repo源并安装docker
- 启动Docker进程
sudo service docker start
- 验证docker是否安装成功并在容器中执行一个测试的镜像
sudo docker run hello-world
docer ps
到此, Docker安装完成.
镜像加速
鉴于国内网络问题, 后续摘取Docker镜像十分缓慢, 我们可以配置加速器来解决, 比如网易的镜像地址:
http://hub-mirror.c.163.com
新版的Docker使用 /etc/docker/daemon.json( Linux ) 或者 %programdata%\docker\config\daemon.json(Windows) 来配置 Daemon。
可以该配置文件中加入(没有该文件的话, 请先建一个):
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
删除 Docker CE
执行以下命令来删除 Docker CE:
sudo yum remove docker-ce
sudo rm -rf /var/lib/docker
Docker 镜像使用
当运行容器时, 使用的镜像如果在本地不存在, docker就会自动从镜像仓库中下载, 默认是从 Docker Hub公共镜像源下载
我们来学习:
. 管理和使用本地Docker主机镜像
. 创建镜像
1. 列出镜像列表:
列出本地主机上的镜像
docker images
REPOSITORY | TAG | IMAGE ID | CREATED | SIZE
centos | 6.8 | 90b555111e0 | 3 days ago | 233.3 MB
centos | 6.10 | ff1b555111e0 | 2 days ago | 238.3 MB
各个选项说明:
. REPOSITORY: 表示镜像的仓库源
. TAG: 镜像的标签
. IMAGE ID: 镜像ID
. CREATEED: 镜像创建时间
. SIZE: 镜像大小
同一仓库源可以有多个 TAG, 代表这个仓库源的不同个版本, 如CentOS 仓库源时, 有6.8, 6.10等多个不同的版本, 我们使用REPOSITORY:TAG来定义不同的镜像.
所以, 我们如果使用版本为6.8的CentOS系统镜像来运行容器时, 命令如下:
docker run -t -i centos:6.8 /bin/bash
若用6.10的则为:
docker run -t -i centos:6.10 /bin/bash
如果你不指定一个镜像的版本标签,例如你只使用 centos, docker 将默认使用 centos:latest镜像
2. 获取一个新的镜像
当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像. 我们可以使用docker pull 命令来下载它.
docker pull centos:6.10
假定....
jin@jinLab:~$ docker pull centos:6.10
13.10: Pulling from library/centos
6599cadaf950: Pull complete
23eda618d451: Pull complete
f0be3084efe9: Pull complete
52de432f084b: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:15b79a6654811c8d992ebacdfbd5152fcf3d165e374e264076aa435214a947a3
Status: Downloaded newer image for centos:6.10
下载完成后, 我们可以直接使用这个镜像来运行容器.
3. 查找镜像
我们可以从Docker Hub网站来搜索镜像, Docker Hub 网址为: https://hub.docker.com/
我们也可以使用docker search 命令来搜索镜像. 比如我们需要一个httpd的镜像来作为我们的web服务. 我们可以通过docker search命令来搜索httpd 来寻找适合我们的镜像.
docker search httpd
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否docker官方发布
4. 拖取镜像
我们决定使用上图中的 httpd 官方版本的镜像, 使用命令 docker pull 来下载镜像
docker pull httpd
jin@jinLab:~$ docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
8b87079b7a06: Pulling fs layer
a3ed95caeb02: Download complete
0d62ec9c6a76: Download complete
a329d50397b9: Download complete
ea7c1f032b5c: Waiting
be44112b72c7: Waiting
下载完成后, 我们就可以使用这个镜像了
docker run httpd