Docker镜像与容器:轻松理解与实战 - 实践

news/2025/10/24 15:49:16/文章来源:https://www.cnblogs.com/ljbguanli/p/19163599

Docker镜像与容器:轻松理解与实战 - 实践

目录

理解镜像和容器

docker命令

数据卷

匿名卷

自定义路径绑定挂载

自定义镜像

Dockerfile

网络

DockerCompose

一个c++可执行程序的镜像构建


理解镜像和容器

比如平时大家安装一个MySQL,需要下载安装包,解压,还有各种环境调整依赖等等,很麻烦

依赖就是MySQL需要哪些库,哪些Linux基础命令,也就是你的软件需要什么才能启动

预设的配置:MySQL的默认配置、端口映射、数据存储在哪等等

docker就是把这些一起打包给你,你直接解压就能够用了

这些整个的打包的东西叫镜像,也就类似模板,只是一个膜具

而你实例化出来的叫容器一个实实在在的软件就是,就

最大的好处:

1.Docker会在运行容器的时侯创建一个隔离的环境,就是容器与宿主机(安装docker的机器)环境是隔离的,它有自己的独立的文件系统,网络空间和进程空间等,这就意味着,即使宿主机上有不同版本的软件,也不会影响容器内的应用

2.保证一致性,测试和生产使用同一个镜像,就能保证应用在不同的环境中的运行行为是一致的,处理了在我这能跑,在你那不行的疑问

3.一台服务器是往往不同的应用之间有冲突,源于依赖可能不同,有了隔离环境就能隔离开

4.可能部署集群,也就是一台服务器上可以部署多个MySQL,避免了资源的浪费

docker命令

注意:对于一些命令的选项如果不了解,使用--help

如果有命令太长,可以在~/.bashrc中调整命令的别名,然后source ~/.bashrc就可以让这个配置文件生效

命令的详见官方文档:https://docs.docker.com/

1.docker ps:查看当前运行的docker容器

2.docker run:创建并且允许一个容器

-d:让容器在后台允许,如果没有该选项就是前台,前台的话对于stdout等函数就会输出到你的终端,这样你就无法操作,只能ctrl+x这样就终止进程了,于是一般-d后台(守护进程)运行

--name:就是给容器起一个名字,比如mysql1,mysql2,用于区别不同的容器

-p:端口映射,宿主机端口:容器端口,比如mysql1的端口3306映射到宿主机3306,mysql2就不能映射到宿主机的3306,只能选择别的端口号

-e:设置环境变量,这个是由镜像的制作者也就是mysql的官方来弄的,怎么查,得去文档,也就是dockerhub中查询

也就是run命令的最后一行 完整的应该是mysql:5.7(带上版本号,如果没有就是默认最新)

镜像仓库也就是你docker配置的镜像源,如果调整了阿里的那就去会阿里拉取,别人做的都放在镜像仓库中,pull就是拉到本地,run先会检查本地,如果本地没有就会去远端拉,注意:拉完本地也会有

注意:images就是镜像的意思,因此docker images就是看本地镜像

这里的stop停止容器是停掉这个进程,但容器还在,这不是删除

这里的build save load后面讲解

数据卷

在容器内部没有这些命令,说明在这个容器隔离的环境中只是装了nginx运行所要求的依赖和一些系统函数库,不是每个都装,不如ll,vim就没有,所以修改文件就很困难

所以提出了数据卷

进行一个双向的映射,即做一个绑定,宿主机当中修改会同步到容器,容器修改也会同步宿主机

所有的命令都是docker开头,然后操作的是数据卷,所以是docker volume

已经删除掉了Nginx,现在利用run命令直接在创建的时候实现挂载

使用docker volume ls查询的时候可以看到有个html的数据卷

可以看到对应关系,对应到/var/lib/docker/volumes/html/_data

/var/lib/docker/volumes是数据卷默认存放的目录,html是数据卷名,_data是材料卷实际存放数据的子目录

资料卷的好处:

1.资料持久化:容器的创建和删除十分方便,但是容器删除掉了之后,容器中的素材也没了,倘若使用了数据卷就能给数据持久化,容器删除并不会影响到数据卷中的材料,当数据出现问题的时候,也可以使用数据卷备份和恢复

