Docker详解,7分钟学会

news2025/7/19 11:54:33

大家好,欢迎来到停止重构的频道。

本期我们讨论docker

docker的好处是可以隔离环境,多容器间环境隔离互不影响。

而且得益于优秀的镜像机制,可以用于手工快速部署

我们按这样的顺序展开讨论:

1、  docker的工作原理

2、  docker镜像 

3、  docker容器 

4、  容器创建的方式

5、  容器创建命令详解 

docker的工作原理

docker的整体分为四个部分:远程镜像仓库、本地镜像、本地容器、docker软件。

远程镜像仓库是云端的镜像仓库,供用户上传、下载需要的镜像,默认是dockerhub,也可以换成其他仓库。

本地镜像是下载好的镜像,或自己打包好的镜像,镜像可以理解为容器的模板,也可以理解为电脑安装操作系统的光盘

本地容器是真正运行的实例,容器是根据镜像创建的,容器被创建后,即可跟Linux系统一样独立使用。

docker软件是连接以上三个部分的基座,也是运行容器的引擎。docker是可以跨平台安装的,官方有详细的安装步骤说明,包括基于Linux、Unix的系统、Windows等。

所以一般相同镜像可以跨平台使用,其中Windows的docker存在一些限制。

Docker镜像

镜像可以理解为电脑安装操作系统的光盘,是只读的,不能对镜像本身进行修改。

镜像是多种多样的,Linux镜像可以在Linux、windows的docker中使用,windows镜像只能在windows的docker中使用。

docker镜像名称是两部分组成的,用冒号隔开。一是镜像名、二是tag版本。如果忽略tag版本,则会默认选择latest版本。

值得一提的是,不同tag版本的镜像是完全独立的,技术上是不依赖关联的,更多是业务上的关联。

如mysql的5.7、8.0版本都有独立的tag版本,DockerHub等镜像仓库有镜像的使用说明和tag列表。

镜像相关的命令如图所示:包括查看本地镜像、搜索远程镜像仓库、 上传/下载镜像、打包/导入镜像文件等。

Docker容器

容器是真正的运行实例,容器可以隔离网络、文件、进程等环境,一个容器是一个沙盒隔离环境。

docker容器跟虚拟机技术是不同的

docker容器是基于系统内核的相关容器技术,不需要独立分配物理资源,不需要启动完整的操作系统,所以docker容器启动速度更快、更轻量

但是多个容器是共用宿主机的内存、CPU等物理资源的,可能会出现互相抢占物理资源的情况

容器是根据镜像创建的,容器被创建后,即可像操作Linux系统一样使用。

容器中被修改的文件 不会同步更新到原来的镜像中,也不会影响通过相同镜像创建的其他容器。

如果需要将修改后的容器放到别的机器中运行。

一般的做法是:先将容器打包成镜像,然后将镜像上传到远程仓库或打包成镜像文件,之后在目标机器中下载或导入镜像,最后再根据此镜像创建容器。

关于容器的相关命令如图所示:如启动关闭容器、将容器打包成镜像等。

这里值得一题的是 ,一些容器设置是无法在容器创建后修改的,所以在容器创建时先弄好。

容器创建的方式

创建Docker容器有两种方式:一是通过命令直接创建,二是通过dockerfile创建。

两者都是基于docker镜像创建的

但两者的区别是:通过命令直接创建需要完整的镜像dockerfile则可以使用不完整的镜像。

docker会根据dockerfile中的脚本指令进一步完善容器 ,诸如下载文件、修改设置等,执行完dockerfile的指令才算是容器创建完成。

dockerfile更灵活一些,但是容器创建的时间更长、稳定性也不佳,特别是需要下载文件但网络不好的情况。

我们偏向使用命令直接创建容器,特别是项目交付、快速部署等场景。尽管完整的镜像更大一些,几个G是常有的事情,但是这样更稳定一些。

容器创建的命令

容器创建的命令一般分为几个部分:基础参数、挂载宿主机目录、网络设置、环境变量设置、基础镜像、容器每次启动执行的命令等。

