容器安全

-Docker——从入门到实践
-业务容器化迁移
安全容器

云原生

云原生(Cloud Native)是一套技术体系和方法论。云(Cloud)表示应用程序位于云中,而不是传统的数据中心;原生(Native)表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳状态运行,充分利用和发挥云平台的弹性和分布式优势。

云原生的代表技术包括容器、服务网格(Service Mesh)、微服务(Microservice)、不可变基础设施和声明式API。

镜像

镜像就是打包的、分层的文件系统,image 是二进制文件

docker基础镜像:如nginx、tomcat可制作成基础镜像
docker系统镜像:如ubuntu、centos,跑起来就是一个精简版操作系统,俗称胖容器

开发:标准镜像—构建/打包—>业务镜像—PUSH—>镜像仓库
运维:镜像仓库—->自动部署—->编排服务

容器

镜像run起来就是一个容器,容器的实质是进程,运行在属于自己的“命名空间”,即独立的namespaces
一个镜像可以启动(run)N个容器
一台主机可以同时运行几千个Docker容器
通常一个业务系统应拆分成2~3个容器:数据存储容器+应用程序容器+(缓存容器)

1
2
3
4
5
6
7
8
9
#从镜像仓库拉取镜像到本地
docker pull 镜像

#构建镜像(也就是定制属于自己的镜像)
#在Dockerfile文件所在目录执行
dock build

#有了镜像后,镜像run起来就是一个容器
docker run 镜像

Kubernetes

K8s容器集群管理系统:启动容器,自动化部署、扩展和管理容器,回收容器。
K8S负责管理容器跑在哪个机器上,监控容器的存在,控制容器与外界通讯。
Docker:创建容器
K8S:编排容器

一般不会把整个应用及其依赖的服务打到一个镜像,用一个容器来跑。常见的做法是database和webserver用独立的镜像,独立的容器来跑,然后用docker-compose或者k8s之类的工具将一批容器组织成一个应用单元

Pod:容器集合,调度的基本单元
Node:物理节点
service:pod的访问代理抽象,一个service可映射N个pod

不要在单个容器里面运行多个进程

不要把认证口令存在镜像中,用环境变量比较好

不要将数据储存在容器中,容器销毁了里面的数据也没了,要将数据写入volumes

Q&A


Q:一个容器,一个镜像,谁的概念大?
A:镜像和容器的关系,类似“类”和“实例”,镜像是静态的定义,容器是镜像运行时的实体,容器可以被创建、启动、停止、删除、暂停等


Q:Dockerfile是干啥用的?
A:是个文本文件,用来清晰的记录镜像的构建过程,即在基础镜像之上,执行哪些命令才能制作成你的镜像


Q:制作自己的镜像,有哪些方法?
A:
1、通过创建Dockerfile,执行docker build命令自动编译生成镜像,✲推荐✲
2、通过run一个镜像,在这个容器内敲些命令、操作,最后执行docker commit命令提交,打包生成镜像(俗称黑箱镜像,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知)


Q:war、jar包会打包进基础镜像中吗?还是制作成一个单独的镜像?
A:编写Dockerfile,jar包直接部署在Docker中,而war包需要先部署在Tomcat基础镜像中再部署在Docker中
A:构建时打包进基础镜像中,生成自己系统的最终镜像