覆盖容器的默认设置

覆盖容器都默认设置

目录

  • 覆盖网络端口
  • 设置环境变量
  • 限制容器资源使用
  • 试一试
    • 运行多个 Postgres 数据库实例
    • 在受控网络中运行 Postgres 容器
    • 管理资源
    • 在 Docker Compose 中覆盖默认的 CMD 和 ENTRYPOINT
    • 使用 docker run 覆盖默认的 CMD 和 ENTRYPOINT
  • 额外资源
  • 下一步

当 Docker 容器启动时,它会执行一个应用程序或命令。容器从镜像的配置中获取这个可执行文件(脚本或文件)。容器自带的默认设置通常运行良好,但如果需要,你可以更改这些设置。这些调整有助于让容器程序按你希望的方式运行。

例如,如果你有一个现有的数据库容器,它监听标准端口,而你想运行相同数据库容器的新实例,那么你可能需要更改新容器监听的端口设置,以避免与现有容器冲突。有时,如果程序需要更多资源来处理繁重的工作负载,你可能想增加容器可用的内存,或者设置环境变量以提供程序运行所需的特定配置信息。

docker run 命令提供了一种强大的方式来覆盖这些默认设置并根据你的喜好定制容器的行为。该命令提供了多个标志,可以让你在运行时自定义容器行为。

覆盖网络端口

有时你可能想为开发和测试目的使用不同的数据库实例。在同一端口上运行这些数据库实例可能会发生冲突。你可以使用 docker run 中的 -p 选项将容器端口映射到主机端口,从而允许你运行多个实例而不会发生冲突。

docker run -d -p 主机端口:容器端口 postgres

设置环境变量

这个选项在容器内部设置一个值为 bar 的环境变量 foo

docker run -e foo=bar postgres env

你会看到如下输出:

HOSTNAME=2042f2e6ebe4
foo=bar

提示

.env 文件是一种方便的方法,可以为你的 Docker 容器设置环境变量,而不会使命令行中充满多个 -e 标志。要使用 .env 文件,你可以在 docker run 命令中传递 --env-file 选项。

docker run --env-file .env postgres env

限制容器资源使用

你可以使用 docker run 命令的 --memory--cpus 标志来限制容器的 CPU 和内存使用。例如,你可以为 Python API 容器设置内存限制,防止它在主机上消耗过多资源。以下是命令:

docker run -e POSTGRES_PASSWORD=secret --memory="512m" --cpus="0.5" postgres

此命令将容器的内存使用限制为 512 MB,并定义 0.5 核心的 CPU 配额。

监控实时资源使用情况

你可以使用 docker stats 命令监控运行容器的实时资源使用情况。这有助于你了解分配的资源是否足够或需要调整。

通过有效使用这些 docker run 标志,你可以根据具体需求调整容器化应用程序的行为。

试一试

在指南中,你将看到如何使用 docker run 命令覆盖容器默认设置。

下载并安装 Docker Desktop

运行多个 Postgres 数据库实例

使用以下命令启动一个 Postgres 镜像的容器:

docker run -d -e POSTGRES_PASSWORD=secret -p 5432:5432 postgres

这将在后台启动 Postgres 数据库,监听标准容器端口 5432,并映射到主机的5432端口。

启动映射到不同端口的第二个Postgres 容器。

docker run -d -e POSTGRES_PASSWORD=secret -p 5433:5432 postgres

这将在后台启动另一个 Postgres 容器,监听容器中的标准 postgres 端口 5432,但映射到主机的 5433 端口。你覆盖了主机端口,以确保新容器不会与现有运行的容器冲突。

通过访问 Docker Dashboard 的容器视图验证两个容器是否都在运行。

在受控网络中运行 Postgres 容器

默认情况下,当你运行容器时,它们会自动连接到一个名为 bridge 的特殊网络。这个bridge网络像虚拟桥一样运行,允许同一主机上的容器相互通信,同时将它们与外界和其他主机隔离。对于大多数容器交互来说,这是一个方便的起点。然而,对于特定场景,你可能需要对网络配置有更多控制。

