一 docker 简介
一 docker 初识
1、Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
2、Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
3、容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低
Docker 是一个用于开发,交付和运行应用程序的开放平台。
4、Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
5、传统VM解决的问题是资源调配的问题,而容器解决的问题是应用开发、测试和部署的问题
6、docker直接使用宿主机操作系统调度硬件资源 ,资源利用率更强
7、正是由于5、6,两点所以我们更加关心docker的安全
二 docker 架构
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
三 docker环境搭建
参考 菜鸟教程
https://www.runoob.com/docker/docker-tutorial.html
四 docker的常用命令
docker search <name> //搜索指定的镜像
docker pull <name> //拉取指定镜像
docker images //获取镜像名称 + -a 全部镜像
docker rm <images ID or name> //删除镜像
docker run -p 80:8080 tomcat //run为运行命令 -p 宿主机端口:容器端口的映射关系
docker exec -it cf4a /bin/bash //进入 docker 容器
docker run -it -p 80:8080 tomcat /bin/bash //创建并进入容器
docker inspect // 获取容器/镜像的元数据。(可以用于默写数据的分析)
docker -V //挂载宿主机的一个目录
docker run -it -v /test:/sorft centos /bin/bash //宿主机的、test目录挂载到容器的/soft目录
冒号“:”冒号前面是宿主机 ,后面的目录是容器目录
docker container run \
--rm \ //停止运行后,自动删除容器文件
--name wordpress \ //容器的名字叫做wordpress
--volume "$PWD/":/var/www/html \ //将当前目录($PWD)映射到容器的/var/www/html(Apache 对外访问的默认目录)。因此,当前目录的任何修改,都会反映到容器里面,进而被外部访问到。
php:5.6-apache
docker 容器安全
安全问题
1、docker的主要矛盾点在于和宿主机共用内核,是在轻量级于系统安全之间做的一个取舍。
2、共用内核导致的问题是如果某个容器里的应用导致linux的内核崩溃 ,那么整个系统都会崩溃
3、Docker的自身漏洞
4、Docker源问题 (Docker提供了Docker Hub,可以让用户上传镜像,以便供其它用户下载;下载的镜像可能会被植入恶意程序,传输过程中的镜像被篡改,镜像所搭建的基础镜像本身就包含漏洞)
5、Docker架构与安全机制纰漏
安全问题与解决方案并不是一一对应的关系。
解决方案
1、namespace即“命名空间”,也称“名称空间” 。(将内核的全局资源做封装)
2、iptables:用户通过iptables这个代理,将用户的安全设定执行到对应的"安全框架"中,这个"安全框
架"才是真正的防火墙,这个框架的名字叫netfilter
3、Sysdig Falco 是一个开源的应用行为活动监测器
4、Cgroup又称“控制组”他主要是做资源控制。其原理是将一组进程放在一个控制组里,通过给这个控制组分配指定的可用资源,达到控制这一组进程可用资源的目的
5、Linux ulimit命令用于控制shell程序的资源。ulimit为shell内建指令,可用来控制shell执行程序的资源。