Docker容器入门及网易最佳实践

文章目录第一节 Docker容器入门1.1.1 基础概念1. Docker是什么2. Docker和传统虚拟机的对比3. 为什么要使用Docker4. Docker架构5. Docker包括三个基本概念:1)Docker镜像2)Docker镜像分层存储3)Docker容器4)Docker仓库Docker Registry公开仓库Docker Registry 私有仓库1.1.2 安装及加速1. D...
摘要由CSDN通过智能技术生成

文章目录

第一节 Docker容器入门

1.1.1 基础概念

1. Docker是什么
  • Docker最初是动态Cloud公司创始人Solomon Hykes在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并于2013年3月以Apache 2.0授权协议开源,主要项目代码在GitHub上进行维护。Docker项目后来还加入了Linux基金会,并成立推动开放容器联盟(OCI)
  • Docker使用Google公司推出的 Go语言 进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其他的隔离的进程,因此也称其为 容器
  • Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护,使得 Docker技术比虚拟机技术更为轻便、快捷
2. Docker和传统虚拟机的对比

在这里插入图片描述

3. 为什么要使用Docker

在这里插入图片描述

4. Docker架构

在这里插入图片描述

5. Docker包括三个基本概念:
  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)
1)Docker镜像
  • 我们都知道,操作系统分为内核和用户空间。对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker镜像(Image),就相当于是一个root文件系统。比如官方镜像centos:7.6就包含了完整的一套centos7.6最小系统的root文件系统。
  • Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
2)Docker镜像分层存储
  • 因为镜像包含操作系统完整的root文件系统,其体积往往是庞大的,因此在Docker设计时将其设计为分层存储的架构。镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。
  • 镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生再自己这一层。在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。
  • 分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需要的内容,构建新的镜像。
3)Docker容器
  • 镜像(Image)和容器(Container)的关系,就像java中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。
  • 容器存储层的生命周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
  • 按照Docker最佳实践的要求,容器不应该向其存储内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用Volume数据卷、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
  • 数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,在使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。
4)Docker仓库
  • 镜像构建文成后,可以很容易的在当前宿主机上运行,但是,如果需要在其他服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。

  • 一个Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

  • 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。

  • 以centos镜像为例,centos是仓库的名字,其内包含有不同的版本标签,如:6.9、7.5。我们可以通过centos:6.9,或者centos:7.5来具体指定所需哪个版本的镜像。如果忽略了标签,比如centos,那将视为centos:latest。

  • 仓库名经常以 两段式路径 形式出现,比如study/nginx,前者旺旺意味着Docker Registry多用户环境下的用户名,后者则往往是对应的软件名。但这并非绝对,取决于锁使用的具体Docker Registry的软件或服务。

Docker Registry公开仓库
  • 常用的Registry是官方的Docker Hub,这也是默认的Registry。除此之外,还有CoreOS的Quay.io,CoreOS相关的镜像存储在这里;Google的Google Container Registry,Kubernetes的镜像使用的就是这个服务。
  • 国内的一些云服务商提供了针对Docker Hub的镜像服务,这些镜像服务被称为加速器。常见的有阿里云加速器DaoCloud加速器等。使用加速器会直接从国内的地址下载Docker Hub的镜像,比直接从Docker Hub下载速度会提高很多。
  • 国内也有一些云服务上提供类似于Docker Hub的公开服务。比如网易云镜像服务DaoCloud镜像市场阿里云镜像库等。
Docker Registry 私有仓库
  • 除了使用公开服务外,用户还可以在本地搭建私有Docker Registry。Docker官方提供了Docker Registry镜像,可以直接使用作为私有Registry服务。
  • 开源的Docker Registry镜像只提供了Docker Registry API的服务端实现,足以支持docker命令,不影响使用。但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。在官方的商业化版本Docker Trusted Registry中,提供了这些高级功能。
  • 除了官方的Docker Registry外,还有第三方软件实现了Docker Registry API,甚至提供了用户界面以及一些高级功能。比如,VMWare Harbor和Sonatype Nexus。

1.1.2 安装及加速

1. Docker版本命名
  • Docker在1.13版本之后,从2017年的3月1日开始,版本命名规则变为如下
项目 说明
版本格式 YY.MM
Stable版本 每个季度发行
Edge版本 每个月发行
当前Docker CE Stable版本 18.09
当前Docker CE Edge版本 18.09
  • 同时Docker划分为CE和EE。CE即社区版(免费,支持周期三个月),EE即企业版,强调安全,付费使用。
2.CentOS安装Docker
1)系统要求
  • Docker CE支持 64 位版本CentOS 7,并且要求内核版本不低于3.10
  • 查看系统内核版本
uname -r
2)卸载旧版本
  • 旧版本的Docker称为docker或者docker-engine,使用以下命令卸载旧版本:
sudo yum remove docker docker-common docker-selinux docker-engine
3)使用yum安装
sudo yum install docker-ce

注意:如果安装的是centos7 minimal版本,执行安装提示“没有可用软件包”。这个时候需要安装必要的软件依赖以及更新增加docker-ce yum源。

  • 安装相关依赖:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

其中 -y 是不需要提示,全部同意的安装模式

  • 添加yum源:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4)使用脚本安装
  • 在测试或开发环境中Docker官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS系统上可以使用这套脚本安装:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
  • 执行这个命令后,脚本就会自动的将一切准备工作做好,并且把Docker CE的Edge版本安装在系统中。