这时,自定义网络就派上用场了。你可以通过在 docker run 命令中传递 --network 标志来创建自定义网络。所有没有指定 --network 标志的容器都连接到默认的 bridge 网络。

按照以下步骤,将 Postgres 容器连接到自定义网络。

通过以下命令创建一个新的自定义网络:

docker network create mynetwork

使用以下命令验证网络:

docker network ls

此命令会列出所有网络,包括新创建的 "mynetwork"

通过以下命令将 Postgres 连接到自定义网络:

docker run -d -e POSTGRES_PASSWORD=secret -p 5434:5432 --network mynetwork postgres

这将在后台启动Postgres 容器,映射到主机端口 5434,并连接到 mynetwork 网络。你传递了 --network 参数,通过将容器连接到自定义 Docker 网络来覆盖容器默认设置,以便更好地隔离和与其他容器通信。你可以使用 docker network inspect 命令查看容器是否连接到这个新 bridge 网络。

默认 bridge 和自定义网络的关键区别

  • DNS 解析:默认情况下,连接到默认 bridge 网络的容器可以通过 IP 地址互相通信(除非你使用 --link 选项,这被认为是遗留的)。由于各种技术缺陷,不建议在生产中使用。在自定义网络上,容器可以通过名称或别名解析彼此。
  • 隔离:所有未指定 --network 的容器都连接到默认 bridge 网络,因此存在风险,因为不相关的容器可以互相通信。使用自定义网络提供了一个范围网络,只有连接到该网络的容器能够通信,从而提供更好的隔离。

管理资源

默认情况下,容器的资源使用没有限制。然而,在共享系统上,有效地管理资源至关重要。重要的是不要让运行的容器消耗主机机器过多的内存。

这就是 docker run 命令再次发挥作用的地方。它提供了 --memory--cpus 等标志,用于限制容器可以使用的 CPU 和内存量。

docker run -d -e POSTGRES_PASSWORD=secret --memory="512m" --cpus=".5" postgres

--cpus 标志为容器指定了 CPU 配额。在这里,它设置为半个 CPU 核心(0.5),而 --memory 标志为容器指定了内存限制。在本例中,它设置为 512 MB。

Docker Compose 中覆盖默认的 CMDENTRYPOINT

有时,你可能需要覆盖 Docker 镜像中定义的默认命令(CMD)或入口点(ENTRYPOINT),特别是在使用 Docker Compose 时。

创建一个包含以下内容的 compose.yml 文件:

services:
  postgres:
    image: postgres
    entrypoint: ["docker-entrypoint.sh", "postgres"]
    command: ["-h", "localhost", "-p", "5432"]
    environment:
      POSTGRES_PASSWORD: secret 

Compose 文件定义了一个名为 postgres 的服务,使用官方 Postgres 镜像,设置了入口点脚本,并以密码认证启动容器。

通过运行以下命令启动服务:

docker compose up -d

此命令启动 Docker Compose 文件中定义的 Postgres 服务。

通过 Docker Dashboard 验证认证。

打开 Docker Dashboard,选择 Postgres 容器并选择 Exec 进入容器 shell。你可以输入以下命令连接到Postgres数据库:

psql -U postgres

注意

PostgreSQL 镜像本地设置了信任认证,因此当从本地(同一容器内部)连接时,你可能会注意到不需要密码。然而,如果从不同的主机/容器连接,则需要密码。

使用 docker run 覆盖默认的 CMD ENTRYPOINT

你也可以直接使用 docker run 命令覆盖默认设置:

docker run -e POSTGRES_PASSWORD=secret postgres docker-entrypoint.sh -h localhost -p 5432

此命令运行一个 Postgres 容器,设置密码认证的环境变量,覆盖默认启动命令,并配置主机名和端口映射。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ArkUI开发学习随机——得物卡片,京东登录界面

