Docker 容器化技术:构建高效、可移植的开发环境和部署流程|Docker 三要素

news2024/11/25 15:51:27

镜像、容器、镜像仓库是 Docker 中最核心的三个概念,组成了 Docker 的整个生命周期。

(镜像、容器、镜像仓库三者运行关系)

1、镜像

镜像是 Docker 的核心元素质疑,作为容器运行的基础,Docker Hub 官网提供了庞大的镜像库,便于使用者下载使用。在运行容器之前,必须在本地拥有相应的镜像。如果本地镜像不存在,系统将从默认的镜像仓库中下载,通过是 Docker Hub 公共服务器,也可以切换到国内或者公司搭建的仓库。但是因为网络等因素,直接从官网拉取镜像会比较慢,可以通过国内的代理进行加速。当今主流的云服务提供商都可以提供镜像仓库服务,我一直比较经常使用的是阿里云的仓库。

在拉取镜像的时候,只要给出镜像的名字和标签就可以从官方仓库中找到对应的镜像。其中命令格式如下:

docker image pull <repository>:<tag>

但是在拉取的过程中,要注意:

  • 没有在仓库名称侯指定 tag,则默认拉全 latest 的镜像
  • 从第三方或者自建的私有仓库拉取镜像,是需要按照下面的命令来拉取
docker pull registry.cn-alibaba.aliyun.com/image:tag1
docker pull 192.196.163.66:8080/image

接下来我们看镜像创建的方法:

  • 基于已有的容器进行镜像创建,使用 commit
  • 基于本地的模板导入镜像,使用 import
  • 基于 Dockerfile 创建镜像,使用 build

但是一般在我们实际研发的过程中,都是使用 Dockerfile 的方式来创建镜像。

Dockerfile 是一个文本格式的配置文件,它用给定的指令描述了基于一个父镜像创建新镜像的过程。关于 Dockerfile 的具体格式这里就不再赘述了,各位可以自行查阅相关教程。

2、容器

容器是镜像的运行实例,但是它本身与镜像是不同的,容器有着额外的可写层。相比于虚拟机,容器更快、更加轻量级,都是共享所在宿主机的操作系统和内核,而不是运行在一个完整的操作系统上。

可以将 Docker 容器视为独立运行的一个或者一组应用,以及它们所需要的运行环境。就像从虚拟机模板启动虚拟机一样,用户也可以从单个镜像启动一个或者多个容器。实际上,一个容器实例就是宿主机上的一个独立进程。每次执行 docker run 命令,都会创建一个 Docker 容器进程,它具有独立的文件系统、网络和进程树。用 docker ps 和 docker container ls 命令是可以查询正在运行的容器的。

那容器应该怎么创建呢?一般有两种创建方式:

  • 用 docker container run 命令
  • 用 docker container create 命令

两种创建方式的区别在于,用 create 命令创建的容器是停止的状态,需要用 docker container start 命令来启动容器。

Docker 容器启动参数

容器是整个 Docker 技术的核心,create 和 run 命令支持的选项又都十分复杂,每个选项都有特定的应用场景和用途,是需要使用者不断地学习和实践的,一般选项包括以下几类,这里我就不多做详细的参数介绍,各位可自行查阅相关资料。

  • 容器运行模式相关的选项
  • 容器环境配置相关的选项
  • 容器资源限制和安全保护相关的选项

Docker 容器的 CPU、内容资源的限制

使用 Docker 运行容器时,默认情况下未对容器进行硬件资源限制。然而,当在一台主机上运行数百个容器时,尽管它们相互隔离,但却共享相同的 CPU、内存和磁盘资源。若不限制容器资源使用,可能导致容器之间相互干扰,造成资源不公平分配,甚至使主机和集群资源耗尽,导致服务不可用。

作为容器的管理者,Docker 提供了资源控制功能。类似于使用内核的 namespace 实现容器间的隔离,Docker 通过内核的 cgroups 实现容器的资源限制,包括 CPU、内存和磁盘。这些功能基本涵盖了常见的资源配额和使用量控制。

在 Linux 系统上,Docker 通过内存控制避免内存异常(OOM Exception)。当内核检测到宿主机内存不足时,会引发 OOM Exception,并启动 killing 进程以终止某些进程。为了确保 Docker 守护进程不会被终止,Docker 调整了其 OOM_Odj 优先级,但未调整容器的优先级。系统中的每个进程都有一个 OOM_Score 得分,较高的 OOM_Odj 优先级对应较高的 OOM_Score 得分,系统会优先终止 OOM_Score 最高的进程。在启动容器时,可以通过指定参数 --oom-kill-disable=true 禁止特定重要容器被 OOM Exception 终止。

进入运行中的 Docker 容器

