Docker入门教程

文章目录

  • 前言
  • 一、什么是Docker?
  • 二、为什么选择Docker
  • 三、Docker的基本组成
  • 四、Docker的安装
  • 五、Docker的常用命令
  • 六、DockerFile
    • 什么是DockerFile?
  • 六、Docker volume
    • 什么是Docker volume?
    • 常用命令
  • 总结


前言

随着云计算和微服务架构的兴起,软件开发和部署的方式正在经历一场革命。容器技术作为这场变革的关键驱动力之一,已经彻底改变了我们构建、部署和运行应用的方式。在众多容器技术中,Docker以其独特的优势和广泛的应用,成为业界的佼佼者。

Docker是一个开源的应用容器引擎,它允许开发者将应用及其依赖环境打包到一个轻量级、可移植的容器中,从而实现快速、一致地部署到任何流行的Linux机器上。Docker的核心优势在于其轻量级、快速部署、易于管理以及高度的可移植性。


一、什么是Docker?

2013年,Docker开源!

Docker是基于容器技术的轻量级虚拟化解决方案;

Docker 是一个用于开发、交付和运行应用程序的开放平台。 它使您能够将应用程序与基础架构分开,以便 您可以快速交付软件。使用Docker,您可以管理您的基础架构 以与管理应用程序相同的方式。通过利用 Docker 的 用于交付、测试和部署代码的方法,您可以 显著减少编写代码和在生产环境中运行代码之间的延迟。

二、为什么选择Docker

工作中大家一定遇到过这样的问题,我们开发环境、测试环境、生产环境需要保持一致性,传统方式需要我们花费大量的时间去维护,特别是涉及版本更新时,可能就会导致服务不可使用,后期我们维护多个环境的一致性就很繁琐;
在这里插入图片描述
在使用Docker之前,我们一般使用虚拟化技术进行维护,而不是一个个单独去维护;
虚拟化技术很多,如我们最常使用的VM,但是VM也有很多缺点,虚拟机的缺点:资源占用多,冗余步骤多,启动慢等;
这主要是由VM这类虚拟化技术的实现方式决定的,它通过软件模拟的具有完整、硬件、系统功能、运行在一个完全隔离环境中的完整计算机系统;而Docker是基于容器技术实现的虚拟化;

Docker与VM技术相比:

1.传统的虚拟机,可以虚拟出一条硬件,运行一个完整的操作系统,在这个操作系统上安装和运行所需的软件,容器内的应用可以直接运行在宿主 主机的内核中,容器没有自己的内核,也不用虚拟硬件,因此更加轻便;
2.Docker有着比虚拟机更少的抽象层,Docker利用的是宿主机的内核,vm需要是Guest OS。
3.每个容器是相互隔离的,每个容器内都有属于自己的文件系统,之间互不影响。
4.Docker在启动速度、性能、存储、可迁移性等多个方面具有较大优势,但是基于容器的虚拟化技术不会完全替代传统虚拟化技术,他们各有优势,只是在不同应用领域和场景的差别;
在这里插入图片描述

三、Docker的基本组成

下图是Docker的基本组成:
在这里插入图片描述
Docker 使用客户端-服务器体系结构(C/S架构)。
Docker 客户端与 Docker 守护程序,它负责构建、运行和 分发 Docker 容器。
Docker 客户端和守护程序可以 在同一系统上运行,也可以将 Docker 客户端连接到远程 Docker 守护 进程。

镜像(Image):

Docker镜像就想一个模板,与VM类比的理解,Docker镜像有点像我们使用VM时安装的系统镜像,我们可以通过这个模板来创建容器服务,ubuntu镜像==>ubuntu容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器(container):

Docker是基于镜像创建的实例,利用容器技术,独立运行一个或者一组应用 通过镜像来创建启动,停止,删除,基本命令!

仓库(registry):

仓库就是存放 镜像(image)的地方;
仓库又可以分为 公有仓库和私有仓库;

四、Docker的安装

Docker的目前支持Macos、Windows、Linux等不同系统,安装方法大致类似,这里不做赘述,大家可以通过如下链接进行安装

https://docs.docker.com/get-docker/

在这里插入图片描述

五、Docker的常用命令

5.1 帮助命令

1. docker version        # 显示docker的版本信息   
2. docker info              #显示docker的系统信息,包括镜像和容器的数量    
3. docker 命令 --help         # 帮助命令

5.2 镜像命令

1.docker run (镜像名)# 加载镜像,创建容器
2.docker images -a   # 显示所有镜像
3.docker search(要搜索镜像) #搜索镜像
4.docker pull(要下载镜像) #从registry上下载镜像
5.docker rmi -f (镜像id)  #删除对应id的镜像
6.docker commit -m=“xxx“ 名称  #通过容器创建新的镜像

