DOCKER20231217: 容器引擎Docker
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镜像的仓库,通常部署在服务器或者云端
- 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
- repository:
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的更多相关文章
- 你不得不了解的应用容器引擎---Docker
最近突然想搭一个redis集群玩玩,因为公司的电脑同时开2个虚拟机就卡的不行,所以我就想到用Docker开启多个redis-server来搭建.然后在网上找着找着发现,使用Docker,哪需要搭建啊, ...
- 【开发工具 docker】值得学习的应用容器引擎docker安装
概述: Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何 ...
- 应用容器引擎-Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化.容器是完全使用沙箱 ...
- Java框架Spring Boot & 服务治理框架Dubbo & 应用容器引擎Docker 实现微服务发布
微服务系统架构实践 开发语言Java 8 框架使用Spring boot 服务治理框架Dubbo 容器部署Docker 持续集成Gitlab CI 持续部署Piplin 注册中心Zookeeper 服 ...
- Kubernetes将弃用Docker!与 containerd容器引擎
时间戳:2022-06-07 20:32:19 星期二 撰写文档参考:(阿良-腾讯课堂)Kubernetes将弃用Docker 参考博客k8s入坑之路(3)containerd容器 container ...
- 史上最全面的Docker容器引擎使用教程
目录 1.Docker安装 1.1 检查 1.2 安装 1.3 镜像加速 1.4 卸载Docker 2.实战Nginx 3.Docker命令小结 4.DockerFile创建镜像 4.1 Docker ...
- Centos7下安装与卸载docker应用容器引擎
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Li ...
- 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 ...
- 操作系统-容器-引擎容器-百科:Docker
ylbtech-操作系统-容器-引擎容器-百科:Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上 ...
- 【转帖】技术选型之Docker容器引擎
技术选型之Docker容器引擎 https://segmentfault.com/a/1190000019462392 图过不来的 原作者写的挺好的 题外话 最近对Docker和Kubernetes进 ...
随机推荐
- 埃尼阿克ENIAC与计算机发展,及信息技术发展史
一.埃尼阿克ENIAC 第二次世界大战期间,国军方为了研发新型的大炮和导弹,设立了"弹道研究实验室".实验室为了计算炮弹弹道,用了200多人加班加点进行计算,速度依感无法达到军方要 ...
- modbus调试助手/mqtt调试工具/超轻巧物联网组件/多线程实时采集/各种协议支持
一.前言说明 搞物联网开发很多年,用的最多的当属modbus协议,一个稳定好用的物联网组件是物联网平台持续运行多年的基石,所以这个物联网组件从一开始就定位于自研,为了满足各种场景的需求,当然最重要的一 ...
- Qt5离线安装包无法下载问题解决办法
1.前言 Qt5离线安装包目前在国内已经被墙了,无法下载,只能下载在线安装包: 直接访问会显示Download from your IP address is not allowed: 本文就提出两种 ...
- pitch、yaw、roll三个角的区别
Z轴正方向为前进方向 pitch():俯仰,将物体绕X轴旋转(localRotationX) yaw():航向,将物体绕Y轴旋转(localRotationY) roll():横滚,将物体绕Z轴旋转( ...
- 深入解析 Spring AI 系列:项目结构一览
从今天起,我们将以 Spring AI 为主线,开始更新一系列的文章.这些文章将围绕 Spring AI 项目展开,结合我的理解,深入讲解其相关的知识点.技术原理.以及在实际开发过程中涉及到的部分代码 ...
- 一款简单易用的印章设计工具 --(可转为ofd文件)
本人开发了一款印章设计软件:不但可以将印章保存为图片,而且可以保存为ofd格式文件. 将印章保存为ofd格式,有很多优势:占用资源少.缩放不失真.可添加元数据. 矢量化图形格式一般为svg.pdf.很 ...
- uwp 多语言和本地化
1. 在项目根目录创建Strings文件夹,再Strings文件夹创建需要的语言名子目录,再添加资源文件Resources.resw,目录构如: Strings\en-US\Resources.res ...
- Java API 之集合
1. 包装类 (基本类型中没有多少我们能够使用的方法和属性,为了便捷我们需要自己去写) 针对每一种基本类型提供了对应的类的形式 --- 包装类 byte short int long float ...
- shell脚本中的循环(for循环,while循环)及break、continue的用法示例
Shell脚本中也算是一门简易的编程语言了,当然循环是不能缺少的.常用到的循环有for循环和while循环.下面就分别介绍一下两种循环的结构. [for循环]: Shell脚本中的for循环示例: # ...
- Superset 用户集成完整方案(iframe方式)
本次集成方案经过个人测试,根据前面2个集成方案的资料,撰写,相关说明由于个人知识水平有限不一定理解准确,有错误的地方环境评论区评论: 1.用户集成方式: A系统用户,通过A的某个界面,iframe嵌入 ...