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进 ...
随机推荐
- JAVA开发规范v1.0
01-中铜国贸JAVA开发规范v1.0 一.编程规约 (一)命名风格 [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例:_name / _name / $Obje ...
- 迁移现有用户数据到ABP vNext
前言 使用 ABP vNext(下文简称 ABP)时,通常都是从 cli 开始新建模板,从一个空项目开始.对已经存续的项目来说,现有的数据,特别是用户等核心数据需要进行迁移. 老的项目,随着规模越来越 ...
- metasploit模块
模块类型 辅助模块(Auxiliary) 渗透攻击模块(Exploits) 后渗透攻击模块(Post) 攻击载荷模块(Payloads) 空指令模块(Nops) 编码器模块(Encoders) 后渗透 ...
- 【数据结构】【冒泡排序法】Java写冒泡排序法
public class 冒泡 { public static int[] maopao(int[] arr){ for(int i=0;i<arr.length-1;i++){ for(int ...
- Qt音视频开发11-通用监控布局控件(开源)
一.前言 自从做监控系统以来,就一直有打算将这个功能独立出来一个类,这样的话很多系统用到此类布局切换,通用这个类就行,而且后期此布局会增加其他异形布局,甚至按照16:9之类的比例生成布局,之前此功能直 ...
- Qt编写地图综合应用53-省市轮廓图下载
一.前言 Qt的浏览器控件的交互机制非常方便,所以在在线地图的时候可以对每个区域的经纬度坐标集合发给Qt程序,让他去存储到文件,在实际的测试过程中,发现有部分地图有多个封闭的曲线的,比如散落的岛屿和飞 ...
- Llama3.1 是怎么工作哒?原文翻译版😘
了解Llama3.1如何工作--深入探讨模型流程 原文标题:Understand How Llama3.1 Works - A Deep Dive Into the Model Flow 原作者:Xi ...
- 基于Vue的前后段分离开发项目中<img :src />标签中引用vue的data属性中定义的图像地址失败的解决办法
问题描述: 基于Vue的前后段分离开发项目中<img :src />标签中引用vue的data属性中定义的图像地址失败,如下图所示: 解决办法: 修改后写法,加上require即可.如下 ...
- Java GUI控件SwingX之JXTaskPane的使用示例
JXTaskPane 类似XP 左边的导航栏,在开发Swing应用的时候很好用的.下面两张截图反应了JXTaskPane的动画效果.可以自由的卷起和展开. JXTaskPane的的使用步骤:1.新 ...
- 【译】GitHub Copilot Free 在 Visual Studio 中
可能您还没有听说过,GitHub 刚刚宣布了 Copilot Free(免费版)!好消息是:您现在已经可以在 Visual Studio 中开始使用 Copilot Free 了.它现在已经可用了,我 ...