5.3 容器命令

1.docker ps -a   #查看容器列表, 列出所有的容器
2.exit        # 容器直接停止,并退出
3.ctrl+P+Q    # 容器不停止,退出
4.docker rm 容器id                    # 删除容器(不能删除正在运行的容器)如果要强制删除:docker rm -f 容器id
5.docker start 容器id        # 启动容器
6.docker restart 容器id    # 重启容器
7.docker stop 容器id        # 停止当前正在运行的容器
8.docker kill 容器id        # 强制停止当前容器
9.docker exec -it 容器id    #进入当前正在运行的容器

六、DockerFile

什么是DockerFile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

编写规则

  • 文件名必须是 Dockerfile Dockerfile中所用的所有文件一定要和Dockerfile文件在同一级父目录下
  • Dockerfile中相对路径默认都是Dockerfile所在的目录
  • Dockerfile中一能写到一行的指令,一定要写到一行,因为每条指令都被视为一层,层多了执行效率就慢
  • Dockerfile中指令大小写不敏感,但指令都用大写(约定俗成)
  • Dockerfile 非注释行第一行必须是 FROM
  • Dockerfile 工作空间目录下支持隐藏文件(.dockeringore),类似于git的.gitingore

当我们运行docker build命令时,docker 会为 dockerfile 中的每条指令构建一层。这些图像层是只读层。当我们运行docker run命令时,docker 会构建容器层,它们是读写层。
DockerFile中的指令会按照顺序执行,每条指令都会创建一个新的镜像层;

指令执行: Dockerfile 中的每条指令,如 FROM, RUN, COPY, ADD 等,都会创建一个新的层。

层的叠加: 这些层是只读的,并且是不可变的。当执行新的指令时,Docker 会在现有的镜像层之上添加新的层。

缓存机制: Docker 会缓存每一层的构建结果,如果后续的 Dockerfile 指令没有变化,Docker 会重用之前的层,这样可以节省大量的构建时间。
在这里插入图片描述

常用指令详解
在这里插入图片描述

解析一个DockerFile文件,构建了一个简单的Nginx服务器

# 使用官方nginx镜像作为基础镜像
FROM nginx:latest# 设置工作目录为容器内部的/var/www/html
WORKDIR /var/www/html# 将当前目录下的所有文件复制到工作目录中
COPY . .# 移除默认的nginx欢迎页面
RUN rm -f /etc/nginx/sites-enabled/default# 复制自定义的nginx配置文件
COPY nginx.conf /etc/nginx/conf.d/default.conf# 使自定义的index.html文件生效
RUN rm /var/www/html/index.html
COPY index.html /var/www/html/# 声明容器运行时监听的端口
EXPOSE 80# 启动nginx服务
CMD ["nginx", "-g", "daemon off;"]

这个Dockerfile的步骤解释如下:

FROM nginx:latest:指定基础镜像为nginx的最新版本。
WORKDIR /var/www/html:设置容器内的当前工作目录。
COPY . .:将当前目录下的所有文件复制到容器的工作目录。
RUN rm -f /etc/nginx/sites-enabled/default:删除nginx的默认配置文件。
COPY nginx.conf /etc/nginx/conf.d/default.conf:复制自定义的nginx配置文件到容器。
RUN rm /var/www/html/index.html:删除工作目录中的默认index.html文件。
COPY index.html /var/www/html/:复制自定义的index.html文件到容器的工作目录。
EXPOSE 80:声明容器需要暴露的端口,这里是80。
CMD [“nginx”, “-g”, “daemon off;”]:定义容器启动时执行的命令,这里启动nginx服务,并设置为前台运行。
请注意,你需要根据你的实际需求调整Dockerfile的内容。例如,如果你需要安装其他软件或服务,或者需要配置不同的环境变量,你需要添加相应的RUN指令来实现。此外,确保你的项目目录中包含nginx.conf和index.html文件,或者根据你的项目结构进行相应的调整。

六、Docker volume

什么是Docker volume?

Docker镜像被存储在一系列的只读层中。当我们创建一个容器时,Docker会读取镜像(只读),并在其顶部添加一层读写层。如果正在运行中的容器修改了现有文件,该文件将会被拷贝出底层的只读层,放到最顶层的读写层中。读写层中原来的旧版本文件(未被更改过的文件)仍然存在于镜像中。

所以当Docker容器被删除后,再基于原来的镜像创建容器时,将创建一个没有任何数据更改的容器,在之前那个容器中的数据更改会丢失掉。只读层和读写层的组合被Docker称为联合文件系统(Union File System)。

