1.1 Docker简介

1.1.1 什么是Docker?

一种轻量级的操作系统虚拟化技术,基于Go语言实现的开源容器项目,诞生于2013年,最初发起者是dotCloud公司(现 Docker Inc)

Docker容器化虚拟技术 vs 传统虚拟机技术

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千容器 一般几十个
隔离性 弱于 强于
安全性 弱于 强于
跨操作系统 不支持 支持

Docker设计思想

  • BUILD、SHIP、RUN
  • 即对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)
  • 一次封装、到处运行
  • 封装的对象可以是一个Web应用、一个编译环境、也可以是一套数据平台服务,甚至是一个操作系统或一个大数据集群
  • 高效、敏捷、轻量级的容器方案,并支持部署到本地和多种主流云平台

1.1.2 Docker的主要特性

Docker优势

  • 利用并共享主机内核,性能出色
  • 加快应用部署速度,支持多种场景运行
  • 迁移、扩展、更新方便

1.2 Docker运行原理

1.2.1 系统架构

Image镜像

  • Image镜像是创建Docker容器的基础,App及其所需的运行环境,可以构建到Image镜像中
  • 镜像相当于静态模板,通过Image镜像可以启动多个Container容器
  • Image镜像依赖操作系统的内核,操作系统的内核在启动时会用bootfs加载
  • 它由多层layer组成,最底层是rootfs,包含某个发行版操作系统的根目录结构和配置文件
  • 每一层的layer,都会在前一层的基础上,对rootfs文件系统进行操作,安装软件或修改配置
  • 所有layer层的叠加,形成最终的文件结构便是Image镜像
  • Image镜像可以通过Dockerfile构建,也可以对Container进行操作后再持久化为Image
### 第一行必须指定基于的容器镜像
FROM ubuntu
### 维护者信息
MAINTAINER docker_user docker_user@email.com
### 镜像的操作命令
RUN echo "deb http://archive.ubuntu.com/ubuntu/raring main universe" >>/etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >>/etc/nginx/nginx.conf
### 容器启动时执行指令
CMD /usr/sbin/nginx

Container 容器

  • Docker容器是Docker镜像的一个运行实例。
  • Docker镜像是静态的只读文件,Docker容器带有运行时需要的可写文件层。
  • Docker容器是独立运行的一个或一组应用,以及他们必须的运行环境。
  • 系统架构

  • Docker 核心概念

    • Docker客户端

      • Docker command、RESTful API
    • Docker daemon
      • 核心引擎,接受请求、实现功能、返回结果
      • 内部机制复杂,需管理容器、镜像、存储等
    • Docker  容器
      • 核心内容,功能上以镜像作为基础,提供标准和隔离的执行环境
      • 概念上容器体现了Docker集装箱的理念
    • Docker 镜像
      • 容器环境的静态体现,轻量级的虚拟镜像(只是一个可定制的rootfs)
    • Registry
      • 存放Docker镜像的仓库,通常部署在服务器或者云端

1.2.2 镜像仓库

Docker Hub

  • Docker 官方维护的公共仓库,所有用户都可以进行Image的上传和获取
  • 本地没有Image镜像,并且没有指定镜像仓库时,会默认从Docker Hub进行获取

私有镜像仓库

  • 企业一般会在内网环境中搭建私有镜像仓库来进行镜像的存储,以减少风险
  • TDH镜像仓库在Manager主节点的5000端口
  • 如果同时存在多个镜像仓库,可以在容器名上进行区分:
  • registry.xxx.io/demo/centos:latest
    • repository:registry.xxx.io/demo/centos
    • tag/版本:latest
    • 远端仓库地址:registry.xxx.io
    • 项目/镜像名:demo/centos

1.2.3 工作机制

  • 准备阶段

    • 拉取镜像,若无本地镜像,则需要从远程仓库拉取
    • 创建新的容器,并设置进程间隔离的Spec,完成与宿主机进程和网络的隔离;容器进程纳入Cgroup,限制容器的资源占用,包括CPU、内存、网络、磁盘I/O等
    • 分配union文件系统并且挂载一个可读写层,任何修改容器的操作都会被记录在这个读写层上(可以保存这些修改成新的镜像;也可以选择不保存,下次运行镜像的时候所有修改操作都会被消除)
    • 分配网络\桥接接口,创建一个容器与本地主机通信的网络接口
    • 设置容器IP,为创建的容器分配一个IP地址,同时向iptables中追加一条新的映射规则
  • 启动阶段
    • 容器启动,运行指定的程序
    • 捕获并且提供应用输出,包括输入、输出、报错信息