案例一:得物卡片 代码: Column(){Column(){Image($r("app.media.mihoyo")).width(200).height(200)Row(){Text("今晚玩这个 | 每日游戏打卡").fontWeight(700).fontSize(16).padding(4)}.width(200)Text("No.12").fontWe…

服务器数据恢复—raid故障导致部分分区无法识别/不可用的数据恢复案例

服务器数据恢复环境: 一台某品牌DL380服务器中3块SAS硬盘组建了一组raid。 服务器故障: RAID中多块磁盘出现故障离线导致RAID瘫痪,其中一块硬盘状态指示灯显示红色。服务器上运行的数据库在D分区,备份文件存放在E分区。由于RAID瘫…

游戏AI的创造思路-技术基础-深度学习(2)

感觉坑越挖越大,慢慢填~~~~ 继续上篇进行填坑,这一篇我们介绍下循环神经网络 目录 3.2. 循环神经网络(RNN) 3.2.1. 算法形成过程 3.2.2. 运行原理 3.2.3. RNN有哪些优缺点 3.2.4. RNN参数 3.2.5. 如何选择RNN模型参数 3.2…

【Playwright+Python】—— 环境搭建及脚本录制!

前言 看到这个文章,有的同学会说: 静姐,你为啥不早早就写完python系列的文章。 因为有徒弟需要吧,如果你也想学自学,那这篇文章,可以说是我们结缘一起学习的开始吧! 如果对你有用&#xff0…

Qt开发 | Qt界面布局 | 水平布局 | 竖直布局 | 栅格布局 | 分裂器布局 | setLayout使用 | 添加右键菜单 | 布局切换与布局删除重构

文章目录 一、Qt界面布局二、Qt水平布局--QHBoxLayout三、Qt竖直布局四、Qt栅格布局五、分裂器布局代码实现六、setLayout使用说明七、布局切换与布局删除重构1.如何添加右键菜单2.布局切换与布局删除重构 一、Qt界面布局 Qt的界面布局类型可分为如下几种 水平布局(…

Python+Pytest+Allure+Yaml接口自动化测试框架详解

PythonPytestAllureYaml接口自动化测试框架详解 编撰人:CesareCheung 更新时间:2024.06.20 一、技术栈 PythonPytestAllureYaml 版本要求:Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0 二、环境配置 1、安装python3.7,并配置…

解析分子筛自动填充高原制氧机的工作原理及优势

在高原地区,由于空气稀薄,氧气含量相对较低,这给人们的生活、工作和学习带来了诸多不便。为了解决这个问题,高原制氧机应运而生,其中分子筛自动填充高原制氧机以其高效、稳定、安全的特点受到了广泛的关注和应用。 一、…

CRMEB 多门店后台登录入口地址修改(默认admin)

一、>2.4版本 1、修改后端 config/admin.php 配置文件,为自定义的后缀 2、修改 平台后台前端源码中 view/admin/src/settings.js 文件,修改为和上面一样的配置 3、修改后重新打包前端代码,并且覆盖到后端的 public 目录下&#xff1a;打包方法 4、重启swoole 二、<2.4版…

蒙特卡洛树搜索

蒙特卡洛树搜索入门---强化学习 - 知乎蒙特卡洛树搜索&#xff08;Monte Carlo tree search&#xff09;简称MCTS&#xff0c;和一般的蒙特卡洛方法不是一个概念。通俗的理解&#xff0c;蒙特卡洛方法是随机现象中用频率来近似概率&#xff0c;模拟次数越多&#xff0c;结果越准…

从 Hadoop 迁移,无需淘汰和替换

我们仍然惊讶于有如此多的客户来找我们&#xff0c;希望从HDFS迁移到现代对象存储&#xff0c;如MinIO。我们现在以为每个人都已经完成了过渡&#xff0c;但每周&#xff0c;我们都会与一个决定进行过渡的主要、高技术性组织交谈。 很多时候&#xff0c;在这些讨论中&#xff…

项目实训-vue(十一)

项目实训-vue&#xff08;十一&#xff09; 文章目录 项目实训-vue&#xff08;十一&#xff09;1.概述2.页顶导航栏3.导航信息4.总结 1.概述 本篇博客将记录我在图片上传页面中的工作。 2.页顶导航栏 <divstyle"display: flex;justify-content: space-between;alig…

打造智能家居:用ESP32轻松实现无线控制与环境监测

ESP32是一款集成了Wi-Fi和蓝牙功能的微控制器&#xff0c;广泛应用于物联网项目。它由Espressif Systems公司开发&#xff0c;具有强大的处理能力和丰富的外设接口。下面我们将详细介绍ESP32的基础功能和引脚功能&#xff0c;并通过具体的实例项目展示其应用。 主要功能 双核处…

网络安全协议

1. 概述 1.1 网络安全需求 五种需求&#xff1a; 机密性&#xff1a;防止数据未授权公开&#xff0c;让消息对无关听众保密 完整性&#xff1a;防止数据被篡改 可控性&#xff1a;限制对网络资源&#xff08;硬件和软件&#xff09;和数据&#xff08;存储和通信&#xff0…

「2024中国数据要素产业图谱1.0版」重磅发布,景联文科技凭借高质量数据采集服务入选!

近日&#xff0c;景联文科技入选数据猿和上海大数据联盟发布的《2024中国数据要素产业图谱1.0版》数据采集服务板块。 景联文科技是专业数据服务公司&#xff0c;提供从数据采集、清洗、标注的全流程数据解决方案&#xff0c;协助人工智能企业解决整个AI链条中数据采集和数据标…

Kendryte K210 固件烧录

本章将为读者介绍 Kendryte K210 的固件烧录&#xff0c;以及 Kendryte K210 外部 NOR Flash 的空间 分布。 本章分为如下几个小节&#xff1a; 6.1 外部 NOR Flash 的空间分布 6.2 Ubuntu 下的固件烧录 6.3 Windows 下的固件烧录 外部 NOR Flash 的空间分布 Kendryte K210 的…

如何以管理员身份运行CMD?

好久没更新博客了&#xff0c;今天在日常使用中遇到了一个问题&#xff0c;顺便记录下来。 据说国内的谷歌浏览器 Chrome 可以自动升级了&#xff0c;终于不用每次都自己跑去官网下载最新版本&#xff0c;然后安装迁移&#xff0c;重复劳动。下一篇讲如何讲迁移 Chrome&#x…

【Python】已解决:Python读取字典查询键报错“KeyError: ‘d‘”

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;Python读取字典查询键报错“KeyError: ‘d’” 一、分析问题背景 在Python编程中&#xff0c;字典&#xff08;dictionary&#xff09;是一种非常重要的数据结构…

源码分析过滤器与拦截器的区别

博主最近刚拿到一个微服务的新项目&#xff0c;边研究边分析从框架基础开始慢慢带领大家研究微服务的一些东西&#xff0c;这次给大家分析下Springboot中的过滤器和拦截器的区别。虽然上次分析过过滤器&#xff0c;但是主要是分析的cas流程&#xff0c;所以就没太深入&#xff…

[创业之路-129] :制造业企业的必备管理神器-ERP-生产制造

目录 一、ERP生产制造的总体架构 1.1 主要功能模块 1.2 主要流程 二、关键功能详解 2.1 生产管理计划 2.2 物料需求计划MRP 2.3 能力需求计划 2.4 物料与库房管理 一、ERP生产制造的总体架构 1.1 主要功能模块 ERP&#xff08;企业资源计划&#xff09;生产制造系统主…

微信小程序修改应用名称

1、修改名称&#xff08;10分钟即可生效&#xff09; 账号管理员 2、修改icon&#xff08;如果logo带有名称则需要修改&#xff09;