云原生-docker

docker理念

docker解决的问题

docker解决了开发、部署各个环境的差异,将运行文档、配置环境、运行环境、运行依赖包、操作系统等都打一个镜像中整体交付,由原来的代码即应用转变的现在的镜像即应用。
docker是解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术(CICD)
CICD是通过构建流水线实现一系列自动化的动作,编译、打包、部署、单元测试、接口测试发布等;是实现devops的途径(开发运维一体化,开发自运维)

docker与虚拟机

参考文章
docker的特点:轻量级虚拟化;容器间隔离(进程隔离),自己的文件系统,互不影响,计算资源隔离;启动快

  1. 虚拟机会虚拟硬件、内核,docker轻量级虚拟化,docker容器、进程隔离的一种方案, docker运行在宿主机内核。
  2. docker启动快,虚拟机分钟级,docker秒级
  3. 每个docker容器间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源
    云原生-docker_第1张图片
    云原生-docker_第2张图片
    云原生-docker_第3张图片

docker核心概念

docker架构(组成)

云原生-docker_第4张图片
docker包含client、host、registry三部分(C/S架构),docker host包含一个守护进程docker deamon,docker deamon上基于镜像运行成容器。(鲨鱼上的一个个集装箱)

  • Docker宿主机(Host): 一个物理机或虚拟机, 用于运行Docker服务进程和容器, 也成为宿主机, node节点
  • Docker服务器端(Server): Docker守护进程, 运行Docker容器
  • Docker客户端(Client): 客户端使用docker命令或其他工具调用docker API
  • Docker仓库(Registry): 保存镜像的仓库, 官方仓库:hub.docker.com, 可以搭建私有仓库harbor
  • Docker镜像(Images): 镜像可以理解为创建实例使用的模板, 相当于RPM或者DEB包
  • Docker容器(Container): 容器是从镜像生成对外提供服务的一个或一组服务, 相当于RPM包中的程序运行起来
    镜像: 只读的模板
    容器:镜像的运行态,实例化;可以认为是一个简易的Linux系统
    仓库:集中存储镜像的仓库
    docker是一个c/s结构的系统,docker守护进程运行在主机上,然后通过socker连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器。容器是一个运行时环境,就是集装箱。

Docker的核心技术有三个:NameSpaces做视图隔离、Cgroups做资源限制,UnionFS联合文件系统,统一mount。通俗理解:NameSpaces、Cgroups通给进程设置属性,实现进程的隔离与限制,UnionFS给进程构造文件系统。这三项技术均有linux内核提供,Docker本身并没有创造新的技术。
但是Docker创造性的通过镜像整体打包了应用的依赖环境,包括:操作系统文件、中间依赖层、APP。

docker帮助命令

docker version
docker info
docker --help

docker镜像

概念

参考文章

  • 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,包含运行软件所需得所有内容,包括代码、运行时、库、环境变量和配置文件
  • **镜像是一个只读的容器模板,**含有启动docker容器所需的文件系统结构及内容 Docker以镜像和在镜像基础上构建的容器为基础,以容器开发、测试、发布的单元将应用相关的所有组件和环境进行封装,避免了应用在不同平台间迁移所带来的依赖问题,确保了应用在生产环境的各阶段达到高度一致的实际效果。
  • 镜像可以被创建、启动、关闭、重启以及销毁。
  • 镜像是基于**联合文件系统(unionFS)**的一种层式结构,由一系列指令一步一步构建出来。最底部的镜像为基础镜像()
  • 镜像是分层的,分层的原因是为了可复用。镜像run成容器后,最上层是读写层,当需要修改容器的文件时,只对最上层进行变动,不修改下面已于文件系统的内容。当提交修改过成容器为一个新镜像时,存的内容仅为最上层读写文件系统中被更新过的文件。
    云原生-docker_第5张图片
    云原生-docker_第6张图片

镜像命令

# 查看本地的镜像文件列表  responsitory 镜像源   tag标签   imageId 镜像id    created镜像创建时间   size镜像大小
docker images    (-qa   a所有层;q只显示id)
# 从docker hup上查找镜像列表
docker search +镜像名
# 从仓库下载,默认lastest最新版,也可以指定版本
docker pull + 镜像名
# 删除某个镜像
docker rmi + 镜像名
# 推镜像到远程registry
docker push + 镜像名

docker容器

概念

容器是镜像启动起来的一个运行环境,镜像的运行时,镜像可以认为是构建打包阶段、容器是启动或执行阶段

常用命令

# 从镜像启动容器  docker run –it –p -d
docker run + 镜像 		-i交互  -t 伪终端    -d 守护式容器
# 列出当前正在运行的容器
docker ps   -a –q
# 退出交互容器
exit 停止退出;ctrl+P+Q不停止退出
# 启动容器
docker start +container Id
docker restart +container Id
# 停止容器
docker stop +container Id
# 强制停止容器
docker kill  +container Id
# 删除容器
docker rm +container Id
# 查看容器日志
docker logs –t –f –tail +containerId
# 查看容器内的进程
docker top +containerid
# 查看容器内部的细节
docker inspect + containerid
# 重新进入容器伪终端,不会启动新进程
docker attach  + containerid
# 在容器中打开新终端,并且可以打开新进程
docker exec  + containerid
# 从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 宿主机路径
# 提交容器成新的镜像
docker commit –m –a

Registry(仓库)

用于集中存放镜像,分为共有仓库(docker搭建运营的docker hub)和公司自建的私有仓库

容器数据卷

引入容器数据卷的目的是:1. 数据的持久化;2. 共享数据
云原生-docker_第7张图片
有以下两种方式挂在容器数据卷:

  1. 命令添加容器数据卷
    Docker run –it –v 宿主机目录:容器目录:rwo

  2. dockerFile添加容器数据卷
    使用volume指令添加一个或者多个容器数据卷
    云原生-docker_第8张图片

数据卷容器

命名的容器挂在数据卷,其他容器通过挂在这个父容器实现数据共享;这个挂在数据卷的容器,称之为数据卷容器
容器添加了数据卷,其他容器继承这个容器(volumes-from)形成新的容器,也会有那个卷,并且多个继承,数据卷会一直存在,不管容器是否停止
通过镜像启动容器时指定数据卷容器

dockerFile

概念

Dockerfile是用来构建docker镜像的构建文件,是由一系列命令和参数构成的脚本。

容器的构建过程:

  1. 编写dockerfile文件
  2. docker build 构建
  3. docker run 运行

云原生-docker_第9张图片
云原生-docker_第10张图片

dockerfile编写规范:

  • 保留字指定必须大写,后面至少跟一个参数
  • 指令按照从上到下顺序执行
  • 表示注释

  • 每条指令都会创建一个新的镜像层,并对镜像进行提交

dockerfile的执行过程:

  1. 从基础镜像运行一个容器
  2. 执行一条指令并对容器做出修改
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. docker再基于刚提交的镜像运行一个新容器
  5. 执行dockerfile的下一条指令直至所有指令都执行完成

dockerfile的保留字指令

FROM 基础镜像
MAINTAINER 作者、作者邮箱
RUN 容器构建时需要执行的命令
EXPOSE 暴露端口
WORKDIR 登录后默认的目录
ENV 设置环境变量
ADD 拷贝加解压缩
COPY 复制
VOLUME 容器数据卷
CMD 容器启动时运行的命令,多个cmd命令只有最后一个生效,会被docker run 后面的命令参数替换
ENTRYPOINT 与cmd一样,但docker run 后面的命令会追加
ONBUILD 父镜像被子镜像继承后,父镜像的onbuild将被触发

你可能感兴趣的:(docker,云原生,容器)