1.3 Docker 基础操作

1.3.1 最佳实践

应用程序构建

# 拉取私有仓库镜像
docker pull node01:5000/first_image
# 查看镜像详情
docker image inspect node01:5000/first_image
# 通过镜像启动容器
docker run --name container-name -d node01:5000/first_image
# ----------------参数含义[start]---------------- #
# --name: 为容器起一个名称
# -d: detached,以守护进程的方式在后台运行
# -i: 以交互方式运行容器, 通常与-t搭配使用
# -t: 为容器重新分配一个伪输入终端,通常与-i搭配使用
# -P: 随机端口映射
# -p: 指定端口映射
# ----------------参数含义[end]---------------- #
# 查看运行中的容器
docker ps

容器管理

# 查看所有容器
docker container ls [-a]
# 查看容器日志
docker logs container-id/container-name
# 进入运行中的容器执行操作
dcoker exec -ti container-id/container-name bash
# 退出容器
exit
# 从本地拷贝文件到容器
docker cp container-id:path local_path
# 从容器拷贝文件到本地
docker cp local_path container-id:path
# 正常关闭容器
docker stop container-name/container-id
# 强制杀死容器
docker kill container-name/container-id
# 重启容器
docker restart container-name/container-id
# 删除容器
docker rm container-name/container-id
# 从运行中的容器创建一个新的镜像
docker commit container-id node01:5000/second_image

1.3.2 镜像管理

常用命令列表(本地镜像)

Command Description
docker images 列出本地镜像
docker rmi 删除本地一个或多个镜像
docker tag 标记本地镜像,将其归入某一仓库
docker build 根据Dockerfile构建镜像
docker commit 将容器commit为镜像
docker history 查看指定镜像的创建历史
docker save 将指定镜像保存成tar归档文件
docker load 导入使用docker save命令导出的镜像
docker import 从归档文件中创建镜像
docker login 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库Docker Hub
docker logout 登出一个docker镜像仓库,如果未执行镜像仓库地址,默认为官方仓库Docker Hub
docker pull 从镜像仓库中拉取或者更新指定镜像
docker push 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
docker search 从Docker镜像仓库中查找镜像

镜像仓库使用实践

# 为镜像打tag
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
## 查看镜像列表
docker images
## 打tag
docker tar ubuntu:latest node01:5000/test/ubuntu:latest
# 登录镜像仓库
docker login node01:5000
Username: root
Password:
Login Succeed
# 将镜像上传本地仓库
docker push [OPTIONS] NAME[:TAG|@DIGEST]
docker push node01:5000/test/ubuntu:latest
# 删除本地镜像
docker rmi node01:5000/test/ubuntu:latest
# 从镜像仓库重新下载镜像
docker pull node01:5000/test/ubuntu:latest

常用命令列表

Command Description
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 运行容器
docker ps [OPTIONS] 查看运行中的容器,-a 可以查看所有容器
docker inspect CONTAINER 查看容器详情
docker exec [OPTIONS] CONTAINER COMMAND [ARG...] 在容器中执行命令
docker logs [OPTIONS] CONTAINER 查看容器日志
docker rm [OPTIONS] CONTAINER [CONTAINER...] 删除停止后的容器,-f 可以强制删除运行容器
docker kill [OPTIONS] CONTAINER [CONTAINER...] 杀死容器
docker stop [OPTIONS] CONTAINER [CONTAINER...] 停止容器
docker start [OPTIONS] CONTAINER [CONTAINER...] 启动容器