基础参数是设置容器的基础参数,如指定运行cpu、内存限制、后台启动、容器名称等。

挂载宿主机目录是将宿主机的目录映射到容器当中,容器修改该目录下的文件,会影响到宿主机的文件。

网络设置是设置容器的网络,默认情况下,容器的网络是隔离的,即容器内的127.0.0.1指向的是容器本身,而不是宿主机。

网络设置一般设置端口映射,如将宿主机的8001映射到容器的8080,当访问宿主机的8001端口时,会自动转发到该容器的8080端口。

如果确定多个容器及宿主机的程序端口不会冲突,可以设置共用宿主机的网络,这样容器内的127.0.0.1会指向宿主机,容器内的端口也不需要额外映射。

docker也提供更加复杂的多容器网络环境设置,但是不太常用,这里不作展开。

环境变量设置是设置容器内的环境变量,最常用的设置是设置时区,容器中使用常规设置环境变量的方法是不会生效的。

另外,环境变量的设置也可以简化一下功能配置,如MySQL的镜像可以通过环境变量配置初始密码。

容器每次启动执行的命令,是容器每次启动、重启后执行的命令 一般为shell指令,当命令执行完成后,容器会自动停止。

如果希望容器一直运行不退出,可以将执行的命令设置为bin/bash

如果容器需要启动多个程序,且这些程序都是后台运行的话,则一般是使用shell脚本,脚本中启动相关程序,在脚本的最后添加/bin/bash防止容器自动退出。

这里值得一提的是,容器中常规的开机启动程序的方法是不会生效的,解决方案也是通过shell脚本解决。

总结

本期介绍了docker的基础知识和常用的技术细节 ,docker的其他功能和技术细节可以在遇到具体问题时再深入学习。

docker是对单台服务器的环境处理,如果是多台服务器的容器编排,则需要额外使用容器集群编排软件。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jvm 程序计算器 程序计数器是否溢出 程序计数器是做什么的 java程序计数器会内存溢出吗 程序计数器作用与用处 jvm内存模型 jvm合集(一)

1. jvm内存模型: 内存模型: 程序计数器 堆 栈 本地方法栈 方法区 2. java代码编译为class文件,由类加载器加载到jvm,然后由解释器,jit即时编译到机器码,机器码再到cpu执行 3. 程序计数器: 是一块较小的内存…

Excel相关笔记

1、找出B列中A列没有的数据并放在C列 公式:IF(ISNA(VLOOKUP(B1,$A 1 : 1: 1:A$4,1,FALSE)),B1,“”)

索尼 toio™ 应用创意开发征文 | 如何用Python控制Q宝进行机器人擂台赛

你是否曾经想过,如果能用编程来控制真实的物体,那该有多有趣?如果能让一个小方块按照你的指令来移动、旋转、闪烁,那该有多酷?如果能让一个小方块和其他小方块互动,那该有多神奇?这些想法&#…

Jmeter系列-插件安装(5)

前言 jmeter4.0以上,如现在最新的5.2.1版本是有集成插件的只需要在官网下载 plugins-manager.jar 包,放在jmeter安装路径的lib/ext目录下即可使用:https://jmeter-plugins.org/install/Install/但并不能满足所有需求,仍然需要安装…

CSS读书笔记

——————————————精华部分—————————————— 1、选择器 (1)基本选择器: 标签选择器 body{} 类选择器 class .class名称{} ID选择器 id #id名称{} 优先级:ID选择器 > 类选择器 > 标签选择器 &am…

乐鑫 ESP-Mesh-Lite:轻松覆盖更大范围,连接更多设备

乐鑫科技 (688018.SH) 基于 Wi-Fi 协议推出了 Mesh 组网方案 ESP-Mesh-Lite,支持更多设备在更大范围内轻松联网。这一创新性的 Wi-Fi Mesh 技术通过构建灵活、可靠的物联网组网方案,使用户可以享受到快速、稳定且安全的 Wi-Fi 覆盖,不再受到设…

解耦只是一个巧合?