通过2.数据共享与迁移:多个容器能够挂载同一个数据卷完成数据共享,还能够进行跨主机迁移

匿名卷

命令docker inspect nginx,就可以查询到nginx容器的详细信息

这个是nginx之前挂载的数据卷

这个是mysql的,没有设置过,由容器运行的时候自动创建的,这种叫匿名卷,是自动生成的,往后mysql运行的数据就是存储在这里的

匿名卷产生的两种场景:

1.创建容器,当你用 -v--mount 挂载时,若只写了容器内需要挂载的路径,没指定宿主机路径或已存在的命名卷,Docker 会自动创建匿名卷并挂载到该容器路径。

2.部分官方镜像(如 MySQL、Redis、PostgreSQL)的 Dockerfile 会提前用 VOLUME 指令声明 “需要持久化的目录”,目的是避免容器删除时数据丢失。(dockerfile是一个自动化构建镜像的文件)

注意:要是容器删除了,但这个匿名卷还是在的,所以资料还是在的,跟数据卷的特性一样

但匿名卷存在命名随机,不方便开发人员直接通过命名查看和维护,所以一般应用命名卷

自定义路径绑定挂载

你完全可以指定一个本地的目录来创建自定义路径的数据卷,不使用官方默认的路径

但注意docker volume之类的命令无法使用,因为没有在默认路径中是不由docker统一管理的

但是你可以通过宿主机的ls等命令来管理

自定义镜像

构建一个c++镜像的步骤:

1.准备一个Linux的运行环境

2. 安装 C++ 编译器(如 g++、clang)和构建应用(如 make)

3.拷贝 C++ 源码或编译好的可执行文件

4.编写运行或编译运行的脚本(若需在容器内编译,可编写编译脚本;若直接运行可执行文件,可编写启动脚本)

每一层产生的文档压缩出来一个就是对于docker不是把所有产生的文件压缩成一个,

所谓的镜像就是所有的压缩包合在一起而成的

镜像的结构

镜像是分层的,把每次操作都称为一层,所以大家之前在下载的时候,每一行显示的就是下载一个文件后进行解压,后续合并在一起就是一个完整的容器了

分层打包的好处

1.便于解耦,假如镜像都运用了相同的一层,这叫基础镜像,这样每次制作镜像的时候这一层就不需要考虑了

2.如果下载的时候b镜像的前两层和之前下载的a镜像的前两层一样,就不需要再下载了,这样就不会重复

总结:分层,结构清晰,但实际的操作复杂,为了简化,你只需要描述好入口和层和基础镜像就好

这样docker就会帮我们结束整个镜像的构建

Dockerfile

简单来说就是使用Dockerfile来描述镜像结构

总结一下之前的命令:也就是你构建好了镜像的结构/层次之后(dockerfile),使用命令build可以构建一个镜像,这个镜像就可以在不同的环境当中部署你的软件,docker save是将你的本地镜像打包成一个文件给别人,load就是把别人的镜像文件下载成本地镜像

网络

否能够相互访问呢就是容器之间是相互隔离的,那容器之间

通过docker inspect 查看不同容器的详细信息

可以看到不同的容器当中ip地址不一样

一个是172.17.0.3

一个是172.17.0.4

说明是在同一个网段当中,因为他们有用一个网关(Gateway)

通过进入容器中,ping一下,发现是能够ping成功的

但是这样是有问题的,如果你当前容器stop了,别的容器启动就会分配ip地址,可能会占用你之前stop容器的ip地址,就会导致ip地址是可能会发生变换的,所以这种ip地址分配不是很好

故而产生了自定义网络

创建了一个test的自定义网络

通过ip addr查询可以看到多了一个网段172.18

容器与自定义网络相连

可以看到网络当中有两个,第一个就是创建容器的时候默认的,第二个就是test自定义网络

当然你行创建的时候使用--network test 直接与自定义网络相连,这样就不会生产默认的了

之后进入容器ping一下test中的ip地址也是成功的或者直接ping test中其他的容器名

(注意只有处于同一组网络中才能ping成功的,因为网络具有隔离性)

自定义网络的好处:

1.容器间通信便捷与灵活:可以将不同组的容器分在不同的网络组中,实现通信隔离;一个容器还允许加入多个组,实现更复杂的通信场景;可以直接使用ping 容器名来通信,不必像之前一样ping ip地址,而且ip地址也会变换

