开源容器-Docker

1. 虚拟化技术

虚拟化技术可以将一台物理服务器虚拟为多台逻辑服务器,每台逻辑服务器可运行不同的操作系统,系统内的应用程序也相互隔离不受影响,从而显著提高服务器的运行效率。
常用的虚拟化技术有:OpenStack、KVM、VMWare

2. LXC(Linux Container:Linux 内核容器技术)

LXC 利用 cgroup 与 namespace 的功能,将 Linux 进程进行沙盒化,使得进程之间可以相互隔离,并且能够控制各进程的资源分配。

3. Docker

Docker 是现在最流行的开源容器,遵循 Apache 2.0 协议,使用 GO 语言进行开发,始于 2013 年,现已加入 Linux 基金会。
我们可以将 Docker 理解为一个轻量级的沙盒,Docker 容器完全使用沙盒机制,每个容器内都有其独立运行的环境和组件,容器之间是相互隔离互不影响的,也可以进行容器间的通信。
Docker 的核心思想:“Build once,Run anywhere”,即:一次构建,处处运行,这里可以是一个操作系统,一个Web 应用,或者一个数据库服务等。
官网: https://www.docker.com/
文档地址: https://docs.docker.com/
仓库地址: https://hub.docker.com/

4. K8s

k8s 是 kubernetes 的缩写,是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

5. Docker 与 LXC 区别
  1. Docker 可以代替 LXC,虽然 Docker 一开始的底层就是 LXC,但现在 Docker 已经开发了自己的直接使用核心 namespace 和 cgroup 的工具:libcontainer。
  2. LXC 是一个系统容器,而 Docker 是一个应用程序容器,但 Docker 比 LXC 有更强的功能:可移植性、以应用为中心、自动构建、版本控制、组件重用、镜像共享、工具生态圈。
6. Docker 和 k8s 之间的关系

Docker 是一个开源的应用容器引擎,Kubernetes 是用来管理 Docker 集群的,可以实现 Docker 容器集群的自动化部署,自动扩缩容、维护等功能。Kubernetes 不仅仅支持 Docker,还支持其他容器技术。

7. Docker 的优势

Docker 有社区版、企业版。社区版是开源 免费的,企业版是收费的,当然也会有更牛逼的特性和服务,一般的应用社区版的足够了。
优势:

  1. 启停非常快,以秒、毫秒为单位的;
  2. 隔离性好,容器之间没有任何依赖;
  3. 更高效的资源利用,使用成本非常低;
  4. 一次构建处处运行,可轻松迁移和扩展;
8.Docker 的应用场景
  1. 简化配置
  2. 代码流水线(Code Pipeline)管理
  3. 提高开发生产率
9.Docker如何实现资源隔离的

Docker 本身就是服务器中的一个进程,Docker 使用的是Linux 内核和内核功能(例如 cgroup 和 namespace)来分隔进程实现资源隔离的,通过 cgroup 实现资源限制,通过 namespace 实现资源隔离。

10.Docker 的三大核心组件
  1. Docker 三大核心组件:
    1)Docker 仓库
    仓库是集中存储 Docker 镜像文件的地方,分为公开、私有两种仓库。最大的公开仓库是官方的 Docker Hub:https://rgistry.hub.docker.com
    2)Docker 镜像
    Docker 镜像是一个独立完整的文件系统(包含运行应用程序所需的代码、运行时、库、环境变量和配置文件等),它是静态的,不包含任何数据,其内容在构建之后也不会被改变。
    3)Docker 容器
    Docker 容器是用来真正运行程序的,它是动态的,一个镜像可以实例化多个容器。
  2. Docker 仓库、镜像、容器的区别
    仓库是用来存在放镜像的,镜像是一个独立且完整的文件系统,容器是镜像的运行时实例。
11.Docker 常用命令

docker images 列出所有镜像
docker ps -a 列出容器
docker pull 拉取指定镜像
docker push 推送镜像值仓库
docker rmi 删除镜像
docker rm 删除容器

12.Dockerfile文件
  1. Dockerfile 是创建 Docker 镜像的基本配置文件,本身是一个文本文件,也是构建 Docker 项目的基石。
  2. 常用命令:
    form:指定基础镜像
    arg:指定参数
    add:添加资源
    label:为镜像指定标签
    run:运行指定的命令
    cmd:容器启动时要运行的命令
    entrypoint:入口配置
  3. Dockerfile 中 copy 和 add 的区别
    add 和copy 都是复制文件、文件夹。
    add 可以从网络/本地复制。copy 仅支持从本地复制。copy 语义更明确,官方推荐使用 copy。
14.Docker 检索、导入和下载镜像

1)检索镜像

  1. 可以通过在 Docker Hub 上搜索镜像;
  2. 通过命令检索:docker search mysql;

2)下载镜像
命令:docker pull 镜像名:tag
其中 tag 为版本,可选的,默认不写为 least。
3)导入镜像
命令:docker load < IMAGE NAME
逐步导入镜像:

for image_name in $(ls /)
do
docker load < ${image_name}
done

15.Docker 镜像

构建镜像命令:docker build -t jartto-docker-demo
表示基于当前目录的 Dockerfile 来构建镜像,-t 指定镜像名。
1)构建镜像的几个原则:

  1. 选择最精简的基础镜像;
  2. 清理镜像构建的中间产物;
  3. 减少镜像的层数;
  4. 充分利用镜像构建缓存;
  5. 优化网络请求;

2)镜像分析工具

  1. docker 自带的 docker image histroy 命令;
  2. 镜像分析工具 dive

3)docker 镜像瘦身

  1. 判断瘦身:可以通过比较流行的镜像分析工具dive,它可以分析出容器镜像有效率、镜像空间浪费率等指标。如果分析镜像有效率过低,这种情况显然就需要瘦身。
  2. 瘦身方法:①多阶段构建 ②减少镜像分层 ③减少容器中不必要的包
16.Docker 容器

1)新增一个容器
新建容器、运行容器都是通过这条命令一次完成的:
> docker run -d -p 80:80 docker/getting-started

这样就等同于基于镜像新建容器、在运行该容器。
开源容器-Docker_第1张图片
2)查看所有容器

查看所欲容器:docker ps -a
查看所有运行容器:docker ps

在这里插入图片描述

3)容器状态
created:已创建,但还没有被启动;
running:运行中;
paused:容器进程被暂停了;
restarting:容器进程正在重启中;
exited:容器退出运行;
destroyed:容器已被删除;
4)查看容器端口映射

docker port container-id

如果返回空,代表没有端口映射。
5)查看容器日志

docker logs container-id/container-name

6)获取运行中的容器进程 ID

  1. docker top container-id

  2. docker inspect --format “{{State.Pid}}”

7)启动已停止运行的容器

docker start container-name/container-id

8)停止运行中容器

停止所有运行容器:docker stop $(docker ps -q)
停止单个运行容器:docker stop container-name/container-id

9)删除容器

删除所有容器:docker rm $(docker ps -qa) 包含所有运行中的、未运行的。
删除单个容器:docker rm container-id

10)导入导出容器

docker import - javastack:1.0
docker import https//www.javastack.cn/javastack-1.0.tar repo
docker export container-id > xx.tar

你可能感兴趣的:(Docker,docker,容器,kubernetes)