docker 基础

Docker基本概念和架构

Docker基本概念

什么是容器技术

  1. 一种虚拟化的方案
  2. 操作系统虚拟化
  3. 依赖于linux内核特性:Namespace和Cgroup
  •  linux容器技术 VS 虚拟机

虚拟机需要完整的操作系统。需要模拟硬件行为,对内存和cpu损耗相当大 同样配置的服务器,容器能提供更多服务能力,服务更多用户。磁盘占用空间更少,启动更快。容器不容易安装和管理,而docker可以改善这些,使容器安装简单,管理方便。


什么是docker

  1. 将应用程序自动部署到容器
  2. 使用GO语言编写的开源引擎

Docker特点

  1. 提供简单轻量的建模方式:快,资源利用率高
  2. 职责的逻辑分离
  3. 快速高效的开发生命周期:在容器中开发,以容器形式交付,缩短产品上线周期
  4. 鼓励使用面向服务的架构:单个容器只运行一个应用或者进程,一系列内部互联的容器,使扩展、调试程序变得简单。分布式应用程序模型:高内聚,低耦合,单一任务,在运行过程中容易定位问题

使用Docker做什么

  1. 使用docker容器开发、测试、部署服务
  2. 创建隔离的运行环境
  3. 搭建测试环境
  4. 构建Paas设施
  5. 提供SaaS应用程序
  6. 高性能,超大规模的宿主机部署

Docker基本组成

客户端、守护进程

  1. C/S架构
  2. 本地/远程

镜像

  1. 容器的基石,是一个层叠的只读文件系统
  2. Bootfs:引导文件系统,容器启动后,它会移动到内存中,引导文件系统会被卸载
  3. Rootls:比如ubuntu,centos,一种或者多种操作系统,只读,联合加载方式,基础镜像
  4. Add emac:联合加载方式,在基础镜像上一次加载多个文件系统,对外只能看到一个麻醉中的文件系统会包含低层所有文件和目录,它下面的镜像为副镜像,以此类推到最底部,最底部是基础镜像

容器

  1. 通过镜像启动
  2. 启动和执行阶段
  3. 写时复制
  4. 在镜像的最顶层加载一个可写层,初始可写层是空的,当文件系统发生变化的时候,这些变化都会应用到这可写层上,比如:如果修改配置文件,会先从只读层复制到可写层,该文件的只读版本依然存在,但是被可写层的文件副本隐藏。

仓库

  1. 公有仓库
  2. 私有仓库

Docker容器相关技术

Namespaces命名空间

  1. 封装:代码隔离
  2. 操作系统:提供系统资源的隔离:进程,文件系统,网络等等,为了实现轻量级虚拟化服务,也就是我们说的容器
  3. 五中命名空间
  • PID :进程隔离
  • NET:管理网络接口
  • IPC:管理跨进程通信访问
  • MNT:管理挂载点
  • UTS:隔离内核和版本标识

Control group 控制组

cgroups是Linux内核提供的一种机制,这种机制可以根据特定的行为,把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。通俗的来说,cgroups可以限制、记录、隔离进程组所使用的物理资源(包括:CPU、memory、IO等),为容器实现虚拟化提供了基本保证,是构建Docker等一系列虚拟化管理工具的基石。

cgroups的作用

  • 资源限制(Resource Limitation):cgroups可以对进程组使用的资源总额进行限制。如设定应用运行时使用内存的上限,一旦超过这个配额就发出OOM
  • 优先级分配(Prioritization):通过分配的CPU时间片数量及硬盘IO带宽大小,实际上就相当于控制了进程运行的优先级。
  • 资源计量:cgroups可以统计系统的资源使用量,如CPU使用时长、内存用量等等,这个功能非常适用于计费
  • 资源控制:cgroups可以对进程组执行挂起、恢复等操作。

Namespaces命名空间和Control group 控制组带来的特性

  1. 文件系统隔离:每个容器都有自己的root文件系统
  2. 进程隔离:每个容器都运行在自己的进程环境中
  3. 网络隔离:容器间的虚拟网络接口和IP地址都是分开的
  4. 资源隔离和分组:使用Cgroup将CPU和内存之类的资源独立分配给每个Docker容器

Docker安装

  1. 环境说明:本地安装VMware+centos7
  2. docker安装参考: https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce
  3. 安装命令如下:

#yum update

#yum install -y yum-utils device-mapper-persistent-data lvm2

#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

#yum install docker-ce

#systemctl start docker

  1. 查看docker的日志

#journalctl -u docker.service

  1. 关闭防火墙和网络服务

#systemctl stop firewalld.service

#systemctl disable firewalld.service

#systemctl stop NetworkManger

Docker基本命

Docker run 命令

  •  docker run:创建一个新的容器并运行一个命令

#docker run –help

  • 参数说明:
  • -a stdin : 指定标准输入输出内容类型,可选STDIN, STDOUT or STDERR
  • -d:后台运行容器,并返回容器ID
  • -i:以交互模式运行容器,通常与-t同时使用
  • -t:为容器重新分配一个伪输入终端,通常与-i同时使用
  • --name=”容器名称”:为容器指定一个名称
  • --dns 8.8.8.8:指定容器使用的DNS服务器,默认和宿主机一致
  • --dns-search 域名 :指定容器DNS搜索域名,默认和宿主机一致
  • -h “mars”:指定容器的hostname
  • -e username=”ritchie”:设置环境变量
  • --env-file=[]:从指定文件读入环境变量
  • -m:设置容器使用内存最大值

Docker start/stop/restart 命令

  •  启动一个或者多个已经被停止的容器。停止一个运行中的容器。重启容器。

#docker start [OPTIONS] CONTAINER [CONTAINER…]

Docker kill 命令

  •  杀掉一个运行中的容器

#docker kill [OPTIONS] CONTAINER [CONTAINER…]

Docker rm 命令

  •  docker rm :删除一个或多少容器

docker rm [OPTIONS] CONTAINER [CONTAINER...] OPTIONS说明:

  • -f :通过SIGKILL信号强制删除一个运行中的容器
  • -l :移除容器间的网络连接,而非容器本身
  • -v :-v 删除与容器关联的卷

Docker create 命令

  •  创建一个新的容器但是不启动它,用法同docker run

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

Docker cp 命令

  •  用于容器与主机之间的数据拷贝。

Usage: docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

Options:

  • -a, --archive Archive mode (copy all uid/gid information)
  • -L, --follow-link 保持源目标中的链接

本地镜像管理

  • docker images :列出本地镜像。
  • docker rmi :删除本地一个或多少镜像。
  • docker tag :标记本地镜像,将其归入某一仓库。
  • docker build :使用Dockerfile创建镜像。
  • docker save :将指定镜像保存成 tar 归档文件。
  • docker import :从归档文件中创建镜像。
  • docker info : 显示 Docker 系统信息,包括镜像和容器数。
  • docker version :显示 Docker 版本信息。

 

posted @ 2019-05-18 16:42  邹姣姣  阅读(243)  评论(0编辑  收藏  举报