前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker初识

Docker初识

作者头像
Liusy
发布2020-08-31 21:29:13
5510
发布2020-08-31 21:29:13
举报
文章被收录于专栏:Liusy01Liusy01

Docker是一个容器技术的应用,而底层是由于Linux容器实现的,Docker只是实现层。

一、Linux容器

1、隔离与共享

一台服务器运行着多个逻辑隔离的服务器进程,谁的运行环境都不希望影响到谁,也就是一个物理机需要虚拟出多个环境或容器,Linux提供一种创建和进入容器的方式,操作系统让应用程序就像在独立的机器上运行一样,但又能共享很多底层的资源。

2、实现基础

Linux容器功能是基于cgroupsNamespace实现的。

(1)cgroups(control groups 控制组)

cgroups是将进程分组管理的内核功能,通过cgroups可以隔离进程,同时还可以隔离进程的资源占用(cpu,内存等)情况,在操作系统底层限制物理资源,起到container的作用,进程可用的cpu资源由cpuset指定。

(2)Namespace

Namespace让每个进程拥有独立的PID、IPC和网络空间。Namespace是通过clone系统调用来实现的。clone系统调用的第三个参数flags就是通过设置Namespace来划分资源的。

Linux一共构建了6种不同的Namespace,用于不同场景下的隔离

  1. Mount - 隔离文件系统挂载点
  2. UTS - 隔离主机名和域名
  3. IPC - 隔离进程间通信资源
  4. PID - 隔离PID空间
  5. Network - 隔离网络接口
  6. User - 隔离用户/用户组空间

二、Docker简介

1、是什么

Docker是一个开源的应用容器引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在本地编译通过的容器可以批量的在生产环境上部署。

Docker类似于集装箱,各式各样的货物,经过集装箱的标准化进行托管,而集装箱与集装箱之前没有影响。Docker是一个开放平台,使开发人员和管理员可以在称为容器的松散隔离的环境中构建镜像、交互和运行分布式应用程序,以便在开发、QA和生产环境之间进行高效的应用程序生命周期管理。

2、Docker三个重要组件

(1)镜像(images)

一个特殊的文件系统。操作系统分为内核和用户空间,对于Linux来说,内核启动后会挂载root文件系统为其提供用户控件的支持。而Docker镜像,就相当于是一个root文件系统。

除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含一些为运行时准备的配置参数。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像实际是由多层文件系统联合组成。镜像构建时,会一层一层构建,前一层是后一层的基础。每一层构建完就不会再改变,后一层上的任何改变只发生在当前层。比如:删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅把当前层标记为该文件已删除。

分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

(2)容器(Container)

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、暂停、停止、删除等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行与属于自己独立的命名空间,容器也是分层存储。

容器存储层的生命周期跟容器一样,容器消亡时,容器存储层也会消亡,任何保存于容器存储层的信息都会丢失。

容器不应该向其存储层内写入任何数据,容器存储层也要保持无状态化。所有的文件写入操作,都应该使用数据卷、或者绑定宿主目录,在这些位置的读写会跳过存储层,直接对宿主发生读写,其性能和稳定性更高。容器消亡后数据卷的数据不会丢失。

容器在整个应用程序生命周期工作流中提供以下优点:隔离性、可移植性、灵活性、可伸缩性和可控性。 最重要的优点是可在开发和运营之间提供隔离。

(3)仓库(Registry)

Docker Registry是一个集中存储、分发镜像的服务。

一个Registry可以包含多个仓库(Repository),每个仓库只包含一种软件,但可以包含多个标签(tag,也就是版本),每个标签对应一个镜像。

这三个组件的关系如下图,比如有两个仓库,分别是Redis和MySQL

3、docker持续开发工作流

二、Docker安装、卸载

环境:Centos7

1、安装

Centos有配置docker社区版的yum包,所以安装比较方便。

代码语言:javascript
复制
1、先更新yum安装包sudo yum update2、安装dockeryum install docker-ce3、安装之后查看docker版本,也可以用docker infodocker version4、如果出现Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?   启动dockerservice docker start5、配置开机启动sudo systemctl enable docker

docker默认是docker官方的下载源,下载速度会比较慢,所以一般是配置国内的下载源,这里介绍阿里的下载源。

1、登陆阿里云获取镜像加速器地址

https://cr.console.aliyun.com/undefined/instances/mirrors

上图中就有针对各种服务器的配置详情。

2、卸载

(1)首先查看安装的Docker yum包

代码语言:javascript
复制
yum list installed | grep docker

(2)依次卸载yum包

代码语言:javascript
复制
yum -y remove 包名

(3)卸载掉之后,依次删除目录

代码语言:javascript
复制
rm -rf /etc/dockerrm -rf /run/dockerrm -rf /var/lib/dockershimrm -rf /var/lib/docker

如果出现如下错误:

代码语言:javascript
复制
rm: cannot remove ‘/var/lib/docker/containers’: Device or resource busy

执行如下命令:

代码语言:javascript
复制
cat /proc/mounts|grep containersumount /var/lib/docker/containers/
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Liusy01 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档