docker

Docker简介

Docker是管理容器的引擎。

Docker为应用打包、部署平台,而非单纯的虚拟化技术

传统虚拟化与容器比较

工作方式如下

 

二、docker的安装 

1.配置软件仓库

 

2. 下载docker-ce

 

3. 查看是否安装成功

 

浏览器输入ecs的ip

Docker镜像

 

 分层结构设定

 

 创建一个Dockerfile

 

 

 

 

 

 

 

镜像缓存特性 

 

Dockerfile详解
Dockerfile常用指令:
1. FROM          指定base镜像,如果本地不存在会从远程仓库下载(定义基础镜像)
2.MAINTAINER    设置镜像的作者,如用户邮箱等(声明镜像维护者信息)

3.COPY    把文件从build context复制到镜像

支持两种形式:COPY src dest 和 COPY ["src","dest"]

src必须指定build context中的文件或目录

4.RUN    在容器中运行命令并创建新的镜像层,常用于安装软件包:
RUN yum install -y vim

5. ADD

用法与COPY类似,不同的是src可以是归档压缩文件,文件会被自动解压到dest,也可以自动下载URL并拷贝到镜像:

ADD himl.tar /var/www

ADD http://ip/htmi.tar /var/www

6.ENV    设置环境变量,变量可以被后续的指令使用:

ENV HOSTNAME sevrer1.example.com

7.EXPOSE     如果容器中运行应用服务,可以把服务端口暴露出去:EXPOSE 80
8. VOLUME     申明数据卷,通常指定的是应用的数据挂在点:VOLUME ["/var/www/htm"]
9.WORKDIR        为RUN、CMD、ENTRYPOINT、ADD和COPY指令设置镜像中的当前工作目录,如果目录不存在会自动创建。

什么是仓库

Docker Hub

 

本地仓库搭建及其Registry 工作原理

先清理之前的实验 

搭建本地仓库 

运行registry容器并开放5000端口 仓库作用:先上传镜像到本地仓库(本地镜像在命名时需要加上仓库的ip和端口) 

Registry 工作原理

一次docker pull 或 push背后发生的事情

index服务主要提供镜像索引以及用户认证的功能。当下载一个镜像的时候,首先 会去index服务上做认证,然后查找镜像所在的registry的地址并放回给docker客户 端,docker客户端再从registry下载镜像,在下载过程中 registry会去index校验客 户端token的合法性,不同镜像可以保存在不同的registry服务上,其索引信息都放 在index服务上。

配置docker镜像加速器

 

 

 

搭建私有仓库 

 

 

 

docker网络

docker原生网络

bridge桥接方式

 

Bridge桥接模式的缺陷:

        该模式下 Docker Container 不具有一个公有 IP,即和宿主机的 eth0 不处于同一个网段。导致的结果是宿主机以外的世界不能直接和容器进行通信。虽然 NAT 模式经过中间处理实现了这一点,但是 NAT 模式仍然存在问题与不便,如:容器均需要在宿主机上竞争端口,容器内部服务的访问者需要使用服务发现获知服务的外部端口等。另外 NAT 模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率
 

 

docker网络中的none网络模式 

docker自定义网络

bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,overlay和macvlan是用于创建跨主机网络。
建议使用自定义的网络来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址。

 

 

创建自定义网桥 

 

 

 

 

 

 

 

 

 

 iptables -nL 

 使用docker network connect 命令为 demo3添加一块mynet2 的网卡,可以完成通讯 

Docker数据卷 

Docker数据卷管理