为了能够持久化这些更改过的数据,并且能够很容易实现容器间共享数据,Docker提出了Volume的概念。Volume是外部默认的联合文件系统或者是存在于宿主文件系统中正常的文件或文件夹。

常用命令

1. docker volume create <volume_name>   #创建 Volume
2. docker volume ls                     #列出所有 Volume
3. docker volume inspect <volume_name>   #查看 Volume 详细信息
4. docker volume rm <volume_name>        #删除 Volume
5. docker run -d -v <volume_name>:<container_path> <image_name>   #使用 Volume 运行容器
6. docker run --rm -v <volume_name>:/data -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /data    #导出 Volume 内容到归档文件
7. docker run --rm -v <volume_name>:/data -v $(pwd):/backup ubuntu bash -c "tar xvf /backup/backup.tar -C /data"  #从归档文件导入到 Volume
8. docker system df --volumes   #查看 Volume 的使用情况
9. docker volume rm $(docker volume ls -q -f dangling=true)    #清理 Volume 的未使用空间

总结

通过本文,给大家介绍了Docker的优势、基本原理、基本使用方法,dockerfile、docker volume等内容,帮助大家快速了解docker技术,大家需要在工作中多使用增进对docker的理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/344170.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wireshark 标记自己想要的数据包

1:点击视图 2:点击视图-着色规则 点击新增一行,双击名称-进行编辑 过滤器规则-编辑自己想要看到的 点击前景-选择凸出显示颜色 点击背景--选择凸出显示颜色 点击确定按钮

苹果手机微信如何直接打印文件

在快节奏的工作和生活中&#xff0c;打印文件的需求无处不在。但你是否曾经遇到过这样的困扰&#xff1a;打印店价格高昂&#xff0c;让你望而却步&#xff1f;今天&#xff0c;我要给大家介绍一款神奇的微信小程序——琢贝云打印&#xff0c;让你的苹果手机微信直接变身移动打…

45-1 waf绕过 - 文件上传绕过WAF方法

环境准备: 43-5 waf绕过 - 安全狗简介及安装-CSDN博客然后安装dvwa靶场:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客打开dvwa靶场,先将靶场的安全等级调低,然后切换到文件上传 一、符号变异 在PHP中,由于其弱类型特性,有时候仅有一…

计算机网络 —— 网络层(子网掩码和子网划分)

计算机网络 —— 网络层&#xff08;子网掩码和子网划分&#xff09; 网络地址转换NAT子网掩码和子网划分举个例子第一步&#xff1a;看类型第二步&#xff1a;从主机号开始比对第三步&#xff1a;去头去尾 我们今天来看子网掩码和子网划分&#xff1a; 网络地址转换NAT 网络…

DDei在线设计器-DDeiCore-布局插件

DDei-Core-布局 如需了解详细的API教程以及参数说明&#xff0c;请参考DDei文档 标准布局 经典的框架结构布局&#xff0c;包含了顶部菜单栏、控件工具项、画布、属性面板和底部工具栏等功能面板&#xff0c;通过插件配置可以调整每个部分的顺序和内容。 效果截图 使用方式…

贝锐蒲公英异地组网:降低建筑工地远程视频监控成本、简化运维

中联建设集团股份有限公司是一家建筑行业的施工单位&#xff0c;专注于建筑施工&#xff0c;业务涉及市政公用工程施工总承包、水利水电工程施工总承包、公路工程施工总承包、城市园林绿化专业承包等&#xff0c;在全国各地开展有多个建筑项目&#xff0c;并且项目时间周期可能…

基于拓扑漏洞分析的网络安全态势感知模型

漏洞态势分析是指通过获取网络系统中的漏洞信息、拓扑信息、攻击信息等&#xff0c;分析网络资产可能遭受的安全威胁以及预测攻击者利用漏洞可能发动的攻击&#xff0c;构建拓扑漏洞图&#xff0c;展示网络中可能存在的薄弱环节&#xff0c;以此来评估网络安全状态。 在网络安…

4.通用编程概念

目录 一、变量与常量1.1 变量1.2 常量 二、遮蔽三、数据类型3.1 标量类型1. 整型2. 浮点型3. 布尔类型4.字符类型 3.2 复合类型1. 元组2. 数组 四、函数五、语句和表达式六、函数的返回值 一、变量与常量 1.1 变量 在Rust中默认的变量是不可变的&#xff0c;如果修改其值会导致…

Python 如何判断一组数呈上升还是下降趋势