DOCKER20231217: 容器引擎Docker的更多相关文章

  1. 你不得不了解的应用容器引擎---Docker

    最近突然想搭一个redis集群玩玩,因为公司的电脑同时开2个虚拟机就卡的不行,所以我就想到用Docker开启多个redis-server来搭建.然后在网上找着找着发现,使用Docker,哪需要搭建啊, ...

  2. 【开发工具 docker】值得学习的应用容器引擎docker安装

    概述: Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何 ...

  3. 应用容器引擎-Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化.容器是完全使用沙箱 ...

  4. Java框架Spring Boot & 服务治理框架Dubbo & 应用容器引擎Docker 实现微服务发布

    微服务系统架构实践 开发语言Java 8 框架使用Spring boot 服务治理框架Dubbo 容器部署Docker 持续集成Gitlab CI 持续部署Piplin 注册中心Zookeeper 服 ...

  5. Kubernetes将弃用Docker!与 containerd容器引擎

    时间戳:2022-06-07 20:32:19 星期二 撰写文档参考:(阿良-腾讯课堂)Kubernetes将弃用Docker 参考博客k8s入坑之路(3)containerd容器 container ...

  6. 史上最全面的Docker容器引擎使用教程

    目录 1.Docker安装 1.1 检查 1.2 安装 1.3 镜像加速 1.4 卸载Docker 2.实战Nginx 3.Docker命令小结 4.DockerFile创建镜像 4.1 Docker ...

  7. Centos7下安装与卸载docker应用容器引擎

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Li ...

  8. Docker 1.3.3/1.4.0 发布下载,Linux 容器引擎

    Docker 1.3.3 发布,下载地址: https://github.com/docker/docker/archive/v1.3.3.zip 改进记录包括: Security Fix path ...

  9. 操作系统-容器-引擎容器-百科:Docker

    ylbtech-操作系统-容器-引擎容器-百科:Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上 ...

  10. 【转帖】技术选型之Docker容器引擎

    技术选型之Docker容器引擎 https://segmentfault.com/a/1190000019462392 图过不来的 原作者写的挺好的 题外话 最近对Docker和Kubernetes进 ...

随机推荐

  1. 埃尼阿克ENIAC与计算机发展,及信息技术发展史

    一.埃尼阿克ENIAC 第二次世界大战期间,国军方为了研发新型的大炮和导弹,设立了"弹道研究实验室".实验室为了计算炮弹弹道,用了200多人加班加点进行计算,速度依感无法达到军方要 ...

  2. modbus调试助手/mqtt调试工具/超轻巧物联网组件/多线程实时采集/各种协议支持

    一.前言说明 搞物联网开发很多年,用的最多的当属modbus协议,一个稳定好用的物联网组件是物联网平台持续运行多年的基石,所以这个物联网组件从一开始就定位于自研,为了满足各种场景的需求,当然最重要的一 ...

  3. Qt5离线安装包无法下载问题解决办法

    1.前言 Qt5离线安装包目前在国内已经被墙了,无法下载,只能下载在线安装包: 直接访问会显示Download from your IP address is not allowed: 本文就提出两种 ...

  4. pitch、yaw、roll三个角的区别

    Z轴正方向为前进方向 pitch():俯仰,将物体绕X轴旋转(localRotationX) yaw():航向,将物体绕Y轴旋转(localRotationY) roll():横滚,将物体绕Z轴旋转( ...

  5. 深入解析 Spring AI 系列:项目结构一览

    从今天起,我们将以 Spring AI 为主线,开始更新一系列的文章.这些文章将围绕 Spring AI 项目展开,结合我的理解,深入讲解其相关的知识点.技术原理.以及在实际开发过程中涉及到的部分代码 ...

  6. 一款简单易用的印章设计工具 --(可转为ofd文件)

    本人开发了一款印章设计软件:不但可以将印章保存为图片,而且可以保存为ofd格式文件. 将印章保存为ofd格式,有很多优势:占用资源少.缩放不失真.可添加元数据. 矢量化图形格式一般为svg.pdf.很 ...

  7. uwp 多语言和本地化

    1. 在项目根目录创建Strings文件夹,再Strings文件夹创建需要的语言名子目录,再添加资源文件Resources.resw,目录构如: Strings\en-US\Resources.res ...

  8. Java API 之集合

    1. 包装类 (基本类型中没有多少我们能够使用的方法和属性,为了便捷我们需要自己去写) 针对每一种基本类型提供了对应的类的形式 --- 包装类   byte short int long float ...

  9. shell脚本中的循环(for循环,while循环)及break、continue的用法示例

    Shell脚本中也算是一门简易的编程语言了,当然循环是不能缺少的.常用到的循环有for循环和while循环.下面就分别介绍一下两种循环的结构. [for循环]: Shell脚本中的for循环示例: # ...

  10. Superset 用户集成完整方案(iframe方式)

    本次集成方案经过个人测试,根据前面2个集成方案的资料,撰写,相关说明由于个人知识水平有限不一定理解准确,有错误的地方环境评论区评论: 1.用户集成方式: A系统用户,通过A的某个界面,iframe嵌入 ...