创建并启动容器的时候,一般都会加上 -d 的参数,这样容器启动后就会进入后台,用户无法看到容器中的信息,也无法进行操作,但是可以通过 docker exec 命令进入容器中查看容器运行情况或者执行某种操作行为。

容器端口映射

除了通过网络访问,Docker 还可以提供两个比较便捷的功能来满足服务访问的基本需求:

  • 允许映射容器内应用的服务端口到本地宿主机
  • 通过互联机制实现多个容器间通过容器名来快捷访问

在启动容器的时候,如果不指定对应参数,在容器外部都是无法通用网络来访问容器内的网络应用和服务的。如果容器中运行的一些网络应用或者服务都需要让外部能够访问,一般在会在启动参数中加上 -p 来指定端口映射,这样就可以实现外部访问容器内指定的端口。关于端口映射可以用 docker ps 或者 docker port 来查看端口映射信息。

容器之间互相访问

容器的互联是一种让多个容器中应用进行快速交互的方式,会在源容器和接收容器之间建立连接关系。接收容器可以通过容器名快速访问到源容器,而不用指定具体的 IP 地址,用 --link 参数可以让容器之间安全地进行交互。

3、镜像仓库

镜像仓库是存放镜像的中心,Docker 通过注册服务器来管理多个仓库,每个仓库包含多个镜像,每个镜像有不同的标签。仓库分为公有和私有,Docker Hub 是官方维护的公有仓库,拥有超过 10 万个镜像。用户可免费使用公有仓库或购买私有仓库。

为加快下载速度,可配置镜像加速器,常选用国内云服务商提供的镜像仓库服务。以阿里云为例,需注册账号,登录后在弹性计算→容器镜像服务→镜像加速器处获取加速器地址,并配置 Docker daemon 文件后重启 Docker 服务。

为了加速镜像下载,一般会配置镜像加速器。上传到 Docker Hub 的镜像可以被任何人访问,虽然可以用私有仓库,但不是免费的,或者某些项目环境无法访问互联网,所以我们有时需要搭建本地仓库来管理自己的私有镜像仓库。本地仓库的安装非常简单,Docker 已经将仓库开源了,我们直接下载安装即可。

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

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

相关文章

第十五届蓝桥杯(Web 应用开发)模拟赛 3 期-大学组(被题目描述坑惨了)

目录 1.创意广告牌 2.原子化css 3.神秘咒语 4.朋友圈 5.美食蛋白揭秘 6.营业状态变更 7.小说阅读器 8.冰岛人 9.这是一个”浏览器“ 10.趣味加密解密 总结 1.创意广告牌 这个题目不多说了&#xff0c;只要知道这些css应该都能写出来&#xff0c;不会的平时多查查文…

突破界限的力量:探索Facebook如何打破国界、文化和语言的障碍

在当今全球化的时代&#xff0c;社交媒体已经成为人们生活中不可或缺的一部分&#xff0c;而Facebook作为其中的先驱者&#xff0c;更是在打破国界、文化和语言障碍方面发挥着举足轻重的作用。它不仅成为了人们交流、连接的重要平台&#xff0c;更是为不同国家、不同文化、不同…

固态存储是未来|浅析SSD架构的演进与创新技术-1

常见的SSD架构中&#xff0c;包括了SSD控制器、NAND颗粒、DRAM颗粒三大组件&#xff0c;SSD控制器的固件需要兼顾坏块管理、ECC纠错、垃圾回收GC、磨损均衡WL、NAND die介质管理、缓存交互等等。 随着时代的发展&#xff0c;SSD架构&#xff0c;也不断有新的挑战和需求。基于小…

抓取Instagram数据:Fizzler库带您进入C#爬虫程序的世界

引言 在当今数字化的世界中&#xff0c;数据是无价之宝。社交媒体平台如Instagram成为了用户分享照片、视频和故事的热门场所。作为开发人员&#xff0c;我们可以利用爬虫技术来抓取这些平台上的数据&#xff0c;进行分析、挖掘和应用。本文将介绍如何使用C#编写一个简单的Ins…

一条 sql 语句可能导致的表锁和行锁以及死锁检测

锁 MDL 当对一个表做增删改查操作的时候&#xff0c;加 MDL 读锁&#xff1b;当要对表做结构变更操作的时候&#xff0c;加 MDL 写锁 ALTER TABLE tbl_name NOWAIT add column ... ALTER TABLE tbl_name WAIT N add column ... …

小程序bindtap 和 catchtap 的区别以及如何使用

Hello大家好&#xff01;我是咕噜铁蛋&#xff01;我今天要和大家聊一聊小程序开发中的一个常见问题&#xff1a;bindtap 和 catchtap 的区别以及如何使用。这两个在小程序开发中经常被提及的事件绑定方式&#xff0c;它们之间到底有什么不同呢&#xff1f;让我们一起来深入探讨…

Prometheus监控Mysql数据库在Grafana展示

