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进 ...
随机推荐
- Not all slots covered! Only 5461 slots are available. Set checkSlotsCoverage = false to avoid this check
Not all slots covered! Only 5461 slots are available. Set checkSlotsCoverage = false to avoid this c ...
- [转]IRIG-B码授时工作原理
在授时设备中有一种是B码授时的,但是大部分人不太清楚何为B码授时?这种类型的授时工作原理是怎么样? 首先我们要知道什么是B码,然后再介绍它的授时工作原理,B码是一种电力术语,它是IRIG-B码的通俗叫 ...
- 【OpenGL ES】GLSL基础语法
1 前言 本文将介绍 GLSL 中数据类型.数组.结构体.宏.运算符.向量运算.矩阵运算.函数.流程控制.精度限定符.变量限定符(in.out.inout).函数参数限定符等内容,另外提供了一个 ...
- IM消息ID技术专题(六):深度解密滴滴的高性能ID生成器(Tinyid)
1.引言 在中大型IM系统中,聊天消息的唯一ID生成策略是个很重要的技术点.不夸张的说,聊天消息ID贯穿了整个聊天生命周期的几乎每一个算法.逻辑和过程,ID生成策略的好坏有可能直接决定系统在某些技术点 ...
- 今天记录一下小程序使用微信客服api,而不是小程序客服
小程序客服缺少很多东西,并且只能使用button的开放能力,所以尝试使用一下微信客服,自己开发客服又比较麻烦,秉着能免费绝不花钱的想法,接下来就直接写代码,也就是api,记录下来方便使用 wx.ope ...
- 画(HB To Ryby!)
"客人,请描述得具体一点." 他似乎还是很难为情. "呃--就是--一个女孩儿",他又勉强启开嘴,"女孩儿"三个字几乎被咽进嗓子 ...
- Solution Set -「AGC 004~006」C~F
目录 「AGC 004C」AND Grid 「AGC 004D」Teleporter 「AGC 004E」Salvage Robots 「AGC 004F」Namori ^ 「AGC 005C」Tre ...
- Solution -「NOI 2017」「洛谷 P3823」蚯蚓排队
\(\mathscr{Description}\) Link. (自己看题, 我总不能让题意比题解还长吧?) \(\mathscr{Solution}\) 下一组我一定写成 solutio ...
- Docker npm install:npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY 。。reason: unable to get local issuer certificate 解决办法
这个是需要证书导致无法连接,临时解决办法是设置 npm set strict-ssl=false 在 Dockerfile文件里的 RUN npm install 之前添加 RUN npm set ...
- struts2和Springmvc原理及比较
一.拦截机制的不同 Struts2是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype,然后通过setter ...