DockerCompose

就是帮你一条龙服务

当应用需要多个容器协同工作时(例如:一个 Web 应用 + 一个数据库 + 一个缓存服务),手动管理每个容器的启动顺序、网络连接、数据卷挂载 等会非常繁琐。docker-compose 解决了这个问题:

  • 用一个配置文件定义所有容器的参数(镜像、端口、网络、依赖关系等)
  • 一键启动 / 停止 / 重启所有关联容器
  • 自动处理容器间的网络连接(无需手动手动创建网络)

差不多的就是dockercompose配置文件中的信息跟run命令中的

一个c++可执行程序的镜像构建

写一个可执行程序,也就是相当于你的软件

注意这个Dockerfile文件,docker会从上往下扫,逐行执行

WORKDIR:就是再容器内部创建目录,你后续的命令如COPY main.cpp . 就是把这个文件拷贝到容器中的WORKDIR的创建的目录

CMD就是别人启动容器的时候执行的,所以这里就是直接进入容器的交互式终端,由于前面WORKDIR设置了目录,所以直接就进行该目录

注意:

1.EXPOSE就是设置端口号,如果你的程序当中绑定监听了某个端口号,你就要求EXPOSE提示使用者你可能绑定了什么端口号,这样它在未来应用容器的时候-p 宿主机端口号:镜像人绑定的端口号,使用者需要知道你绑定了哪个端口号,要进行映射

2.CMD与ENTRYPOINT的区别

CMD命令,如果使用容器的人在run命令中使用了额外的命令在末了就会覆盖掉CMD中的参数,前面的-p -v等不影响

ENTRPOINT不会覆盖,会追加在后面

现在我们容易写了一个Dockerfile,使用build构建一下镜像就许可,之后的命令就是运行

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

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

相关文章

从数据孤岛到智能洞察:构建面向未来的 Operation intelligence 体系

在数字世界持续运转的过程中,系统每时每刻都在产生海量的数据。我们把这些数据统称为 Operation Data(运营数据)。它不仅记录着系统的运行状态,更蕴藏着驱动业务增长、保障系统稳定、防范安全风险的关键线索。更重…

2025年低合金钢铸件厂家权威推荐榜单:水泵类铸件/矿山机械铸件/阀门类铸件源头厂家精选。

在竞争激烈的制造业中,一家位于镇江、深耕行业二十余年的铸钢企业,以每年超8000吨的产量和远销海外的实力,正赢得全球工业客户的广泛认可。 在当今制造业蓬勃发展的时代,低合金钢铸件因其优异的机械性能和成本效益…

oracle sql格式化

1、实用的 SQL*Plus 格式化脚本-- format.sql - SQL*Plus 格式化脚本 SET ECHO OFF SET FEEDBACK ON SET VERIFY OFF SET HEADING ON SET PAGESIZE 50 SET LINESIZE 200 SET TRIMSPOOL ON SET TAB OFF SET NULL "…

鸿蒙NEXT开发浅进阶到精通14:鸿蒙制作项目中遇到的需求问题及解决笔记05

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

oracle 数据字典应用

1、可以通过v$fixed_table 或dictionary来得到oracle中所有的数据字典 2、v$databaseSQL> select name,created,log_mode,open_mode from v$database;NAME CREATED LOG_MODE OPEN_…

devtoolset-11 工具集

目录如何安装与使用总结devtoolset-11 是 Red Hat 为 Red Hat Enterprise Linux (RHEL) 及其社区版本 CentOS 等系统提供的一套开发工具集,主要用于在不升级整个系统的情况下,获得并使用更新的编译器及开发工具。 下…

2025 长沙美食餐厅最新推荐排行榜权威发布:红记领衔榜单,协会测评认证湘味品质指南 长沙海鲜店/火锅店/小吃店/长沙宵夜推荐

引言 长沙餐饮市场的烟火气背后,是消费者对品质与地道风味的更高追求。为破解市场同质化、食品安全隐忧等问题,本次榜单由湖南省餐饮行业协会联合美团点评共同打造,参考《餐饮服务食品安全量化分级及示范店评定规范…

