-
开发者空间的ubuntu系统如何安装docker?试了好几种网上的方案,都报错
-
使用Docker部署postgresqlpostgresql数据库在Docker中的镜像的名称为postgres,可以从DockerHub中pull下来,如果pull不下来那么很大概率是网络问题导致的,这时候你可能需要在网上找一些能用的镜像源,以成功拉取postgres镜像。有了postgres的镜像之后,你就可以在本地的Docker创建一个postgres的容器并运行。我们有两种方式来创建容器:直接使用命令行来创建postgres的容器并运行;使用docker-compose来创建postgres的容器并运行;这里先介绍使用命令行的方式来创建postgres容器的方式:docker run -d \--name postgres-exprdb \-p 5432:5432 \-e POSTGRES_PASSWORD=123456 \-e POSTGRES_USER=aderversa \-e POSTGRES_DB=testdb \-v ~/postgresql/data:/var/lib/postgresql/data \postgres12345678-e是用来设置postgres容器中环境变量的值的,有些特殊的环境变量将会影响到启动后的postgresql的一些参数,比如postgresql数据库的密码、用户等等。具体一些环境变量的含义可以查看dockerhub中有关于环境变量的介绍,本文的最后也会介绍一些环境变量的含义。-p将PostgreSQL的5432端口暴露到宿主机的5432端口,方便我们在外部访问容器内的PostgreSQL服务。-v将容器内的/var/lib/postgresql/data文件夹挂载到宿主机的~/postgresql/data文件夹下,这样数据库中的数据就不会因为我们删除了容器而丢失。你需要自己定义好这个数据文件夹该挂载到自己主机的什么地方上,这里我给出的值仅做参考。--name postgres-exprdb指定创建的PostgreSQL容器的名字。-d表示该容器在后台运行,并打印创建容器的ID到控制台。postgres是我们所使用的镜像。运行上述命令,使用docker ps查看容器状态:CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESb1f5d4521cd0 postgres "docker-entrypoint.s…" 8 seconds ago Up 7 seconds 0.0.0.0:5432->5432/tcp postgres-exprdb12可以看见,容器已经在后台运行了。之后,我们可以使用别的什么工具去访问已经创建好的testdb数据库,用定义好的特权用户aderversa,以及指定好的密码123456。IP已知,端口已知,用户名和密码都有了,那么你就可以用你能想象到的方式去连接这个PostgreSQL数据库啦。使用docker-compose来部署相比于在命令行中写冗长的命令,我更喜欢将容器的配置写到docker-compose.yaml文件中,然后一行:docker compose -f docker-compose.yaml -p package_name up -d1-f指定要要操作的文件。-p指定项目的名称。up是创建并启动容器的命令。-d表示容器在后台启动。比如,我编写了一个docker-compose.yaml文件:version: "3.8"services: database_expr: image: postgres:latest container_name: postgres-expr restart: on-failure:3 ports: - 5432:5432 volumes: - ./db:/var/lib/postgresql/data healthcheck: test: [ "CMD", "pg_isready" ] interval: 10s timeout: 5s retries: 5 environment: - POSTGRES_PASSWORD=123456 - POSTGRES_USER=aderversa - POSTGRES_DB=testdb1234567891011121314151617181920直接对其进行操作就可以创建好容器并启动,用户不需要关心里面有什么配置。甚至如果你觉得使用docker compose的命令行来启动不够抽象,那么你可以将它编写入shell脚本中,用户直接运行脚本,只要用户安装了Docker环境,就可以安装PostgreSQL成功,他甚至不需要关心Docker命令应该如何使用。进入postgres容器中执行SQL使用命令:docker ps1查找出刚才创建的PostgreSQL容器的ID:CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESdcf5e3c0ff7f postgres:latest "docker-entrypoint.s…" 13 hours ago Up 13 hours (healthy) 0.0.0.0:5432->5432/tcp postgres-expr12获得container_id = dcf5e3c0ff7f,接着我们使用以下命令进入容器的bash中,方便在操作容器:docker exec -it dcf5e3c0ff7f /bin/bash1注意,如果是在Windows下执行这条命令的时候,使用Git Bash来执行可能会因为终端的一些问题执行失败,此时需要更换一下执行命令的终端,比如:PowerShell。进入到容器中是这个样子的:> docker exec -it dcf5e3c0ff7f /bin/bashroot@dcf5e3c0ff7f:/# 12第一行是在PowerShell中执行的,而第二行则是PostgreSQL容器中运行的bash进程。接着我们就可以使用:psql [OPTION]... [DBNAME [USERNAME]]1这里介绍连接数据库需要使用的OPTION选项,具体的你可以使用psql --help来查看:-h指定PostgreSQL数据库的IP地址。-p指定PostgreSQL数据库的端口号。-U指定登录到数据库的用户名,不指定默认就是root。-w从不提示输入密码,字面意思,不需要输入密码来进行访问数据库,默认是不需要输入密码的。-W强制密码输入。按照这个用法,我们可以用以下两种方式连接数据库:# 这里由于我们在创建容器的时候指定的特权用户是aderversa,因此root被挤占掉了# 用户名对于我这里来说是必须设置的。psql -p 127.0.0.1 -p 5432 -U aderversa testdb 123或者省事一点,直接使用:psql testdb aderversa1执行成功后我们就能够进入psql的命令行:psql (17.2 (Debian 17.2-1.pgdg120+1))Type "help" for help.testdb=#1234psql的使用这里我们并不知道如何使用这个命令行,它提示我们可以使用help来获得帮助,那么就执行一波help,得到了以下信息:You are using psql, the command-line interface to PostgreSQL.Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit123456这里它告诉我们:\copyright,可以PostgreSQL DDMS的一些条款,里面大概是说:不管你出于何种目的,该软件和其文档都是允许你使用、复制、修改和发布的,并且是不需要任何费用,不需要修改的同意…看起来是非常宽松的声明,毕竟PostgreSQL遵循的是BSD协议。\h显示SQL命令,比如CREATE TABLE ALTER TABLE…。\?显示psql的命令,这里面还是非常多命令的,大多都是用来查看数据库的状态的,比如存在什么表、数据库、视图之类的。这里介绍一些常用的、简单的命令:\l,列出所有数据库;\c[onnect],连接到数据库某个数据库,如果先前有连接到某个数据库那么这个操作就是更换连接的数据库;\dt,查看正在使用的数据库中存在哪些表(注意,默认创建的表似乎是不会列出来的);\g执行psql的上一个命令。\q退出psql。以上就是psql的基本用法了,你可以按照自己的在上面执行SQL语句,比如:create table user ( id int primary key );1注意SQL命令以;结尾就可以了。创建完成后可以使用:\dt1来查看你是否创建成功。接下来就是你发挥创造力的时候了,自己尝试着使用psql吧。补充postgres容器的环境变量POSTGRES_PASSWORD,必要的环境变量。这个环境变量将设置PostgreSQL容器中特权用户的密码。如果你要使用PostgreSQL镜像,让它以容器的形式的运行,那么这个环境变量就必须要设置,它一定不能够为空或者未定义。默认的特权用户将由POSTGRES_USER来定义。POSTGRES_USER,可选的环境变量。设置PostgreSQL容器中的特权用户名,需要与POSTGRES_PASSWORD一起使用,以此设置好特权用户的名字和密码。如果该环境变量未被指定,那么默认的特权用户名为postgres。POSTGRES_DB,可选的环境变量。定义容器首次运行创建的默认数据库的名字。如果该环境变量未被使用,那么该环境变量的值等于POSTGRES_USER的值。POSTGRES_INITDB_ARGS,可选的环境变量。大概最终是以这种方式被利用:postgres initdb ${POSTGRES_INITDB_ARGS}。POSTGRES_INITDB_WALDIR,可选的环境变量。定义PostgreSQL事务日志的位置。默认的事务日志的位置是PostgreSQL主数据文件夹(PGDATA指定)下的一个子文件夹。POSTGRES_HOST_AUTH_METHOD,可选的环境变量。(个人理解,似乎是与密码摘要相关的东西,这一般不需要我们关注,如果有兴趣可以去PostgreSQL: Documentation: 14: 21.5. Password Authentication了解一下)。PGDATA,可选的环境变量。定义PostgreSQL主数据文件夹的位置,默认是/var/lib/postgresql/data,如果有调整位置的需求那么可以按需求设置该变量的值。———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/A_zyx0808/article/details/144519236
-
我想使用Ascend资源搭建一个支持 PyTorch-Ascend 的Notebook环境,将 A800上训练的模型直接部署在昇腾计算卡上,期望在 Ubuntu 20.04 LTS上 使用 PyTorch 2.4.0 + CANN >= 8.0.RC3 (参考昇腾辅助软件)。目前现有的公有云镜像中CANN的版本为 8.0.RC2,不太能满足我的需求。我在阅读 在Notebook中通过Dockerfile从0制作自定义镜像 和 从0制作自定义镜像用于创建训练作业(Pytorch+Ascend) 、编写Dockerfile时遇到以下问题:我没有获得 CANN商业版 的资格,无法下载,能直接使用 CANN 社区版吗?是否需要安装NPU驱动?如何确保在使用自定义镜像时能正确识别到Ascend资源?以及想请问是否有相关的帖子或开源dockerfile可供参考?
-
使用eciot-ova脚本制作LXC容器运行build_sdk_base.sh报错Step 1/10 : FROM debian:busterGet "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
-
[2024/11/05 16:58:39.301 GMT+08:00] abc3a19a1358: Verifying Checksum[2024/11/05 16:58:39.301 GMT+08:00] abc3a19a1358: Download complete[2024/11/05 16:58:42.790 GMT+08:00] abc3a19a1358: Pull complete[2024/11/05 16:58:45.368 GMT+08:00] 5046bd3dbdb4: Pull complete[2024/11/05 16:58:45.368 GMT+08:00] Digest: sha256:49abd03aa63ce2e929564d858e18830eee7e577f3313d39b5cd91be763b3a3b6[2024/11/05 16:58:45.368 GMT+08:00] Status: Downloaded newer image for************[2024/11/05 16:58:49.694 GMT+08:00] + pip config set global.index-url http://mirrors.tools.huawei.com/pypi/simple[2024/11/05 16:58:49.699 GMT+08:00] starting check in ***/@tmp/durable-2c6c6cbc[2024/11/05 16:58:49.954 GMT+08:00] Writing to /home/build/.config/pip/pip.conf[2024/11/05 16:58:50.225 GMT+08:00] + pip config set global.trusted-host mirrors.tools.huawei.com[2024/11/05 16:58:50.510 GMT+08:00] Writing to /home/build/.config/pip/pip.conf[2024/11/05 16:58:50.510 GMT+08:00] + pip install -r requirements.txt --target=target[2024/11/05 16:58:51.089 GMT+08:00] Looking in indexes: http://mirrors.tools.huawei.com/pypi/simple[2024/11/05 16:58:51.089 GMT+08:00] WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0x7f9de550abe0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/simple/requests/[2024/11/05 16:58:51.660 GMT+08:00] WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0x7f9de550a9e8>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/simple/requests/[2024/11/05 16:58:52.634 GMT+08:00] WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0x7f9de54aa5f8>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/simple/requests/[2024/11/05 16:58:54.772 GMT+08:00] WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0x7f9de54aa7f0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/simple/requests/[2024/11/05 16:58:58.990 GMT+08:00] WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0x7f9de54aa9e8>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/simple/requests/[2024/11/05 16:58:58.990 GMT+08:00] ERROR: Could not find a version that satisfies the requirement requests (from versions: none)[2024/11/05 16:58:58.990 GMT+08:00] ERROR: No matching distribution found for requests[2024/11/05 16:58:59.008 GMT+08:00] [ERROR] : script returned exit code 1, exitMessage is: command run failed[2024/11/05 16:59:00.601 GMT+08:00] dockerindocker18.09-1.3.3: Pulling from *****构建过程中,用的docker自动构建容器,指定requirements.txt,代码一直找http://mirrors.tools.huawei.com/pypi/simple下载requests模块,里边没有requests,封装就一直过不去...把模块一起上传可以正常封装,这个pip源的问题怎么解决?折腾了好几天,难道只能连模块一起上传么?
-
1 安装docker desktop 配置镜像源2 国内镜像源"registry-mirrors": [ "https://ccr.ccs.tencentyun.com", "https://docker.rainbond.cc", "https://elastic.m.daocloud.io", "https://elastic.m.daocloud.io", "https://docker.m.daocloud.io", "https://gcr.m.daocloud.io", "https://ghcr.m.daocloud.io", "https://k8s-gcr.m.daocloud.io", "https://k8s.m.daocloud.io", "https://mcr.m.daocloud.io", "https://nvcr.m.daocloud.io", "https://quay.m.daocloud.io" ]
-
华为云容器镜像docker登陆后push时仍然提示未登录 docker login -u cn-north-4@XXXXXXXXXX-p XXXXXXXXXXXX swr.cn-north-4.myhuaweicloud.com WARNING! Using --password via the CLI is insecure. Use --password-stdin. WARNING! Your password will be stored unencrypted in /home/crf/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credential-stores Login Succeeded sudo docker push swr.cn-north-4.myhuaweicloud.com/crf/mynginx:1.0 The push refers to repository [swr.cn-north-4.myhuaweicloud.com/xxxx/mynginx] 825fb68b6033: Preparing 7619c0ba3c92: Preparing 1c1f11fd65d6: Preparing 6b133b4de5e6: Preparing 3d07a4a7eb2a: Preparing 756474215d29: Waiting 8d853c8add5d: Waiting denied: You may not login yet
-
前言 在日常生产环境中,我们通常会使用Docker来做容器化管理,通过运行容器来执行任务。但是,随着业务量的不断扩大,容器的不断启动,往往会出现磁盘空间不足的情况。 1、查看当前磁盘使用情况 df -h 其中Use%过大的目录需要排查 2、进入目录,查看当前目录下的文件大小 du -sh * 发现containers目录、overlayer2目录、volumes目录占用空间比较大 containers目录 进入某个容器目录,发现里面是Docker的日志文件 查看同级目录下的所有-json.log du -ha /home/docker/containers/ | grep "json.log" | sort -rh volumes目录 进入volumes目录中,查看大小 du -sh * 进入某个volume,查看其中内容,发现是数据卷内容,可以看情况清理 overlayer2目录 查看其中目录占用空间大小 发现其中部分目录占用空间较大,进入里面看看都由哪些东西 merged 和 diff 占磁盘空间比较大,work 目录可以不用管。 这两个文件夹内容开始是一样的 ,merged会多一些由容器本身产出的写文件,进merged继续往下找 进入./csp目录,发现其中有很多的日志文件 我这里是sentinel的日志,个人项目视情况是否删除,或者通过配置限制文件个数和大小。 3、解决方法 1、docker 镜像占用磁盘 Docker 中查询磁盘占用情况命令: docker system df 可通过执行docker system prune 命令可用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像) 【慎用】 docker system prune -a 命令清理更干净、彻底,可以将没有容器使用的Docker镜像都删掉。 2、containers目录 Docker 容器的日志文件可能会增长并占用大量的磁盘空间。可以检查并删除不再需要的容器日志文件。 (1)临时方案:这个命令将删除 /home/docker/containers/ 目录下的容器日志文件。 sudo find /home/docker/containers/ -name "*-json.log" -type f -delete (2)稳定方案:设置容器服务的日志大小上线 方式一:每个容器都可以单独设置 logging: driver: "json-file" options: max-size: "256m" max-file: "3" 方式二:全局设置 方式三:contab定时执行清理脚本 echo "======== start clean docker containers logs ========" logs=$(find /home/docker/containers/ -name *-json.log) for log in $logs do echo "clean containers logs : $log" cat /dev/null > $log done echo "======== end clean docker containers logs ========" 3、volumes目录 可通过命令删除 find /var/lib/docker/volumes -type f -name "*.log" -delete 3、overlayer2目录 通过排查overlayer2下merged目录中的占用空间较大的目录排查是否需要删除 ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/weixin_44012070/article/details/139067735
-
一、引言 1、Elasticsearch简介 Elasticsearch是一个开源的、基于Lucene的分布式搜索和分析引擎,设计用于云计算环境中,能够实现实时的、可扩展的搜索、分析和探索全文和结构化数据。 1. 核心特性: 分布式:Elasticsearch是分布式的,可以在多个服务器上运行,并且能够自动将数据在服务器之间进行负载均衡。 可扩展性:Elasticsearch提供了可扩展的架构,无论是存储、节点还是查询吞吐量,都可以随着业务需求的变化而增加资源。它可以扩展到上百台服务器,处理PB级别的数据。 实时性:Elasticsearch能够实时地处理数据,提供了近实时的搜索和分析功能。 全文检索:Elasticsearch提供了全文检索功能,支持对大量数据进行复杂的搜索和分析。 分析性:Elasticsearch提供了强大的分析功能,包括聚合、统计和排序等。 多租户能力:Elasticsearch可以配置为多租户环境,允许不同的用户和应用共享相同的集群资源。 监控和警报:Elasticsearch提供了内置的监控和警报功能,使得用户可以实时了解系统的运行状态,并在出现异常时得到通知。 2. 数据支持: Elasticsearch为所有类型的数据提供近乎实时的搜索和分析。无论您拥有结构化或非结构化文本、数字数据还是地理空间数据,Elasticsearch都能以支持快速搜索的方式高效地存储和索引它。 3. 技术实现: Elasticsearch使用Java开发,并基于Lucene作为其核心来实现所有索引和搜索的功能。但其目的是通过简单的RESTful API来隐藏Lucene的复杂性,通过面向文档从而让全文搜索变得简单。 Elasticsearch支持多种数据类型,包括字符串、数字、日期等。 Elasticsearch的水平可扩展性允许通过增加节点来扩展其处理能力。 在硬件故障或节点故障的情况下,Elasticsearch具有容错能力,能够保持数据的完整性和服务的可用性。 4. 应用场景: Elasticsearch在众多场景下都有广泛的应用,如企业搜索、日志和事件数据分析、安全监控等。 5. 集成方案: Elasticsearch与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)。 2、为什么在k8s中部署elasticsearch 1. 自动化和编排 自动化部署和管理: Kubernetes 提供了自动化的部署、扩展和管理功能,可以简化 Elasticsearch 集群的配置、启动和监控。 自愈能力: Kubernetes 能够自动检测并重新调度失败的 Pod,确保 Elasticsearch 集群的高可用性和稳定性。 2. 可扩展性 水平扩展: Elasticsearch 的节点可以在 Kubernetes 中水平扩展,通过增加或减少节点数目来应对数据量和查询量的变化。 弹性资源分配: Kubernetes 允许为不同的 Elasticsearch 节点(如数据节点、主节点、协调节点)分配不同的资源配额,确保资源的合理利用和优化。 3. 高可用性 多副本管理: Kubernetes 能够通过其副本控制器和 StatefulSets 管理 Elasticsearch 的数据副本和分片,确保在节点失败时数据不会丢失,并且服务能迅速恢复。 跨可用区分布: Kubernetes 可以将 Elasticsearch 节点分布在不同的可用区(Availability Zones),提高容灾能力。 4. 容器化优势 一致的环境: 使用容器化的 Elasticsearch 可以确保在开发、测试和生产环境中运行的一致性,减少环境差异带来的问题。 依赖管理: 容器化可以简化依赖管理,确保 Elasticsearch 及其依赖组件能够在独立的环境中运行,不会相互干扰。 二、k8s基础 1、k8s简介 K8s,全称Kubernetes,是一个开源的容器编排系统,旨在自动化容器化应用程序的部署、扩展和管理。 1. 定义与概念: K8s是一个用于管理容器的开源平台,允许用户方便地部署、扩展和管理容器化应用程序。 它通过自动化的方式实现负载均衡、服务发现和自动弹性伸缩等功能。 Kubernetes将应用程序打包成容器,并将这些容器部署到一个集群中,自动处理容器的生命周期管理、自动扩容等操作。 2. 主要特点: 自动化管理:自动化管理容器应用程序的部署、扩展、运维等一系列操作,减少了人工干预,提高了效率。 弹性伸缩:根据应用负载情况自动进行扩容或缩容,保证应用的性能和稳定性。 高可用性:当某个节点故障时,K8s会自动将应用迁移至其他健康节点,保证应用的正常运行。 自愈能力:能够监测应用状态并进行自动修复,如自动重启或迁移故障应用。 3. 架构与组件: K8s集群由多个节点(Node)组成,包括Master节点和Worker节点。 Master节点作为整个集群的控制中心,负责集群的管理和调度工作,包括API服务器、调度器、控制器管理器等核心组件。 Worker节点是集群的工作节点,负责运行Pod(容器组)并提供应用程序的运行环境。 2、Pods、Services、StatefulSet等基本概念 2.1 Pods Pods 是Kubernetes中最小的可部署计算单元。一个Pod可以包含一个或多个容器,这些容器共享网络命名空间和存储资源,并总是共同调度在同一个节点上。 单容器Pod: 最常见的情况,一个Pod包含一个容器。 多容器Pod: 包含多个需要紧密协作的容器,例如共享存储或网络的协同进程。 特点: 共享相同的存储卷和网络命名空间。 作为一个整体被调度到同一个节点上。 2.2 Services Services 是一种抽象,它定义了一组逻辑上相同的Pods,并且提供一个稳定的访问入口(IP地址和端口)。Services实现了负载均衡,并且允许Pod进行自动发现和通信。 类型: ClusterIP: 默认类型,仅在集群内部可访问。 NodePort: 在每个节点上开放一个静态端口,使得服务可以通过<NodeIP>:<NodePort>访问。 LoadBalancer: 使用云提供商的负载均衡器,公开服务到外部网络。 ExternalName: 将服务映射到外部名称,比如DNS名称。 功能: 提供Pod的负载均衡。 稳定的网络接口,不会因为Pod的创建和销毁而变化。 2.3 StatefulSets StatefulSets 专门用于管理有状态应用,确保Pod有固定的标识符和稳定的存储。适用于数据库、分布式文件系统等需要持久化存储的应用。 特点: 稳定的网络标识: 每个Pod有一个固定的DNS名,例如pod-0.service.namespace.svc.cluster.local。 有序部署和更新: Pod按顺序进行创建、删除和更新(例如从pod-0到pod-N)。 稳定的存储: 每个Pod可以有一个独立的PersistentVolume,与Pod的生命周期无关。 三、Elasticsearch集群架构 1、Elasticsearch集群的组成 一Elasticsearch集群主要由以下几个部分组成: 1. 节点(Node): 节点是Elasticsearch集群中的一个单独运行实例,每个节点都存储数据并参与集群的索引和搜索功能。 2. 主节点(Master Node): 负责集群范围内的管理任务,如创建或删除索引、跟踪集群中各个节点的状态,并选择主分片和副本分片的位置。 一个集群中只有一个主节点是活动的,但可以配置多个候选主节点以提高容错性。 3. 数据节点(Data Node): 负责存储数据和处理CRUD(创建、读取、更新、删除)操作以及搜索请求。数据节点需要较多的内存和存储资源。 4. 协调节点(Coordinating Node): 处理来自客户端的请求,将请求分发到合适的数据节点,并汇总结果后返回给客户端。 任何节点都可以作为协调节点,但可以专门配置一些节点只作为协调节点。 5. 主节点候选节点(Master-Eligible Node): 可以被选举为主节点的节点。通常,集群会配置多个候选主节点,以防止单点故障。 6. 专用节点(Dedicated Node): 可以配置专门的节点来处理特定任务,如专用的主节点、数据节点或协调节点,以优化集群性能。 2、Elasticsearch工作原理 1. 索引和分片(Shards): 数据在存储时被划分为多个分片。每个索引(类似于关系数据库中的表)可以被分成一个或多个主分片(Primary Shard),每个主分片可以有多个副本分片(Replica Shard)。 主分片负责处理数据写入,副本分片用于数据冗余和读取操作,以提高查询性能和数据安全性。 2. 数据分布: Elasticsearch使用一致性哈希算法将分片分布到集群中的各个节点上。主节点负责跟踪分片的位置,并在节点故障时重新分配分片。 3. 查询和搜索: 当客户端发送查询请求时,协调节点会解析请求并将其分发到相关的分片上。每个分片在本地执行查询,并返回结果给协调节点,协调节点汇总结果后返回给客户端。 查询可以并行执行,从而提高性能。 4. 数据写入: 当客户端发送数据写入请求时,协调节点将数据发送到相关的主分片。主分片处理写入后,将数据同步到所有副本分片。确保所有副本分片都成功写入数据后,协调节点才会向客户端确认写入成功。 3、集群高可用设计 本次部署的elasticsearch设计为5节点,一主多从的高可用方式,如果一个主节点意外宕掉,其他节点自主选举出新的Master节点接管任务,从而保证集群的高可用性 四、部署环境准备 1、准备k8s集群 这里我们使用的k8s集群版本为 1.23,也可以使用其他的版本,只是镜像导入命令不通,如果还未搭建k8s集群,请参考《在Centos中搭建 K8s 1.23 集群超详细讲解》这篇文章 2、准备StorageClass 因为我们要对Elasticsearch中的数据进行持久化,避免Pod漂移后数据丢失,保证数据的完整性与可用性 如果还未创建存储类,请参考《k8s 存储类(StorageClass)创建与动态生成PV解析,(附带镜像)》这篇文件。 五、部署Elasticsearch集群 1、编写部署Elasticsearch的YAML文件 apiVersion: v1 kind: Namespace metadata: name: es --- #创建ConfigMap用于挂载配置文件 apiVersion: v1 kind: ConfigMap metadata: name: sirc-elasticsearch-config namespace: es labels: app: elasticsearch data: #具体挂载的配置文件 elasticsearch.yml: |+ cluster.name: "es-cluster" network.host: 0.0.0.0 http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-headers: "*" bootstrap.system_call_filter: false xpack.security.enabled: false index.number_of_shards: 5 index.number_of_replicas: 1 #创建StatefulSet,ES属于数据库类型的应用,此类应用适合StatefulSet类型 --- apiVersion: apps/v1 kind: StatefulSet metadata: name: elasticsearch namespace: es spec: serviceName: "elasticsearch-cluster" #填写无头服务的名称 replicas: 5 selector: matchLabels: app: elasticsearch template: metadata: labels: app: elasticsearch spec: initContainers: - name: fix-permissions image: busybox imagePullPolicy: IfNotPresent command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"] securityContext: privileged: true volumeMounts: - name: es-data mountPath: /usr/share/elasticsearch/data - name: increase-vm-max-map image: busybox imagePullPolicy: IfNotPresent command: ["sysctl", "-w", "vm.max_map_count=262144"] securityContext: privileged: true - name: increase-fd-ulimit image: busybox imagePullPolicy: IfNotPresent command: ["sh", "-c", "ulimit -n 65536"] securityContext: privileged: true containers: - name: elasticsearch image: elasticsearch:7.17.18 imagePullPolicy: Never resources: requests: memory: "1000Mi" cpu: "1000m" limits: memory: "2000Mi" cpu: "2000m" ports: - containerPort: 9200 name: elasticsearch env: - name: node.name valueFrom: fieldRef: fieldPath: metadata.name #metadata.name获取自己pod名称添加到变量MY_POD_NAME,status.hostIP获取自己ip等等可以自己去百度 - name: discovery.type value: zen - name: cluster.name value: elasticsearch - name: cluster.initial_master_nodes value: "elasticsearch-0,elasticsearch-1,elasticsearch-2,elasticsearch-3,elasticsearch-4" - name: discovery.zen.minimum_master_nodes value: "3" - name: discovery.seed_hosts value: "elasticsearch-0.elasticsearch-cluster.es,elasticsearch-1.elasticsearch-cluster.es,elasticsearch-2.elasticsearch-cluster.es,elasticsearch-3.elasticsearch-cluster.es,elasticsearch-4.elasticsearch-cluster.es" - name: network.host value: "0.0.0.0" - name: "http.cors.allow-origin" value: "*" - name: "http.cors.enabled" value: "true" - name: "number_of_shards" value: "5" - name: "number_of_replicas" value: "1" - name: path.data value: /usr/share/elasticsearch/data volumeMounts: - name: es-data #挂载数据 mountPath: /usr/share/elasticsearch/data volumes: - name: elasticsearch-config configMap: #configMap挂载 name: sirc-elasticsearch-config volumeClaimTemplates: #这步自动创建pvc,并挂载动态pv - metadata: name: es-data spec: accessModes: ["ReadWriteMany"] storageClassName: nfs resources: requests: storage: 10Gi #创建Service --- apiVersion: v1 kind: Service metadata: name: elasticsearch-cluster #无头服务的名称,需要通过这个获取ip,与主机的对应关系 namespace: es labels: app: elasticsearch spec: ports: - port: 9200 name: elasticsearch clusterIP: None selector: app: elasticsearch --- apiVersion: v1 kind: Service metadata: name: elasticsearch #service服务的名称,向外暴露端口 namespace: es labels: app: elasticsearch spec: ports: - port: 9200 name: elasticsearch type: NodePort selector: app: elasticsearch --- apiVersion: v1 kind: Service metadata: name: my-nodeport-service-0 namespace: es spec: type: NodePort selector: statefulset.kubernetes.io/pod-name: elasticsearch-0 ports: - protocol: TCP port: 80 # Service 暴露的端口 targetPort: 9200 # Pod 中容器的端口 nodePort: 30000 # NodePort 类型的端口范围为 30000-32767,可以根据需要调整 --- apiVersion: v1 kind: Service metadata: name: my-nodeport-service-1 namespace: es spec: type: NodePort selector: statefulset.kubernetes.io/pod-name: elasticsearch-1 ports: - protocol: TCP port: 80 # Service 暴露的端口 targetPort: 9200 # Pod 中容器的端口 nodePort: 30001 # NodePort 类型的端口范围为 30000-32767,可以根据需要调整 --- apiVersion: v1 kind: Service metadata: name: my-nodeport-service-2 namespace: es spec: type: NodePort selector: statefulset.kubernetes.io/pod-name: elasticsearch-2 ports: - protocol: TCP port: 80 # Service 暴露的端口 targetPort: 9200 # Pod 中容器的端口 nodePort: 30002 # NodePort 类型的端口范围为 30000-32767,可以根据需要调整 --- apiVersion: v1 kind: Service metadata: name: my-nodeport-service-3 namespace: es spec: type: NodePort selector: statefulset.kubernetes.io/pod-name: elasticsearch-3 ports: - protocol: TCP port: 80 # Service 暴露的端口 targetPort: 9200 # Pod 中容器的端口 nodePort: 30003 # NodePort 类型的端口范围为 30000-32767,可以根据需要调整 --- apiVersion: v1 kind: Service metadata: name: my-nodeport-service-4 namespace: es spec: type: NodePort selector: statefulset.kubernetes.io/pod-name: elasticsearch-4 ports: - protocol: TCP port: 80 # Service 暴露的端口 targetPort: 9200 # Pod 中容器的端口 nodePort: 30004 # NodePort 类型的端口范围为 30000-32767,可以根据需要调整 --- apiVersion: apps/v1 kind: Deployment metadata: name: elasticsearchhead namespace: es spec: replicas: 1 selector: matchLabels: app: elasticsearchhead template: metadata: labels: app: elasticsearchhead spec: containers: - name: elasticsearchhead image: mobz/elasticsearch-head:5 ports: - containerPort: 9100 --- apiVersion: v1 kind: Service metadata: name: elasticsearchhead-service namespace: es spec: type: NodePort ports: - port: 9100 targetPort: 9100 nodePort: 30910 # 可根据需要选择合适的端口号 selector: app: elasticsearchhead 上述Kubernetes配置文件定义了Elasticsearch集群的部署,使用StatefulSet来管理其有状态的Pod。 配置说明 1. 命名空间 (Namespace) 创建一个命名空间es,用于组织和隔离Elasticsearch资源。 2. ConfigMap 创建一个ConfigMap,用于存储Elasticsearch的配置文件elasticsearch.yml。 3. StatefulSet StatefulSet 用于部署和管理有状态应用。 包含5个副本(replicas),每个副本都有唯一的标识符(如elasticsearch-0)。 使用初始化容器(initContainers)来处理权限、系统参数和文件描述符的设置。 定义了主容器elasticsearch,并指定了环境变量、资源请求和限制,以及挂载数据卷。 4. Services 创建了一个无头服务elasticsearch-cluster,用于Pod之间的内部通信。 创建了一个NodePort服务elasticsearch,暴露9200端口到集群外部。 为每个StatefulSet的Pod创建单独的NodePort服务,分别暴露在不同的端口(30000-30004),用于直接访问特定的Pod。 5. Elasticsearch Head 部署和服务 部署Elasticsearch Head插件,用于图形化管理和浏览Elasticsearch集群。 暴露Elasticsearch Head的9100端口,使用NodePort类型服务,端口号为30910。 2、部署 Elasticsearch 执行下面的命令 kubectl get pod -n es 3、查看Pod状态 执行下面的命令 kubectl get svc -n es 4、访问测试 查看svc的nodeport端口 在浏览器输入Node的IP加30910端口 在连接窗口输入 Node的IP加30001端口,点击连接 如果能显示下面的结果,则集群部署成功 💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Elasticsearch的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺 🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!! ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/weixin_53269650/article/details/139632433
-
概述 nvidia-docker 和 nvidia-container-runtime 是用于在 NVIDIA GPU 上运行 Docker 容器的两个相关工具。它们的作用是提供 Docker 容器与 GPU 加速硬件的集成支持,使容器中的应用程序能够充分利用 GPU 资源。 nvidia-docker 为了提高 Nvidia GPU 在 docker 中的易用性, Nvidia 通过对原生 docker 的封装提供了 nvidia-docker 工具 nvidia-docker 是一个 Docker 插件,用于在 Docker 容器中启用 NVIDIA GPU 支持。 该工具提供了一个命令行界面,允许在运行容器时通过简单的命令来指定容器是否应该访问主机上的 NVIDIA GPU 资源。 当在容器中运行需要 GPU 加速的应用程序时,可以使用 nvidia-docker 来确保容器能够访问 GPU。 # 示例命令 nvidia-docker run -it --rm nvidia/cuda:11.0-base nvidia-smi 上述命令使用 nvidia-docker 在容器中运行 NVIDIA 的 CUDA 基础镜像,并在容器中执行 nvidia-smi 命令以查看 GPU 信息 nvidia-container-runtime nvidia-container-runtime 是 NVIDIA 的容器运行时,它与 Docker 和其他容器运行时(如 containerd)集成,以便容器可以透明地访问 NVIDIA GPU 资源。 与 nvidia-docker 不同,nvidia-container-runtime 不是 Docker 插件,而是一种更通用的容器运行时,可与多个容器管理工具集成。 nvidia-docker 和 nvidia-container-runtime 都是用于使 Docker 容器能够访问 NVIDIA GPU 资源的工具。可以根据自己的需求选择其中一个来配置容器以利用 GPU 加速。 需要注意的是,最新的 NVIDIA Docker 支持通常建议使用 nvidia-container-runtime,因为它提供了更灵活和通用的 GPU 支持,而不仅仅是为 Docker 定制的解决方案。 # 示例命令 docker run --runtime=nvidia -it --rm nvidia/cuda:11.0-base nvidia-smi 上述命令使用 Docker 运行容器,通过 --runtime=nvidia 参数指定使用 nvidia-container-runtime 运行时,并在容器中执行 nvidia-smi 命令。 原生 docker 通过设备挂载和磁盘挂载的方式支持访问 GPU 资源 docker 本身并不原生支持 GPU,但使用 docker 的现有功能可以对 GPU 的使用进行支持 # 示例命令 docker run \ --device /dev/nvidia0:/dev/nvidia0 \ --device /dev/nvidiactl:/dev/nvidiactl \ --device /dev/nvidia-uvm:/dev/nvidia-uvm \ -v /usr/local/nvidia:/usr/local/nvidia \ -it --privileged nvidia/cuda 通过 --device 来指定挂载的 GPU 设备,通过 -v 来将宿主机上的 nvidia gpu 的命令行工具和相关的依赖库挂载到容器。这样,在容器中就可以看到和使用宿主机上的 GPU 设备了。 注意:这种方式对于 GPU 的可用性(哪些 GPU 是空闲的等)需要人为的判断,效率很低 nvidia-docker 详解 结构图及各组件说明 nvidia-docker 对于使用 GPU 资源的 docker 容器支持的层次关系: Nvidia-docker的原理图以及各个部分的作用解析: **libnvidia-container:**提供了一个库和简单的 CLI 工具,以实现在容器当中支持使用 GPU 设备的目标。 nvidia-container-toolkit: 是一个实现了 runC 的 prestart hook 接口的脚本,该脚本在 runC 创建一个容器之后,启动该容器之前调用,其主要作用就是修改与容器相关联的 config.json,注入一些在容器中使用 NVIDIA GPU 设备所需要的一些信息(比如:需要挂载哪些 GPU 设备到容器当中)。 nvidia-container-runtime: 主要用于将容器 runC spec 作为输入,然后将 nvidia-container-toolkit 脚本作为一个 prestart hook 加入到 runC spec 中,再用修改后的 runC spec 调 runc 的 Exec 接口运行容器。 所以在容器启动之前会调用 pre-start hook(nvidia-container-toolkit),这个 hook 会通过 nvidia-container-cli 文件,来调用libnvidia-container 库,最终映射挂载宿主机上的 GPU 设备、nvid 驱动的 so 文件、可执行文件到容器内部。 nvidia-container-runtime 才是真正的核心部分,它在原有的 docker 容器运行时 runc 的基础上增加一个 prestart hook,用于调用 libnvidia-container 库 RunC: RunC 是一个轻量级的工具,它是用来运行容器的,只用来做这一件事。 可以认为它就是个命令行小工具,可以不用通过 docker 引擎,直接运行容器。也是 docker 默认的容器运行方式。 事实上,runC 是标准化的产物,它根据 OCI 标准来创建和运行容器。而 OCI(Open Container Initiative)组织,旨在围绕容器格式和运行时制定一个开放的工业化标准。 直接使用 RunC 的命令行即可以完成创建一个容器,并提供了简单的交互能力。 容器创建过程 创建一个正常容器(不支持 GPU)的流程: docker --> dockerd --> containerd–> containerd-shim -->runc --> container-process 1 docker 客户端将创建容器的请求发送给 dockerd,当 dockerd 收到请求任务之后将请求发送给 containerd,containerd 经过查看校验启动 containerd-shim 或者自己来启动容器进程。 创建一个支持 GPU 的容器的流程: docker–> dockerd --> containerd --> containerd-shim–> nvidia-container-runtime --> nvidia-container-runtime-hook --> libnvidia-container --> runc – > container-process 1 基本流程和不支持 GPU 的容器差不多,只是把 docker 默认的运行时替换成了 NVIDIA 封装的 nvidia-container-runtime 这样当 nvidia-container-runtime 创建容器时,先执行 nvidia-container-runtime-hook,这个 hook 去检查容器是否需要使用GPU(通过环境变 NVIDIA_VISIBLE_DEVICES 来判断)。如果需要则调用 libnvidia-container 来暴露 GPU 给容器使用。否则走默认的 runc 逻辑。 NVIDIA Docker 整体工作架构 软硬件基础 硬件,服务器上安装了英伟达 GPU 宿主机,安装了操作系统和 Cuda Driver,以及 Docker 引擎 容器,包含容器 OS 用户空间,Cuda Toolkit,以及用户应用程序 注意: 宿主机上需要安装 cuda driver,容器内需要安装 cuda toolkit。容器内无需安装 cuda driver NVIDIA 提供了一些官方镜像,其中已经安装好了 cuda toolkit,但还是需要在宿主机安装 cuda driver。 API 结构 NVIDIA 提供了三层 API: CUDA Driver API: GPU 设备的抽象层,通过提供一系列接口来操作 GPU 设备,性能最好,但编程难度高,一般不会使用该方式开发应用程序 CUDA Runtime API: 对 CUDA Driver API 进行了一定的封装,调用该类 API 可简化编程过程,降低开发难度 CUDA Libraries: 是对 CUDA Runtime API 更高一层的封装,通常是一些成熟的高效函数库,开发者也可以自己封装一些函数库便于使用 应用程序可调用 CUDA Libraries 或者 CUDA Runtime API 来实现功能,当调用 CUDA Libraries 时,CUDA Libraries 会调用相应的 CUDA Runtime API,CUDA Runtime API 再调用 CUDA Driver API,CUDA Driver API 再操作 GPU 设备。 CUDA 的容器化 目标:让应用程序可以在容器内调用 CUDA API 来操作 GPU 因此需要实现: 在容器内应用程序可调用 CUDA Runtime API 和 CUDA Libraries 在容器内能使用 CUDA Driver 相关库。因为 CUDA Runtime API 其实就是 CUDA Driver API 的封装,底层还是要调用到 CUDA Driver API 在容器内可操作 GPU 设备 因此容器中访问 GPU 资源过程为: 要在容器内操作 GPU 设备,需要将 GPU 设备挂载到容器里 Docker 可通过 --device 挂载需要操作的设备,或者直接使用特权模式(不推荐)。 NVIDIA Docker 是通过注入一个 prestart 的 hook 到容器中,在容器自定义命令启动前就将GPU设备挂载到容器中。 至于要挂载哪些GPU,可通过 NVIDIA_VISIBLE_DEVICES 环境变量控制。 挂载 GPU 设备到容器后,还要在容器内可调用 CUDA API CUDA Runtime API 和 CUDA Libraries 通常跟应用程序一起打包到镜像里 CUDA Driver API 是在宿主机里,需要将其挂载到容器里才能被使用。 NVIDIA Docker 挂载 CUDA Driver 库文件到容器的方式和挂载 GPU 设备一样,都是在 runtime hook 里实现的。 注意: 该方案也有一些问题,即容器内的 CUDA Runtime 同宿主机的 CUDA driver 可能存在版本不兼容的问题。 CUDA Libraries 和 CUDA Runtime API 是和应用程序一起打包到镜像中的,而 Driver 库是在创建容器时从宿主机挂载到容器中的,需要保证 CUDA Driver 的版本不低于 CUDA Runtime 版本。 , NVIDIA Docker 2.0(nvidia-container-runtime) 实现机制 nvidia-docker2.0 是一个简单的包,它主要通过修改 docker 的配置文件 /etc/docker/daemon.json,将默认的 Runtime 修改为 nvidia-container-runtime,可实现将 GPU 设备,CUDA Driver 库挂载到容器中。 cat /etc/docker/daemon.json { "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } } } Debug日志 修改 nvidia runc 的默认配置文件 /etc/nvidia-container-runtime/config.toml ,打开 hook 的 debug 日志选项,可以看到宿主机挂载 nvidia 驱动、设备到容器内部的详细过程。 ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/footless_bird/article/details/136291344
-
【docker】centos7配置docker镜像加速-转载鲲鹏发表于 13 小时前4查看国内从 DockerHub 拉取镜像有时会遇到困难,由于网络原因,下载一个Docker官方镜像可能会需要很长的时间,甚至下载失败。此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务。 国内常见镜像仓库 docker官方地址仓库国外地址: https://download.docker.com/linux/centos/docker-ce.repo 阿里云 : http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 华为云: https://<your accelerate address>.mirror.swr.myhuaweicloud.com 腾讯云: https://mirror.ccs.tencentyun.com 科大镜像: https://docker.mirrors.ustc.edu.cn/ 七牛云加速器: https://reg-mirror.qiniu.com docker中国: https://registry.docker-cn.com 网易: http://hub-mirror.c.163.com daocloud: http://f1361db2.m.daocloud.io 【注意】云服务的话要根据自己购买的服务器获取自己服务器对应的镜像加速地址,这样可以比公开的镜像地址速度更快。推荐阿里云和华为云的。 确认操作系统版本 uname -r 查看信息(配置镜像加速前) docker info 没有看到 Registry Mirrors: https:// XXXXXXXXXXXXX 说明没有配置镜像加速。 创建文件夹 mkdir -pv /etc/docker 创建daemon.json cd /etc/docker/ touch daemon.json 编辑 daemon.json vim daemon.json 增加内容: {"registry-mirrors":["https://hub-mirror.c.163.com/"]} 重新启动服务 systemctl daemon-reload systemctl restart docker 再次查看信息(配置镜像加速后) docker info ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/wochunyang/article/details/134894410
-
0、报错内容1、环境win10 子系统 wls2 Ubuntu20.04 2、docker ce 信息Docker version 27.1.1, build 6312585
-
1、环境win10 子系统wsl2 Ubuntu20.4 安装了docker ce 版本 Docker version 27.1.1, build 63125852、问题运行build_sdk_base.sh报错,错误内容如下如何解决
-
Docker容器绑定外部IP和端口的方法主要依赖于Docker的端口映射功能。Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务。以下是具体的步骤和方法:1. 使用-p或-P参数进行端口映射-p(小写)参数:可以指定要映射的端口,并且在一个指定端口上只可以绑定一个容器。-p参数支持多种格式,如ip:hostport:containerport、ip::containerport、hostport:containerport。如果不指定IP,则默认映射到宿主机的所有IP上。示例:将宿主机的5000端口映射到容器的5000端口上,可以使用以下命令:docker run -d -p 5000:5000 training/webapp python app.py如果希望只将宿主机的某个特定IP(如192.168.1.100)的5000端口映射到容器的5000端口上,可以使用:docker run -d -p 192.168.1.100:5000:5000 training/webapp python app.py-P(大写)参数:Docker会随机选择一个端口映射到容器内部开放的网络端口上。这种方式适用于不需要固定端口的情况。示例:启动容器并随机映射端口:docker run -d -P training/webapp python app.py之后,可以使用docker ps命令查看容器运行信息,包括Docker随机分配的端口号。2. 查看容器绑定和映射的端口及IP地址使用docker port命令可以查看容器的端口映射情况。例如,查看某个容器(通过容器ID或名称指定)的端口映射,可以使用:docker port 容器ID或名称这将列出容器内部端口与宿主机端口的映射关系。3. 注意事项默认情况下,Docker容器使用的是内部网络,无法直接访问公网。如果需要通过公网访问容器,需要在宿主机上配置相应的网络设置(如NAT转发、防火墙规则等)。在生产环境中,为了避免端口冲突和方便管理,建议明确指定要映射的端口号。容器名称的指定(通过--name参数)有助于记忆和管理容器,特别是在运行多个容器时。容器间的互联(通过--link参数,但注意--link在新版本的Docker中已不推荐使用,建议使用Docker网络功能)可以实现容器间的安全交互。综上所述,Docker容器绑定外部IP和端口主要通过-p或-P参数实现,同时需要注意网络配置和端口管理的问题。
推荐直播
-
GaussDB管理平台TPOPS,DBA高效运维的一站式解决方案
2024/12/24 周二 16:30-18:00
Leo 华为云数据库DTSE技术布道师
数据库的复杂运维,是否让你感到头疼不已?今天,华为云GaussDB管理平台将彻底来改观!本期直播,我们将深入探索GaussDB管理平台的TPOPS功能,带你感受一键式部署安装的便捷,和智能化运维管理的高效,让复杂的运维、管理变得简单,让简单变得可靠。
回顾中 -
DTT年度收官盛典:华为开发者空间大咖汇,共探云端开发创新
2025/01/08 周三 16:30-18:00
Yawei 华为云开发工具和效率首席专家 Edwin 华为开发者空间产品总监
数字化转型进程持续加速,驱动着技术革新发展,华为开发者空间如何巧妙整合鸿蒙、昇腾、鲲鹏等核心资源,打破平台间的壁垒,实现跨平台协同?在科技迅猛发展的今天,开发者们如何迅速把握机遇,实现高效、创新的技术突破?DTT 年度收官盛典,将与大家共同探索华为开发者空间的创新奥秘。
回顾中
热门标签