在数据分析和统计处理中&#xff0c;我们经常需要判断一组数的趋势是上升还是下降。这在金融市场分析、销售数据监控以及科学研究中都十分常见。本文将介绍如何使用Python来判断一组数的趋势&#xff0c;并结合实际案例进行详细阐述。 一、基本方法 判断一组数的趋势主要有以…

Kafka监控系统efak的安装

下载地址Kafka Eaglehttp://download.kafka-eagle.org/下载地址连接不稳定&#xff0c;可以多次尝试直到成功连接下载 1.解压安装包并重命名 tar -zxvf kafka-eagle-bin-3.0.1.tar.gz 查看到解压后包含一个安装包&#xff0c;再解压 tar -zxvf efak-web-3.0.1-bin.tar.gz 移…

AI-WEB-1 vulnhub靶场

AI-WEB-1 端口扫描 仅开放80端口 访问80端口 啥也没有 目录扫描 查看robots.txt 发现两个新目录 Disallow: /m3diNf0/ Disallow: /se3reTdir777/uploads/全都无权限访问 加入路径后再次扫描目录 发现/m3diNf0/目录下存在info.php&#xff0c;/se3reTdir777/目录下存在ind…

ChatGPT3.5和ChatGPT4.0、ChatGPT4o对比

一、ChatGPT3.5、ChatGPT4.0、ChatGPT4o对比 目前ChatGPT有三个主要版本&#xff0c;分别是ChatGPT3.5、ChatGPT4.0、ChatGPT4o&#xff0c;这三个版本之间有什么差异呢&#xff1f; 对比项ChatGPT3.5ChatGPT4.0ChatGPT4o参数数量1750亿约1万亿未公开输入文本文本、图片文本、…

【栈】736. Lisp 语法解析

本文涉及知识点 栈 LeetCode736. Lisp 语法解析 给你一个类似 Lisp 语句的字符串表达式 expression&#xff0c;求出其计算结果。 表达式语法如下所示: 表达式可以为整数&#xff0c;let 表达式&#xff0c;add 表达式&#xff0c;mult 表达式&#xff0c;或赋值的变量。表达…

【计算视觉】学习计算机视觉你不得不膜拜的CVPR大神:何凯明

目录 第一章&#xff1a;CVPR——计算机视觉的终极擂台 第二章&#xff1a;何凯明——计算机视觉领域的耀眼星辰 第三章&#xff1a;高引用论文——计算机视觉研究的璀璨星辰 第四章&#xff1a;何凯明的CVPR论文——深度学习的探索之旅 第五章&#xff1a;结语——向何凯…

【学术小白成长之路】01三方演化博弈(基于复制动态方程) -基础概念与模型构建

1.演化博弈基础知识 经典博弈论起源于1944年Von Neumann和Morgenstern合著的《博弈论与经济学行为》&#xff0c;是研究理性决策者之间竞争和合作关系的数学方法。 博弈论主要研究完全理性的博弈个体为实现利益最大化而做的策略选择&#xff0c;在过去几十年取得了极大发展&am…

网页音频提取在线工具有哪些 网页音频提取在线工具下载

别再到处去借会员账号啦。教你一招&#xff0c;无视版权和地区限制&#xff0c;直接下载网页中的音频文件。没有复杂的操作步骤&#xff0c;也不用学习任何代码。只要是网页中播放的音频文件&#xff0c;都可以把它下载到本地保存。 一、网页音频提取在线工具有哪些 市面上的…

ipables防火墙

一、Linux防火墙基础 Linux 的防火墙体系主要工作在网络层&#xff0c;针对 TCP/IP 数据包实施过滤和限制&#xff0c;属于典 型的包过滤防火墙&#xff08;或称为网络层防火墙&#xff09;。Linux 系统的防火墙体系基于内核编码实现&#xff0c; 具有非常稳定的性能和高效率&…

Day51 动态规划part10+Day52 动态规划part11

LC121买卖股票的最佳时机&#xff08;未掌握&#xff09; 暴力&#xff1a;双层循环寻找最优间距&#xff0c;每一次都确定一个起点&#xff0c;遍历剩余节点当作终点 贪心&#xff1a;取最左最小值&#xff0c;不断遍历那么得到的差值最最大值就是最大利润。 动态规划 dp数组…

IDEA2023.1.4配置springboot项目

新建“Spring Initializr”项目 勾选以下三个依赖项即可。 springboot分为代码层、资源层和测试层。 代码层 根目录&#xff1a;src/main/java 入口启动类及程序的开发目录。在这个目录下进行业务开发、创建实体层、控制器层、数据连接层等。 资源层 根目录&#xff1a;src…