5)启动Docker CE
sudo systemctl enable docker 	#设置开机启动
sudo systemctl start docker
6)建立docker用户组
  • 默认情况下,docker命令会使用Unix socket与Docker引擎通讯。而只有root用户和docker组的用户才可以访问Docker引擎的Unix Socket。一般Linux系统上不会直接使用root用户进行操作。因此,需要使用docker的用户加入docker用户组。
sudo groupadd docker 	#建立docker组
sudo usermod -aG docker $USER 	#将当前用户加入docker组
7)测试Docker是否安装正确
docker run hello-world #启动一个基于hello-world镜像的容器
docker info     #显示docker的详细信息
docker --version     #显示docker的详细信息

若能正常输出以上信息,则说明安装成功。

3.CentOS卸载Docker
1)删除docker安装包
sudo yum remove docker-ce
2)删除docker镜像
sudo rm -rf /var/lib/docker
4. 镜像加速器
  • 国内从Docker Hub拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker官方和国内很多云服务商都提供了国内加速器服务,例如
    • Docker官方提供的中国Registry mirror
    • 阿里云加速器
    • DaoCloud加速器
    • 163加速器

以163加速器为例进行介绍

1)CentOS 7 配置镜像加速
  • 对于使用systemd的系统,请在/etc/docker/daemon.json中写入如下内容(如果文件不存在请新建该文件)
{
   
	"registry-mirrors":[
		"http://hub-mirror.c.163.com"
	]
}
  • 重新启动服务生效
sudo systemctl daemon-reload
sudo systemctl restart docker
2)检查加速器是否生效
  • 配置加速器之后,如果拉取镜像仍然十分缓慢,请手动检查加速器配置是否生效,在命令行执行docker info,如果从结果中看到了如下内容,说明配置成功。
$ docker info
...
Registry Mirrors:
    http://hub-mirror.c.163.com
Live Restore Enable:false

1.1.3 Docker常用命令

1. Docker镜像操作
  • Docker运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker会从镜像仓库下载该镜像。
1)获取镜像
  • 从Docker镜像仓库获取镜像的命令是docker pull。其命令格式为:
docker pull[选项][Docker Registry 地址[:端口号]/]仓库名[:标签]
  • 具体的选项可以通过docker pull --help命令看到,这里我们说一下镜像名称的格式。
    • Docker镜像仓库地址:地址的格式一般是<域名/IP>[:端口号]。默认地址是Docker Hub。
    • 仓库名:仓库名是两段式名称,即<用户名>/<软件名>。
    • 对于Docker Hub,如果不给出用户名,则默认为library,也就是官方镜像。
docker pull ubuntu:16.04
  • 上面命令中没有给出Docker镜像仓库地址,因此将会从Docker Hub获取镜像。而镜像名称是ubuntu:16.04,因此将会获取官方镜像library/ubuntu仓库中标签为16.04的镜像。
2)运行镜像
  • 有了镜像后,我们就能够以这个镜像为基础启动并运行一个容器。以杀你那的ubuntu:16.04为例,如果我们打算启动里面的bash并且进行交互式操作的话,可以执行:
docker run -it --rm ubuntu:16.04 bash
  • -it:这是两个参数,一个是 -i:交互式操作,一个是 -t:终端。
  • –rm:这个参数是说容器退出后随之将其删除。
  • ubuntu:16.04 : 这是指用ubuntu:16.04镜像为基础来启动容器。
  • bash:放在镜像名后的是命令,这里我们希望有个交互式Shell,因此用的是bash。
  • 最后通过exit指令退出这个容器。
  • –name参数可以指定容器的名称
  • -p [宿主机端口号]:[容器端口号],该命令可以用来将容器的端口映射到宿主机的端口
3)列出镜像
  • 想要列出已经下载下来的镜像,可以使用docker images ls命令。列表包含了仓库名、标签、镜像ID、创建时间以及所占用的空间。
docker image ls
  • 查看镜像、容器、数据卷所占用的空间。
docker system df
  • 仓库名、标签均为<none>的镜像成为 虚悬镜像(dangling image),显示这类镜像:
docker image ls -f dangling=true
  • 一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。
docker image prune
4)删除本地镜像
  • 如果要删除本地的镜像,可以使用docker image rm命令,其格式为:
docker image rm [选项]<镜像1>[<镜像2>...]
  • 其中,<镜像>可以是镜像短ID、镜像长ID、镜像名或者镜像摘要。

  • 使用docker image ls -q来配合docker image rm,这样可以批量删除希望删除的镜像。

docker image rm $(docker image ls -q ubuntu) 	#删除所有仓库名为ubuntu的镜像
  • 或者删除所有在ubuntu:16.04之前的镜像:
docker image rm $(docker image ls -q -f before=ubuntu:16.04)
2. Docker容器操作
  • 容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。
1)启动容器
  • 启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。
  • 因为Docker的容器是轻量级的,用户可以随时删除和新创建容器。
i. 新建并启动
  • 使用 docker run 命令启动
  • 例如输出一个“Hello World”,之后终止容器。
docker run ubuntu:16.04 /bin/echo 'Hello world'
ii. 启动已终止容器
  • 使用 docker container start 或者 docker start
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值