基于RNN循环神经网络的锂电池剩余寿命预测Matlab实现 - 教程

基于RNN循环神经网络的锂电池剩余寿命预测Matlab实现 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

2025年热门的异形工业铝型材,工业铝型材推荐TOP品牌厂家

2025年热门的异形工业铝型材,工业铝型材推荐TOP品牌厂家随着工业4.0时代的深入发展,异形工业铝型材因其轻量化、高强度、耐腐蚀和可回收等优异特性,正成为智能制造、新能源、轨道交通等高端领域的关键材料。2025年,…

day19-API+functioncalling任务回顾+langchain快速入门

虚拟环境创建 创建虚拟环境语法:conda create -n <环境名称> [选项]。 示例:创建一个名为myenv且指定Python版本为3.8的虚拟环境,命令为conda create -n myenv python=3.10。激活虚拟环境激活:使用命令conda…

在nginx中实现回源日志的功能

本文分享自天翼云开发者社区《在nginx中实现回源日志的功能》.作者:尹****聪 nginx中已经提供了访问日志的功能,主要对客户端的访问状态等进行记录,比如响应给客户端的状态码,请求uri,请求协议等。而对于回源(或者…

实用指南:web核心—HTTP

实用指南:web核心—HTTPpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

杂题记录 3

P5979 [PA 2014] Druzyny 小清新题。暴力转移是简单的,$f_i \leftarrow f_j,j-i\in[\max_{k=i+1}^j c_k,\min_{k=i+1}^j d_k] $,关于 \(\max\) 和偏序的限制不难往 cdq 优化 dp 的方向想。 然后考虑 \([l,mid]\) 向 …

2025年北京工程造价咨询公司权威推荐榜单:工程预算造价/造价咨询甲级/全过程工程咨询源头公司精选

面对北京超过620家的造价咨询企业,六成公司年收入低于5000万元的行业现状,如何精准筛选成为业主的共同挑战。 北京市住建委《2024工程造价咨询统计公报》显示,全市在册工程造价咨询企业超620家,其中甲级资质占比不…

USB 扩展网卡全方位指南:从选购到使用

在无线网络普及的当下,有线网络凭借更稳定的传输速率和更低的延迟,仍是游戏、直播、大型文件传输等场景的首选。而 USB 扩展网卡(又称 USB 千兆网卡、USB 转以太网适配器),则成为解决设备缺少网口、网口损坏或需扩…

2025年评价高的甜酒酿,醪糟甜酒酿推荐TOP品牌厂家

2025年评价高的甜酒酿,醪糟甜酒酿推荐TOP品牌厂家甜酒酿市场概览甜酒酿,又称醪糟、酒酿,是中国传统发酵米制食品,具有悠久的历史和丰富的营养价值。随着健康饮食理念的普及,2025年甜酒酿市场呈现出快速增长态势,消…

基于日志排查邮件投递失败的全过程

在维护邮件系统(如 Postfix、Exim、Sendmail 等)的过程中,邮件投递失败是再常见不过的问题。要有效定位和解决问题,必须从收到的退信或错误提示出发,一步步追踪邮件的完整投递链路和后台日志记录,准确找出失败原…

2025年口碑好的养生托玛琳床垫,保健托玛琳床垫厂家最新推荐排行榜

2025年口碑好的养生托玛琳床垫,保健托玛琳床垫厂家最新推荐排行榜随着人们对健康睡眠需求的不断提升,养生托玛琳床垫凭借其独特的保健功效成为市场新宠。托玛琳(电气石)是一种天然矿物质,能释放负离子和远红外线,…

2025年质量好的株洲水泥支撑,支撑定制定做

2025年质量好的株洲水泥支撑,支撑定制定做 行业概述 株洲作为湖南省重要的工业城市,水泥制品产业发达,尤其在高铁、桥梁、建筑等领域的水泥支撑产品需求旺盛。2025年,随着基建项目的持续推进,高质量、定制化的水…

2025年比较好的风光互补电动执行器,电动执行器厂家推荐及选择建议

2025年比较好的风光互补电动执行器,电动执行器厂家推荐及选择建议风光互补电动执行器行业概述风光互补电动执行器作为新能源与自动化控制技术的完美结合,正成为2025年工业自动化领域的重要发展方向。这类产品利用太阳…