• 为什么要用数据卷 • docker分层文件系统 • 性能差 • 生命周期与容器相同 • docker数据卷 • mount到主机中,绕开分层文件系统 • 和主机磁盘性能相同,容器删除后依然保留 • 仅限本地磁盘,不能随容器迁移 • docker提供了三种卷:(https://docs.docker.com/storage/) • bind mount • docker managed volume • tmpfs

• 选择-v或--mount标志: • 通常-v or --volume标志用于独立容器,而--mount标志用于集群服务,从Docker 17.06开始也 可以使用--mount于独立容器。 • -v或--volume:由三个字段组成,以冒号(:)分隔。 • 第一个字段是主机上文件或目录的路径。 • 第二个字段是文件或目录在容器中的安装路径。 • 第三个字段是可选的,并且是用逗号分隔的选项。 • --mount:包含多个键值对,以逗号分隔,每个键值对都由一个=元组组成。 • type:其可以是bind,volume,或tmpfs。 • source:指Docker主机上文件或目录的路径。可以指定为source或 src。 • destination:指定的文件或目录是在容器的路径。可以指定为destination,dst或target。 • readonly:(如果存在)以只读方式安装到容器中。 • --mount标志不支持z或Z修改SELinux的标签选项。

 

bind mount

是将主机上的目录或文件mount到容器里。

使用直观高效,易于理解。

 此时访问一下,容器目录和本地目录同步 

 bind mount默认权限是读写rw,可以在挂载时指定只读ro  , - v选项指定的路径,如果不存在,挂载时会自动创建。 

 

docker managed volume

bind mount必须指定host文件系统路径,限制了移植性。
docker managed volume不需要指定mount源,docker 自动为容器创建数据卷目录。
默认创建的数据卷目录都在/var/lib/docker/volumes中。
如果挂载时指向容器内已有的目录,原有数据会被复制到volume中。

 

 

 

• bind mount与docker managed volume对比 • 相同点:两者都是 host 文件系统中的某个路径。 • 不同点:

Docker安全

理解Docker安全

• Docker容器的安全性,很大程度上依赖于Linux系统自身,评估 Docker的安全性时,主要考虑以下几个方面: • Linux内核的命名空间机制提供的容器隔离安全 • Linux控制组机制对容器资源的控制能力安全。 • Linux内核的能力机制所带来的操作权限安全 • Docker程序(特别是服务端)本身的抗攻击性。 • 其他安全增强机制对容器安全性的影响。

• 命名空间隔离的安全 • 当docker run启动一个容器时,Docker将在后台为容器创建一个 独立的命名空间。命名空间提供了最基础也最直接的隔离。 • 与虚拟机方式相比,通过Linux namespace来实现的隔离不是那 么彻底。 • 容器只是运行在宿主机上的一种特殊的进程,那么多个容器之间使 用的就还是同一个宿主机的操作系统内核。 • 在 Linux 内核中,有很多资源和对象是不能被 Namespace 化的, 比如:时间。

• 控制组资源控制的安全 • 当docker run启动一个容器时,Docker将在后台为容器创建一个独立的 控制组策略集合。 • Linux Cgroups提供了很多有用的特性,确保各容器可以公平地分享主机 的内存、CPU、磁盘IO等资源。 • 确保当发生在容器内的资源压力不会影响到本地主机系统和其他容器,它 在防止拒绝服务攻击(DDoS)方面必不可少。

容器资源控制

在/sys/fs/cgroup 下面有很多诸如cpuset、cpu、 memory这样的子目录,也叫子系统。

在每个子系统下面,为每个容器创建一个控制组(即创建一个新目录),

控制组下面的资源文件里填上什么值,就靠用户执行docker run时的参数指定

CPU限额 

 

 

 

 

 

top 

 top查看一下

 

安全加固的思路 

 保证镜像的安全

  • 使用安全的基础镜像
  • 删除镜像中的setuid和setgid权限
  • 启用Docker的内容信任
  • 最小安装原则
  • 对镜像进行安全漏洞扫描,镜像安全扫描器:Clair
  • 容器使用非root用户运行

 保证容器的安全

  • 对docker宿主机进行安全加固
  • 限制容器之间的网络流量
  • 配置Docker守护程序的TLS身份验证
  • 启用用户命名空间支持(userns-remap)
  • 限制容器的内存使用量
  • 适当设置容器CPU优先级 
  • docker安全的遗留问题
  • 主要的内核子系统都没有命名空间,
  • 如:  SELinux • cgroup • 在/sys下的文件系统 • /proc/sys, /proc/sysrq-trigger, /proc/irq, /proc/bus • 设备没有命名空间: • /dev/mem • /dev/sd*文件系统设备 • 内核模块 • 如果你能沟通或攻击的其中之一作为特权的过程中,你可以拥 有自己的系统

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值