1、什么是Docker?

主机时代比拼的是单个服务器物理性能(如CPU 和内存)的强弱,而在云时代,最为看重的则是凭借虚拟化技术所构建的集群处理能力。

虚拟化既可以通过硬件模拟来实现,也可以通过操作系统软件来实现。而容器技术则更为优雅,它充分利用了操作系统本身已有的机制和特性,可以实现远超传统虚拟机的轻量级虚拟化。

Docker 是基于Go 语言实现的开源容器项目。

Docker的构想是要实现Build , Ship and Run Any App, Anywhere,即通过对应用的封装( Packaging )、分发( Distribution )、部署( Deployment )、运行( Runtime )生命周期进行管理,达到应用组件级别的“一次封装,到处运行 。

这里的应用组件, 既可以是一个Web 应用、一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群。

可以Docker容器理解为一种轻量级的沙盒(sandbox )。每个容器内运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络互相通信。容器的创建和停止十分快速,几乎跟创建和终止原生应用一致。
另外,容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机。很多时候,甚至直接把容器当作应用本身也没有任何问题。
 

1.1、Docker与传统虚拟机的比较

Docker与传统虚拟机的实现方式如下图所示。

Docker入门教程_docker

Docker与传统虚拟机的比较
特性Docker虚拟机
启动速度秒级分钟级
性能接近原生较弱
内存代价很小较多
硬盘使用一般为MB一般为GB
运行密度单机支持上千个容器一般几十个
隔离性安全隔离完全隔离
迁移性优秀一般

 

 

2、Docker核心概念

镜像:镜像是创建Docker容器的基础

容器:Docker 容器类似于一个轻量级的沙箱, Docker 利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例。它可以启动、开始、停止、删除,而这些容器都是彼此相互隔离、互不可见的

仓库:Docker 仓库类似于代码仓库,是Docker 集中存放镜像文件的场所。

 

仓库与仓库注册服务器?

仓库注册服务器往往有多个仓库,而每个仓库存放一类镜像,如下图所示。

 

Docker仓库可以分为公开仓库和私有仓库两种形式。最大的公开仓库是官方提供的Docker Hub ,国内不少云服务提供商(如腾讯云、阿里云等)也提供了仓库的本地源,可以提供稳定的国内访问。
Docker 也支持用户在本地网络内创建一个只能自己访问的私有仓库。
当用户创建了自己的镜像之后就可以使用push命令将它上传到指定的公有或者私有仓库。这样用户下次在另外一台机器上使用该镜像时,只需要将其从仓库上pull下来就可以了。

 

3、安装Docker引擎

目前Docker支持Docker 引擎、Docker Hub、Docker Cloud等多种服务。

  • Docker引擎:包括支持在桌面系统或云平台安装Docker ,以及为企业提供简单安全弹性的容器集群编排和管理;
  • DockerHub:官方提供的云托管服务,可以提供公有或私有的镜像仓库;
  • DockerCloud:官方提供的容器云服务,可以完成容器的部署与管理,可以完整地支持容器化项目,还有CI 、CD 功能;

Docker 引擎目前分为两个版本:社区版本和企业版本。社区版本包括大部分的核心功能,企业版本则通过付费形式提供认证支持、镜像管理、容器托管、安全扫描等高级服务。

docker官网链接:https://www.docker.com/get-started

 

下面介绍如何在centos上安装docker社区稳定版。

# 安装一些辅助工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加docker稳定版本的yum软件源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker
yum install -y docker-ce
# 启动docker
systemctl start docker

/etc/docker/daemon.json文件用于配置docker服务。

 

4、Docker镜像

Docker 运行容器前需要本地存在对应的镜像, 如果镜像不存在,Docker 会尝试先从默认镜像仓库下载(默认使用Docker Hub 公共注册服务器中的仓库), 用户也可以通过配置,使用自定义的镜像仓库。

4.1、获取镜像

镜像是运行容器的前提,官方的Docker Hub网站已经提供了数十万个镜像供大家开放下载。

下载镜像命令

docker [image] pull name[:tag]

name是镜像名称,tag是镜像版本,如果没有tag,则默认下载的是latest版本。

不同的镜像仓库可能会出现镜像重名的情况,docker pull命令支持在镜像名称前添加仓库地址的前缀,但如果只使用官方的Docker Hub的话就不用。

docker pull hub.c.163.com/public/ubuntu:18.04

如果下载镜像出现报错Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 192.168.23.2:53: no such host,可能是因为访问不了国外官方的Docker Hub镜像仓库,我们可以使用国内的镜像代理服务,在Docker服务配置文件中增加如下内容。

{
  "registry-mirror":"https://registry.docker-en.com"
}

如果本地机器是通过代理访问外网的,则需要为docker配置代理,否则下载不了镜像。

mkdir -p /etc/systemd/system/docker.service.d
vi http-proxy.conf
#文件内容如下
[Service]
Environment="HTTPS_PROXY=http://127.0.0.1:1080/" "NO_PROXY=localhost,127.0.0.1,registry.docker-cn.com,hub-mirror.c.163.com"

#刷新配置
systemctl daemon-reload
#重启docker
systemctl restart docker
#查看配置,验证配置是否生效
systemctl show --property=Environment docker

最后启动一个容器测试。

docker run -it ubuntu:18.04 bash
exit

 

4.2、镜像的其它操作

  • 查看镜像信息命令。
docker images

Docker入门教程_docker_02

  • 删除镜像命令。
docker rmi id
docker rmi tag

当某个镜像有对应容器时,则无法删除镜像。

  • 导出镜像命令。
docker save -o /root/bobocentos.tar bobocentos:7

  • 导入镜像命令。
docker load -i /root/bobocentos.tar

4.3、创建镜像

有三种方法创建镜像:

  • 基于已有镜像的容器创建:docker commit 容器id 新镜像的标签
  • 基千本地模板导入
  • 基于Dockerfile创建

 

5、Docker容器
  • 查看容器信息命令。
docker ps -a

Docker入门教程_Docker教程_03

  • 创建容器与启动容器命令。
docker create -it 镜像id
docker start 容器id

docker create命令只是创建了容器,此时容器的状态是停止的,需要使用docker start命令启动它。

而docker run命令相当于先执行docker create再执行docker start。

docker run -it 镜像id

  • 删除容器。
docker rm 容器id

  • 停止容器。
docker stop 容器id

  • 进入容器。
docker exec -it 容器id bash

  • 导出容器。
docker export -o /root/my_container.tar 容器id

  • 导入容器。
docker import /root/my_container.tar 新镜像的标签

docker import用于将容器的快照文件导入为一个镜像,这个与docker load命令很相似。