本文分享一篇在IJCAI2023看到的文章:Overlooked Implications of the Reconstruction Loss for VAE Disentanglement 首先回顾下VAE,其loss函数有两项,一项是重构误差,另一项是正则项: L r e c ( x , x ^ ) E q ϕ (…

GPU编程(基于Python和CUDA)(四)——Mandelbort集

系列文章目录 GPU编程(基于Python和CUDA)(一)——零基础安装pycuda GPU编程(基于Python和CUDA)(二)——显示GPU信息 GPU编程(基于Python和CUDA)(…

excel功能区(ribbonx)编程笔记--3 editbox与状态按钮togglebutton控件

从上次发布编程笔记2后,反响还不错,短短一个星期,访问量就达到了1500,说明虽然这个只是有写古老,但是再实际的工作中,excel的编程功能还是有或多人关注的,还不是很小众,比如我就是平时的统计就是使用excle,为了更好的实现自动统计,会添加部分vba代码到里面,就像我的…

直播|DITA内容发布工具解析 - 问答总结

9月6日,我们进行了一场名为“DITA内容发布工具解析”的直播。通过直播,大家了解到: DITA-OT简介 默认输出效果 定制以后输出效果 发布过程与样式定制 在问答环节,大家进行了热烈沟通。我将几个大家关心的问题和答复总结如下&…

图像文件的操作MATLAB基础函数使用

简介 MATLAB中的图像处理工具箱体统了一套全方位的标准算法和图形工具,用于进行图像处理、分析、可视化和算法开发。这里仅仅对常用的基础函数做个使用介绍。 查询图像文件的信息 使用如下函数 imfinfo(filename,fmt) 函数imfinfo返回一个结构体的info&#xff…

27.方向标

题目 描述 一位木匠收到了一个木制指示牌的订单。每块木板必须与前一块垂直对齐,要么与前一个箭头的基部对齐,要么与相反的一侧对齐,在那里用特制的螺钉固定。两块木板必须重叠。木匠将设计师发送的草图编码成了一个整数序列,但…

达梦数据库MAIN表空间导致磁盘满问题的处理和总结

前言 在达梦数据库使用中,建议对数据库表空间使用进行规划,业务用户创建单独的表空间使用。 如果不创建单独的用户表空间会遇到什么问题呢?通过下面的问题和测试说明合理的表空间规划是有必要的。 问题 某开发项目组使用DM8 1-2-192 版本。…

Window安装Node.js npm appium Appium Desktop

Window安装Node.js npm appium appium Desktop 1.安装nodejs 参考链接: https://blog.csdn.net/weixin_42064877/article/details/131610918 1)打开浏览器,并前往 Node.js 官网 https://nodejs.org/ ↗。 2)在首页中,您可以看到当前 Node.…

解决防火墙导致虚拟机不能ping通宿主机的问题

今天,无缘无故的,虚拟机突然用不了,网络连上不了,一番折腾翻找,最后才发现,是因为虚拟机ping不同宿主主机了,连网关都ping不通了,但是,宿主主机却可以ping通虚拟机 。 最…

工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管…

Netty(一)NIO-基础

Netty 分布式根基于网络编程,Netty恰是java网络编程的王者,致力于高性能编程。 前置 适用于网络开发,服务器开发。多线程,线程池,maven。 大纲 NIO编程(Selector,ByteBuffer和Channel&…

即拼七人拼团系统开发模式,如何助力电商平台提升产品销量和复购率?

对于电商平台来说,如何提高产品销量和复购率,是每个其他都在面临的最大挑战。而应对这个挑战最好的方法就是结合一款合适的商业模式,一个姓王的客户就运用即拼七人拼团模式,成功提升了产品销量和复购率。 这个王客户运营的电商平台…

全栈自主可控!移动云边缘智能小站EIS新突破

8月中旬,移动云为福建泉州惠安某储能制造公司打造的边缘智能小站EIS正式上线。该项目是中国移动首个正式上线的软硬一体、全栈自主可控的超融合边缘智能小站项目。 边缘智能小站(EIS,Edge Intelligence Site)是基于移动云边缘超融…