未安装prometheus和Grafana可以参考这个博客操作 Docker安装Prometheus监控-CSDN博客 Windows版本数据库 一、在数据库服务器安装mysqld-exporter 下载mysqld-exporter文件 Releases prometheus/mysqld_exporter GitHub 二、配置mysqld-exporter文件 1、解压进入mysqld…

微服务架构中的拆分粒度决策

大家好&#xff01;今天我来和大家分享一下微服务架构中的拆分粒度决策问题&#xff0c;希望能帮助大家更好地理解和应用微服务架构&#xff01; 问题背景 在设计和实施微服务架构时&#xff0c;拆分粒度的决策非常重要。拆分得太细&#xff0c;会增加系统间通信和部署的复杂性…

基于Springboot的驾校预约学习系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的驾校预约学习系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

12、设计模式之代理模式(Proxy)

一、什么是代理模式 代理模式属于结构型设计模式。为其他对象提供一种代理以控制对这个对象的访问。 在某些情况下&#xff0c;一个对象不适合或者不能直接引用另一个对象&#xff0c;而代理对象可以在客户端和目标对象之间起到中介的作用。 二、分类 代理模式分为三类&#…

css3实现3D立方体旋转特效源码

源码介绍 CSS3自动旋转正方体3D特效是一款基于css3 keyframes属性制作的图片相册自动旋转立方体特效 效果展示 下载地址 css3实现3D立方体旋转特效代码

Go——下划线

"_"是特殊标识符&#xff0c;用来忽略结果。 1. 下划线在import中 在golang中&#xff0c;import的作用是导入其他package。 import下划线的作用&#xff1a;当导入一个包时&#xff0c;该包下的文件里所有init()函数都会被执行&#xff0c;然而&#xff0c;有些时候…

Spring Boot如何自定义自己的Starter组件?

一、为什么要自定义starter 在我们的日常开发工作中&#xff0c;经常会有一些独立于业务之外的配置模块&#xff0c;我们经常将其放到一个特定的 包下&#xff0c;然后如果另一个工程需要复用这块功能的时候&#xff0c;需要将代码硬拷贝到另一个工程&#xff0c;重新集成一 遍…

SQLiteC/C++接口详细介绍之sqlite3类(三)

上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;二&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;四&#xff09; 6.sqlite3_create_module与sqlite3_create_module_v2函数 用于创建自定义SQLite模块。创建自定义模块可以让S…

ChatGPT无法登录,提示我们检测到可疑的登录行为,将阻止进一步的尝试。请与管理员联系

1. 问题描述 之前本来已经连续稳定使用ChatGPT好几个月了&#xff0c;但是今天尝试登录ChatGPT的时候&#xff0c;却提示&#xff1a;我们检测到可疑的登录行为&#xff0c;将阻止进一步的尝试。请与管理员联系。 此外&#xff0c;我还在网上看到了一些相关的消息&#xff0c;…

Kafka的基本介绍以及扩展

文章目录 基本操作新增Topic查询Topic修改Topic删除Topic 生产者和消费者创建生产者创建消费者 Broker扩展Producer扩展Topic、Partition、Message扩展存储策略容错机制 基本操作 新增Topic 指定两个分区&#xff0c;两个副本&#xff0c;replication不能大于集群中的broker数…

HarmonyOS预览功能报错:[webpack-cli] SyntaxError: Unexpected end of JSON input

harmonyos预览功能报错 在使用DevEco Studio写页面&#xff0c;进行预览的时候报错&#xff1a; [Compile Result] [webpack-cli] SyntaxError: Unexpected end of JSON input [Compile Result] at JSON.parse (<anonymous>) [Compile Result] at updateCached…

Fair Data Exchange:区块链实现的原子式公平数据交换

1. 引言 2024年斯坦福大学和a16z crypto research团队 论文 Atomic and Fair Data Exchange via Blockchain 中&#xff0c;概述了一种构建&#xff08;包含过期EIP-4844 blobs的&#xff09;fair data-markets的协议。该论文源自a16z crypto的暑期实习计划&#xff0c;与四名…

第四弹:Flutter图形渲染性能

目标&#xff1a; 1&#xff09;Flutter图形渲染性能能够媲美原生&#xff1f; 2&#xff09;Flutter性能优于React Native? 一、Flutter图形渲染原理 1.1 Flutter图形渲染原理 Flutter直接调用Skia 1&#xff09;Flutter将一帧录制成SkPicture&#xff08;skp&#xff…

2023 收入最高的十大编程语言

本期共享的是 —— 地球上目前已知超过 200 种可用的编程语言&#xff0c;了解哪些语言在 2023 为开发者提供更高的薪水至关重要。 过去一年里&#xff0c;我分析了来自地球各地超过 1000 万个开发职位空缺&#xff0c;辅助我们了解市场&#xff0c;以及人气最高和收入最高的语…