• Docker数据丢失核心原因及解决方法
     数据丢失的核心原因是 数据卷挂载配置错误(路径不对、权限不足、挂载类型误用),Docker 环境下 PostgreSQL 的数据持久化完全依赖正确的卷挂载 ——PostgreSQL 容器的默认数据存储目录是 /var/lib/postgresql/data,如果挂载时路径不匹配、宿主机目录无写入权限,数据会默认存到容器的 “临时存储层”,容器重启后就会丢失。一、先排查:你的数据卷挂载到底错在哪?1. 最常见错误:挂载路径不匹配(没对准容器内默认数据目录)PostgreSQL 容器的 数据必须存储在 /var/lib/postgresql/data 目录下(这是官方镜像的固定路径,改不了)。如果你的启动命令里挂载路径写错了(比如多写一层目录、少写路径),数据根本没写到宿主机卷里。常见小错误(路径错误): # 错误1:挂载到 /var/lib/postgresql(少了 /data 后缀)docker run -d -v pgdata:/var/lib/postgresql postgres:15# 错误2:自定义容器内路径(比如 /data),但PostgreSQL不往这写docker run -d -v /宿主机路径:/data postgres:15# 错误3:绑定挂载时宿主机路径拼写错误(比如 /home/user/pgdata 写成 /home/user/pgdat)docker run -d -v /home/user/pgdat:/var/lib/postgresql/data postgres:15 正确示例(路径必须对准 /var/lib/postgresql/data): # 命名卷(推荐,Docker自动管理路径和权限)docker run -d -v pgdata:/var/lib/postgresql/data postgres:15# 绑定挂载(宿主机路径自定义,需确保权限)docker run -d -v /home/user/pgdata:/var/lib/postgresql/data postgres:15 2. 第二常见:宿主机目录权限不足(容器内用户写不进去)PostgreSQL 容器内默认使用 postgres 用户(UID=999,GID=999)运行,如果是 绑定挂载(直接挂载宿主机目录),宿主机目录的属主 / 权限不对,postgres 用户无法写入数据,会自动降级为 “临时存储”(重启丢失)。错误场景:宿主机创建了 /home/user/pgdata 目录,但默认属主是 root,权限是 755(只有 root 能写),容器内 postgres 用户没权限写入,只能用临时存储。修复方法(绑定挂载时):  # 1. 先给宿主机目录设置正确权限(让 UID=999 能写入)sudo chown -R 999:999 /home/user/pgdatasudo chmod -R 700 /home/user/pgdata # PostgreSQL要求数据目录权限为700(仅所有者可读写)# 2. 再启动容器(路径正确+权限正确)docker run -d -v /home/user/pgdata:/var/lib/postgresql/data postgres:15 3. 其他的小错误:误用 “匿名卷” 或 “临时存储”匿名卷:启动命令里只写 -v /var/lib/postgresql/data(没指定宿主机路径或卷名),Docker 会创建随机命名的匿名卷,容器删除后匿名卷可能被清理(重启容器不删,但手动删容器时容易丢);临时存储:如果启动时没加任何 -v 挂载,数据直接存在容器的 “可写层”,容器重启 / 重建后 100% 丢失。二、Docker 部署 PostgreSQL 的正确流程(确保数据不丢)推荐用 命名卷(Docker 自动管理路径、权限,避免手动配置错误)1. 提前创建命名卷(也可启动时自动创建) # 创建名为 pgdata 的命名卷(Docker会把数据存在 /var/lib/docker/volumes/pgdata 下)docker volume create pgdata 2. 启动容器(核心:正确的去挂载卷 + 设置必要环境变量)docker run -d \ --name postgres-db \ -p 5432:5432 \ # 端口映射(宿主机:容器) -v pgdata:/var/lib/postgresql/data \ # 命名卷挂载(关键) -e POSTGRES_USER=myuser \ # 自定义数据库用户(避免用默认postgres) -e POSTGRES_PASSWORD=mypassword \ # 自定义密码(必须设置,否则容器启动失败) -e POSTGRES_DB=mydb \ # 初始化时创建的数据库(可选) -e PGDATA=/var/lib/postgresql/data/pgdata \ # 可选:指定数据子目录(避免和配置文件混放) --restart=always \ # 容器异常退出时自动重启 postgres:15 # 指定具体版本(不要用latest,避免版本迭代问题) 3. 验证数据持久化(确保重启后不丢) # 1. 进入容器,创建测试数据docker exec -it postgres-db psql -U myuser -d mydb# 执行SQL创建表并插入数据CREATE TABLE test (id int);INSERT INTO test VALUES (1);SELECT * FROM test; # 确认能查到数据,退出容器(ctrl+d)# 2. 重启容器docker restart postgres-db# 3. 再次进入容器,验证数据是否存在docker exec -it postgres-db psql -U myuser -d mydbSELECT * FROM test; # 能查到 (1) 说明持久化成功 三、Docker 环境使用 PostgreSQL 的关键注意事项1. 数据卷相关(重中之重)优先用 命名卷:避免绑定挂载的权限、路径问题,Docker 会自动维护卷的生命周期(容器删除后卷不会删,数据保留);绑定挂载需注意:宿主机目录必须提前创建并设置 999:999 属主(容器内 postgres 用户的 UID/GID),权限设为 700(PostgreSQL 安全要求,禁止其他用户访问数据目录);不要修改容器内默认数据目录:官方镜像的 /var/lib/postgresql/data 是固定路径,修改 PGDATA 环境变量时需确保挂载路径同步(比如 PGDATA=/var/lib/postgresql/data/pgdata,挂载路径仍为 /var/lib/postgresql/data)。2. 配置与权限必须设置密码:PostgreSQL 官方镜像从 10 版本后,必须通过 POSTGRES_PASSWORD 环境变量设置密码,否则容器启动失败;避免硬编码密码:生产环境不要直接在命令行写密码,可用 --env-file 加载环境变量文件(比如 docker run --env-file .env ...,.env 文件里写 POSTGRES_PASSWORD=mypassword);挂载配置文件:如果需要修改 postgresql.conf(比如调整内存、连接数),可将宿主机的配置文件挂载到 /var/lib/postgresql/data/postgresql.conf(命名卷中会自动生成默认配置,可先拷贝出来修改再挂载): # 先拷贝容器内默认配置到宿主机docker cp postgres-db:/var/lib/postgresql/data/postgresql.conf /home/user/pgconf/# 修改后重新挂载配置文件docker run -d -v pgdata:/var/lib/postgresql/data -v /home/user/pgconf/postgresql.conf:/var/lib/postgresql/data/postgresql.conf ...  3. 容器管理禁止用 docker rm -v 删除容器:-v 参数会同时删除挂载的卷(包括命名卷),导致数据丢失;定期备份数据卷:即使挂载了卷,也要定期备份(比如用 docker run --rm -v pgdata:/source -v /宿主机备份路径:/dest alpine tar -czf /dest/pgbackup.tar.gz -C /source .);指定具体镜像版本:不要用 postgres:latest,避免容器重建时自动升级版本(可能出现兼容性问题),比如固定 postgres:15.6。4. 网络与端口避免暴露 5432 端口到公网:默认 -p 5432:5432 会把端口暴露到公网,容易被暴力破解,生产环境可改为内网访问(比如 -p 127.0.0.1:5432:5432,仅允许宿主机访问),或用 Docker 自定义网络隔离;容器间通信:如果其他容器需要访问 PostgreSQL,建议创建 Docker 网络(docker network create pg-network),启动时加入网络(--network pg-network),通过容器名(比如 postgres-db)访问,无需暴露端口。5. 资源限制限制 CPU / 内存:避免 PostgreSQL 容器占用过多宿主机资源,可通过 --cpus 和 --memory 限制(比如 --cpus 2 --memory 4g,限制 2 核 CPU、4G 内存);磁盘空间监控:命名卷默认存在 /var/lib/docker/volumes/ 下,需监控宿主机磁盘空间,避免数据量增长导致磁盘满。四、如果数据已经丢失,怎么去救救数据呢?如果容器还没删除,可尝试从容器的 “临时存储层” 抢救数据: # 1. 查看容器是否还存在(即使已停止)docker ps -a | grep postgres-db# 2. 用新容器挂载原容器的存储层,拷贝数据docker run --rm -v /宿主机临时路径:/backup alpine \ cp -r /var/lib/docker/containers/[原容器ID]/mounts/secrets/ /backup/# (注:如果原容器已删除,临时存储层会被清理,无法恢复,只能依赖之前的备份) 总结一下下数据丢失的核心是 挂载路径不对 或 权限不足,记住:PostgreSQL 容器必须挂载 /var/lib/postgresql/data 目录;推荐用 命名卷 部署,避免手动配置权限和路径的麻烦;生产环境务必做好 定期备份 和 权限隔离,不要暴露端口到公网,指定固定镜像版本。
  • [技术干货] Docker多容器编排:Compose 实战教程-转载
    概念简述核心定义   Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它允许您使用一个单独的配置文件(通常是 .yml 格式)来配置应用程序的所有服务、网络和卷,然后通过一条简单的命令就能创建和启动所有服务。可以把它想象成一个自动化脚本或编排工具,专门用于在单台主机上部署由多个容器组成的应用。 为什么要使用 Docker Compose?解决什么问题? 在理解 Compose 之前,先想想如果不用它,会多麻烦:假设应用由以下服务组成:Web 应用、Redis 缓存服务、MySQL 数据库服务,如果没有 Docker Compose,你需要手动完成以下步骤: 创建一个 Docker 网络让容器可以通信。单独启动 MySQL 容器,并指定网络、卷、环境变量等。单独启动 Redis 容器,并指定网络、环境变量等。构建你的 Web 应用的镜像。启动 Web 应用容器,并链接到之前创建的网络,设置环境变量指向 Redis 和 PostgreSQL 的容器名。你需要记住并输入一大堆 docker run 命令,这个过程非常繁琐且容易出错。 Docker Compose 解决了这个问题: 简化流程:用一个文件(docker-compose.yml)描述整个应用栈的架构。一键操作:通过一条命令(docker compose up)就能同时创建、启动所有服务,并处理好它们之间的依赖关系。配置即代码:将你的应用基础设施(服务、网络、存储)用配置文件管理起来,可以纳入版本控制系统,方便协作和追溯。核心概念与工作流程 定义 docker-compose.yml 文件:这是 Docker Compose 的核心。你在这个 YAML 文件中定义你的应用所需的服务、网络和卷。 服务:对应一个容器。你可以指定使用哪个镜像、暴露哪些端口、挂载哪些卷、设置哪些环境变量、依赖哪些其他服务等。网络:定义容器之间通信的网络。卷:定义持久化数据存储的位置。执行 docker compose up 命令:在包含 docker-compose.yml 文件的目录下运行此命令。Compose 会: 自动构建或拉取所需的镜像。按依赖顺序创建并启动所有定义的服务。将所有服务的日志输出聚合到一个流中,方便查看。执行 docker compose down 命令:当你想要停止并清理整个应用时,运行此命令。它会停止所有容器,并删除创建的容器和网络(默认情况下不删除卷)。 总结:Docker Compose 的优点 隔离环境:整个应用栈与主机环境完全隔离。极简配置:一个命令替代了大量复杂的 docker run 命令。快速部署:极大地简化了多容器应用的部署和测试流程,是开发、测试和 CI/CD 环境的理想选择。服务发现:自动在服务之间创建网络,并通过服务名进行DNS解析,使容器间通信变得非常简单。注意:Docker Compose 通常用于开发、测试和单机部署。对于生产环境中跨多台主机的集群管理和编排,更强大的工具如 Kubernetes 或 Docker Swarm 更为合适。不过,Compose 文件可以作为学习这些更复杂工具的基础。 配置文件格式version:指定Docker Compose文件的版本格式,不同版本支持的功能和语法有所不同,高版本兼容低版本services: 服务,可以存在多个 servicename: 服务名字,它也是内部bridge网络可以使用的DNS name,如果不是集群模式相当于docker run的时候指定的一个名称,集群(Swarm)模式是多个容器的逻辑抽象  image: 镜像的名字(必选)  command: 如果设置,则会覆盖默认镜像里的CMD命令  environment: 等价于docker container run里的–env选项,设置环境变量  volumes: 等价于docker container run里的-v选项,绑定数据卷  networks: 等价于docker container run里的–network选项,指定网络  ports: 等价于docker container run里的-p选项,指定端口映射  expose: 可选,指定容器暴露的端口  build: 构建目录  depends_on: 服务依赖配置  env_file: 环境变量文件 servicename2:  image:  command:  networks:  ports: servicename3:#…volumes: # 可选,等价于 docker volume createnetworks: # 可选,等价于 docker network create 参数详解准备这样一个目录结构: mycompose/├── prj1│   └── docker-compose.yml├── prj2│   └── docker-compose.yml└── prj3    └── docker-compose.yml...... image功能:指定容器镜像示例: 创建prj1目录:mkdir prj1在prj1中创建文件docker-compose.ymlcd prj1touch docker-compose.yml编辑docker-compose文件vim docker-compose.yml services:     web:      image: nginx:1.24.0 启动配置docker compose up清除容器docker compose down  接下来就不再详细展示每个步骤,重点讲解第3步文件的配置。command功能:覆盖容器启动的默认指令格式: command: ["bundle", "exec", "thin", "-p", "3000"]//或command: bundle exec thin -p 3000 示例: serveices:  web:    image: nginx:1.24.0    command: bundle exec thin -p 3000 这些内容都写在配置文件docker-compose.yml里面 entrypoint功能:覆盖容器默认的 entrypoint。格式: entrypoint: /code/entrypoint.sh 也可以是列表格式: entrypoint:  - php  - -d  - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so  - -d  - memory_limit=-1  - vendor/bin/phpunit 示例: services:  web:    image: nginx:1.24.0    entrypoint:      - tail      - -f      - /etc/os-release environmentenvironment功能:  添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True 或 False。格式: # map 格式environment:  RACK_ENV: development  SHOW: "true"  USER_INPUT: # 数组格式environment:  - RACK_ENV=development  - SHOW=true  - USER_INPUT= 示例: services:  web:    image: nginx:1.24.0    environment:      TEST: 1  networks功能:配置容器网络示例: services:  web:    image: nginx:1.24.0    networks:      - web1      - web2 networks:  web1:  web2: volume功能:配置容器的存储卷 #短语法volumes:  - "/localhost/postgres.sock:/var/run/postgres/postgres.sock"  - "/localhost/data:/var/lib/postgresql/data"#完整语法volumes:#命名卷  - type: volume    source: db-data    target: /data    volume:      nocopy: true#绑定卷  - type: bind    source: /var/run/postgres/postgres.sock    target: /var/run/postgres/postgres.sock 示例: services:  web:    image: nginx:1.24.0    volumes:      - /home/qsy/gitDocker/data/myvolumes:/usr/share/nginx/html/ ports功能:配置容器的端口映射 #完整语法ports:  - target: 80    host_ip: 127.0.0.1    published: 8080    protocol: tcp    mode: host  - target: 80    host_ip: 127.0.0.1#短语法ports:  - "3000"  - "3000-3005"  - "8000:8000"  - "9090-9091:8080-8081"  - "49100:22"  - "127.0.0.1:8001:8001"  - "127.0.0.1:5000-5010:5000-5010"  - "6060:6060/udp" 示例: services:  web:    image: nginx:1.24.0    ports:      - 7070:80 expose功能:暴露端口,但不映射到宿主机,只被连接的服务访问。仅可以指定内部端口为参数.格式/示例: expose:  - "3000"  - "8000" depends_on功能:设置依赖关系 docker compose up:以依赖性顺序启动服务。在以下示例中,先启动 db 和 redis,才会启动 web。docker compose up SERVICE:自动包含 SERVICE 的依赖项。在以下示例中,docker compose up web 还将创建并启动 db 和 redis。docker compose stop:按依赖关系顺序停止服务。在以下示例中,web 在 db 和 redis 之前停止。version: "3.7"services:  web:    build: .    depends_on:      - db      - redis  redis:    image: redis  db:    image: postgres env_file从文件添加环境变量。可以是单个值或列表的多个值。 env_file: xxx.env 也可以是列表格式: env_file:  - ./.env  - ./apps/web.env  - /opt/secrets.env docker compose指令docker compose 指令与容器操作相似,只不过把容器改成了服务命令格式:docker-compose 命令的基本的使用格式为 docker compose [OPTIONS] COMMAND [ARGS...] 命令清单: docker compose build - 构建服务docker compose config - 以规范格式显示服务配置docker compose cp - 在本地系统和服务容器之间拷贝文件docker compose create - 创建服务的容器docker compose down - 停止所有容器并删除容器docker compose events - 从服务器获取实时事件docker compose exec - 在容器中执行命令docker compose images - 列出所有容器使用的镜像docker compose kill - 强制停止服务的容器docker compose logs - 显示容器日志docker compose ls - 显示所有项目docker compose pause - 暂停服务docker compose port - 列出所有的端口映射docker compose ps - 列出项目中目前的所有容器docker compose pull - 拉取服务镜像docker compose push - 推送服务镜像docker compose restart - 重启服务docker compose rm - 删除已停止的服务容器docker compose run - 在指定服务容器上执行命令docker compose start - 启动当前停止的容器docker compose stop - 停止当前运行的容器docker compose top - 显示运行的进程docker compose unpause - 恢复服务docker compose up - 构建、创建、启动和链接服务相关的容器(支持 --no-recreate 参数避免重新创建,-d 后台运行)docker compose version - 查看版本信息用法和功能与容器的相关指令类似,只是docker compose的操作对象是服务而已。参考文章:Docker容器核心指令关键命令选项up功能:  该命令的作用十分强大,它会尝试自动完成包括构建镜像、(重新)创建服务、启动服务并关联服务相关容器的一系列操作,可以直接通过该命令来启动一个项目。语法: docker compose up [options] [service...]运行本项目bash1选项说明: -d 在后台运行服务器,推荐在生产环境下使用该选项--force-recreate 强制重新创建容器,不能与 --no-recreate 同时使用--no-recreate 如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用down功能:停止所有容器,并删除容器和网络。语法: docker compose down [options] [SERVICE...] 选项说明: -v, --volumes:删除容器同时删除目录映射。run功能:该命令可以在指定服务器上执行相关的命令语法: # 例如:启动一个 ubuntu 服务容器,并执行 ping docker.com 命令# docker compose run ubuntu ping docker.comdocker compose run [options] SERVICE [COMMAND] [ARGS...] 与docker run的区别,该指令是用服务启动容器,而不是镜像选项说明: -d 后台运行容器--name NAME 为容器指定一个名字--entrypoint CMD 覆盖默认的容器启动指令-e KEY=VAL 设置环境变量值,可多次使用选项来设置多个环境变量-u, --user="" 指定运行容器的用户名或者 uid--rm 运行命令后自动删除容器-p, --publish=[] 映射容器端口到本地主机示例:  综合案例docker-compose.yml配置 启动,会先启动依赖的服务。 清理,与启动相反,先清理主要的服务,然后清理依赖的服务。 ————————————————                             版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                        原文链接:https://blog.csdn.net/2302_80105876/article/details/151714145
  • [技术干货] Docker容器操作流程超详细攻略!attach/detach模式怎么选?自动重启如何配置?等等等 一篇带你全吃透!-转载
    一.容器实操测试基本操作与状态迁移基本操作:运行对应镜像(本地不存在就去远端拉取):启动实时日志监测:下面接着创建对应的容器,先不让他跑,然后看下状态变化:可以看到从create 和 stop 状态不同,且都能被start变成运行状态。下面测试下restart状态: 它的状态是从stop再次变成运行状态。测试下暂停状态:状态迁移:容器过滤与查询命令:根据名称过滤得到容器编号命令:docker container ls -qf name=xxx作用:通过名称筛选,仅返回匹配容器的 ID。根据状态过滤容器信息命令:docker container ls --filter status=running作用:只展示状态为 “running(运行中)” 的容器信息。静默获取全部容器 ID命令:docker container ls -aq作用:返回所有容器(包括运行和停止)的 ID,输出简洁无额外信息。过滤镜像名为 xxx 的容器信息命令:docker container ls --filter ancestor=xxx作用:依据镜像名称,筛选出使用该镜像的所有容器信息。过滤镜像 ID 为 xxx 的容器信息命令:docker container ls --filter ancestor=xxx作用:按照镜像 ID,找出基于该镜像创建的容器信息。命令参数解释:-a:列出所有容器(含已停止和正在运行的)。-q:仅返回容器的 ID,不显示其他详细信息。-f:基于指定条件过滤容器,等价于 --filter 选项,用于精准筛选目标容器。如下: 基于多命令组合执行:下面以start所有停止容器为例(~下面的符号):  可以发现所有stop的容器全部起来(除了被kill强制杀死的容器)。容器交互模式attach与detach模式attached 模式命令示例:docker container run -p 80:80 nginx,将宿主机 80 端口映射到容器 80 端口。端口映射说明:第一个 80 是宿主机端口,第二个 80 是容器端口。特点:容器在前台运行,访问时实时打印日志;在 Linux 服务器按 Ctrl+C 可能误停服务;仅适用于容器和程序的调试阶段。detached 模式启动方式:在 docker container run -p 80:80 nginx 命令后加 -d 或 --detach 选项。特点:容器在后台运行,启动时仅显示容器 ID,可继续输入其他命令;关闭窗口容器仍运行,停止或删除需用 shell 命令,减少误操作;比 attached 模式更推荐使用。 默认attach启动,前台被占用。下面试试退出后会怎么样?  发现容器就跟着挂了。下面用detach模式后台运行下(-d):   发现恢复了,无论是否ctrl c后,后台detach模式的容器都不受影响。下面测试下如果对应的网络断开,离线模式等情况会不会影响容器运行:  仍在运行。因此,总结下:默认就是attach模式,也就是前台运行,如果前台受到影响,自然容器就挂了,而如果detach模式,放在后台运行,无论前台咋样,即使离线,只要服务器没挂,容器正常运行不受影响;如果测试环境就用attach,前台运行,而生生产环境就用detach模式,后台运行。interactive模式用途:创建容器后,要在容器内获取信息或执行命令(如Ubuntu容器输Shell命令交互),需进交互模式。创建运行容器并进交互模式:参数:-i 保持容器运行,常与 -t 一起用,搭配 -it 容器创建后自动进入,退出则关闭;-t 为容器分配伪输入终端,常和 -i 配合。前台模式: 前台都需要手动启动nginx命令来开启这个访问,而后台默认自动启动。 发现正常启动。 无论如何ctrl c 都无法关闭,就类似一个bash终端一样。输入exit退出当前环境:  成功退出。测试后台模式:  后台程序,只要不bash,默认自动启动nginx指令。下面进行bash交互并退出: 这里退出只是退出当前容器里的执行bash的这个环境,退出的是这个bash,也就是退了这个在容器中执行命令的这个环境,然后并没退出nginx容器这个环境。总结下:前台运行容器,需要手动启动,而后台只要不启动bash后台就是自动启动nginx,然后前台以bash来运行接收exit退出容器的命令,如果无论是前台还是后台不是以bash运行,而是exec进入容器执行bash命令,此时exit就无法退出容器。也就是说exit是退出当前环境,而容器以bash运行(当前容器环境)和在容器中执行bash命令(exec对应的bash命令这个环境)不是同一个环境。二.宿主机与容器之间进行文件拷贝拿test2做测试:文件拷贝到宿主机:进行vim修改:图片访问原链接查看拷贝回去(覆盖性拷贝):图片访问原链接查看 进行重新访问:图片访问原链接查看 符合预期。不支持容器之间拷贝。三. 容器的自动删除与自动重启自动删除(run的时候带–rm)发现自动删除了,后台程序也是一样(注意是stop不是pause)。自动重启:docker run --restart=no [容器名]:默认值,不自动重启容器。docker run --restart=on-failure:3 [容器名]:仅在容器退出状态非0时自动重启,可指定重启次数(此处为3次),超过次数则放弃重启。docker run --restart=always [容器名]:容器退出时总是自动重启。docker run --restart=unless-stopped [容器名]:容器退出时总是自动重启,但不考虑Docker守护进程启动时就已经停止的容器。若容器启动时未设置--restart参数,可通过docker update --restart=always [容器名]命令更新重启策略。这里默认就是no(查看容器信息): 下面拿always模式测试下(这里需要进入容器,执行容器内设置的退出指令): 但是如果在容器外部被宿主机被stop了呢? 说明stop后不能被重启。四.容器环境变量设置与容器信息查看及借助容器执行特殊任务环境变量设置-e 参数(运行时设置)命令:docker run -e 变量名=值 镜像名特点:仅对当前运行容器有效,适合临时注入少量配置,如密码等敏感信息。–env-file 参数(运行时从文件加载)命令:docker run --env-file 文件路径 镜像名特点:从文件批量加载多个环境变量到当前运行容器,适合管理多个配置项。测试下:-e: 符合预期。--env-file :按照文件给它输进去:  符合预期。容器详情信息查看这里其实就是docker ps 与docker container inspect 容器名字 这两命令;前者是后者的简单提取,后者是更详细的: 宿主机靠容器执行单行命令我们可以直接借助 docker 的容器环境执行一些命令,比如容器中有某个命令而宿主机上没有这个时候借助容器可以完成某些任务。假设宿主机没有ping与ifconfig这个命令(借助busybox): 这里看到的都是容器的,以容器的视角执行的命令(一般测试容器命令的时候可以这样,测试的都是对外通用的命令)。————————————————                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                        原文链接:https://blog.csdn.net/2401_82648291/article/details/150776761
  • [技术干货] 【Docker】在银河麒麟ARM环境下离线安装docker-转载
    1、前言采用离线安装的方式。关于离线安装的方式官网有介绍,但是说的很简单,网址:Binaries | Docker Docs官网介绍的有几种主流linux系统的安装方式,但是没有kylin的,所以在此记录一下。在安装过程中也遇到了些问题,走了些弯路。在此记录的只是某一种能正常安装的方式,也许也有其它方式能够安装成功,欢迎一起交流。2、kylin系统信息官网上有关于系统要求的: 系统版本信息 查看Linux内核 查看iptables版本 查看处理器架构 3、下载官网下载对应版本:Index of linux/static/stable/ 麒麟系统是arm架构的,下载aarch64版本,下载的是当时最新版 4、安装将下载文件拷贝到kylin电脑目录下,解压: 将解压后的文件移动或拷贝到/usr/bin/目录下,注意使用sudo,后面的命令都要使用sudo。mv docker/* /usr/bin/AI写代码bash此时就可以查看docker版本 5、配置docker服务先创建两个系统文件(后面的操作都需要sudo)docker.servicevim /etc/systemd/system/docker.serviceAI写代码bash输入以下内容[Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comAfter=network-online.target firewalld.serviceWants=network-online.targetRequires=docker.socket [Service]Type=notifyExecStart=/usr/bin/dockerdExecReload=/bin/kill -s HUP $MAINPIDTimeoutStartSec=0Restart=on-failureStartLimitBurst=3StartLimitInterval=60sLimitNOFILE=infinityLimitNPROC=infinityDelegate=yesKillMode=process [Install]WantedBy=multi-user.targetAI写代码bashdocker.socketvim /etc/systemd/system/docker.socketAI写代码bash输入以下内容[Unit]Description=Docker Socket for the APIPartOf=docker.service [Socket]ListenStream=/var/run/docker.sockSocketMode=0660SocketUser=rootSocketGroup=docker [Install]WantedBy=sockets.targetAI写代码bash为docker.service添加执行权限chmod +x docker.serviceAI写代码bash编辑daemon.json,没有就创建vim /etc/docker/daemon.jsonAI写代码bash输入以下内容{  "registry-mirrors":["https://mirrors.ustc.edu.cn"],  "exec-opts":["native.cgroupdriver=systemd"]}AI写代码bash所有的配置文件编辑并保存后,执行systemctl daemon-reloadAI写代码bash6、启动docker服务systemctl start docker.serviceAI写代码bash如果想开机自动启动,输入以下指令:systemctl enable docker.serviceAI写代码bash7、验证docker是否安装成功执行 docker info 命令能显示如下信息: 或者输入 docker version(注意:没有 - ) 8、Hello world熟悉的 hello world……执行 docker run hello-world 命令报错:docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 这种是镜像仓库路径配置的有问题,按照如下修改daemon.json:{  "registry-mirrors":["https://mirrors.ustc.edu.cn","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc"  ],  "exec-opts":["native.cgroupdriver=systemd"]}AI写代码bash保存退出,执行下面的命令:systemctl daemon-reloadsystemctl restart docker.servicedocket run hello-worldAI写代码bash出现以上信息应该就说明docker安装的没问题了。————————————————                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                        原文链接:https://blog.csdn.net/bailang_zhizun/article/details/147770700
  • [云实验室] 轻松快速上手 Docker
    华为云Docker教程在解决系统特异性问题(如依赖冲突、配置校验)上提供了实用方案,但需用户具备一定Linux排错能力。其与SWR镜像服务的深度整合,是构建稳定容器化管道的关键利器 💪。
  • [问题求助] 没有管理员权限无法下载docker等系统级软件
    我想本地部署deepseek,借助modelarts平台昇腾算力,在要拉取镜像时发现,modelarts的管理员权限不开放,导致我无法下载docker,卡在这里,我想在这里求助一下,还有其他下载docker的方法吗?
  • [技术干货] Docker使用、容器迁移的方案详解 --转载
    Docker 简介Docker 是一个开源的容器化平台,用于打包、部署和运行应用程序及其依赖环境。Docker 容器是轻量级的虚拟化单元,运行在宿主机操作系统上,通过隔离机制(如命名空间和控制组)确保应用运行环境的一致性和可移植性。Docker 的核心组件包括:Docker Engine:运行和管理容器的核心服务。Docker Image:只读模板,包含应用及其依赖,用于创建容器。Docker Container:镜像的运行实例。Docker容器迁移在纯Docker模式下,迁移容器主要涉及镜像和相关数据的迁移。以下是两种推荐方案:1. 使用Docker Registry迁移镜像方案概述:将容器的基础镜像推送到Docker Registry(可以是公有的如Docker Hub,也可以是私有的),然后在目标环境从Registry拉取镜像并运行容器。步骤:在源环境推送镜像:12docker tag <image_name>:<tag> <registry_url>/<image_name>:<tag>docker push <registry_url>/<image_name>:<tag>在目标环境拉取并运行:12docker pull <registry_url>/<image_name>:<tag>docker run -d --name <container_name> <registry_url>/<image_name>:<tag>优点:安全性:Registry支持认证和加密传输,确保镜像不被篡改。简便性:通过网络传输镜像,无需手动复制文件。版本控制:支持镜像版本管理,便于回滚或升级。注意事项:需要网络连接和Registry的访问权限。确保Registry配置安全(如启用HTTPS)。2. 使用docker save​和docker load​迁移镜像方案概述:将镜像保存为tar文件,传输到目标环境后加载并运行,适合离线场景。步骤:在源环境保存镜像:1docker save -o <image_name>.tar <image_name>:<tag>将tar文件传输到目标环境(例如通过SCP或U盘)。在目标环境加载镜像并运行:12docker load -i <image_name>.tardocker run -d --name <container_name> <image_name>:<tag>优点:安全性:tar文件可通过加密传输(如使用GPG加密)确保安全。简便性:无需网络连接,适合离线环境。注意事项:tar文件可能较大,传输和存储需规划。不包含运行时配置(如端口映射、环境变量),需手动设置。数据卷迁移如果容器使用了数据卷,还需要迁移数据:步骤:备份数据卷:通过docker volume inspect​找到挂载路径,手动复制数据,或使用备份工具(如docker-volume-backup​)。在目标环境恢复数据卷:将备份文件复制到相应路径。优点:备份可加密,确保数据安全;保证数据完整性。注意事项:需确保目标环境的路径和权限一致。推荐:优先使用Docker Registry迁移镜像,因其安全性和版本管理优势更突出。若无网络环境,可选择docker save/load​方案。数据卷需单独备份和恢复。
  • [技术干货] Docker Compose 使用实例详解 --转载
    一、Docker Compose 简介Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具,通过 YAML 文件配置应用程序服务,一键启动所有关联容器。二、安装 Docker ComposeLinux:12sudo curl -L "https://mirrors.tuna.tsinghua.edu.cn/docker/compose/releases/download/v2.32.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composeWindows/macOS:通过 Docker Desktop 安装(已内置 Compose)验证安装:1docker-compose --version三、基础配置文件示例(docker-compose.yml)12345678910111213141516171819202122232425262728293031version: '3.8'  # Compose文件格式版本services:  web:    build: .  # 使用当前目录的Dockerfile构建    ports:      - "8000:80"  # 主机端口:容器端口    depends_on:      - db    environment:      - DB_HOST=db    networks:      - mynetwork  db:    image: mysql:8.0    volumes:      - db_data:/var/lib/mysql    environment:      MYSQL_ROOT_PASSWORD: example      MYSQL_DATABASE: myapp    networks:      - mynetwork    healthcheck:      test: ["CMD-SHELL", "mysqladmin ping -h localhost"]      interval: 30s      timeout: 10s      retries: 3volumes:  db_data:networks:  mynetwork:    driver: bridge四、关键配置解析version:指定Compose文件格式版本(常用3.x)services:定义服务(容器)build:指定构建上下文路径(含Dockerfile)image:直接使用官方镜像ports:端口映射depends_on:服务依赖关系environment:环境变量设置volumes:数据卷定义(持久化存储)networks:自定义网络配置healthcheck:容器健康检查五、常用命令启动服务:12docker-compose up -d  # 后台启动docker-compose up --build  # 重新构建后启动停止服务:12docker-compose down  # 停止并删除容器、网络等docker-compose stop  # 仅停止容器查看日志:12docker-compose logs -f  # 实时查看日志docker-compose logs web  # 查看指定服务日志进入容器:1docker-compose exec web bash  # 进入web容器构建镜像:12docker-compose build  # 构建所有服务镜像docker-compose build web  # 仅构建web服务镜像六、完整项目示例(Node.js + MySQL + Nginx)项目结构:12345678910myapp/├── docker-compose.yml├── nginx/│   ├── nginx.conf│   └── Dockerfile├── app/│   ├── package.json│   ├── server.js│   └── Dockerfile└── .envdocker-compose.yml:123456789101112131415161718192021222324252627282930313233343536373839404142434445version: '3.8'services:  nginx:    build: ./nginx    ports:      - "80:80"    depends_on:      - app    networks:      - frontend      - backend  app:    build: ./app    environment:      - NODE_ENV=production      - DB_HOST=db    networks:      - backend    depends_on:      db:        condition: service_healthy  db:    image: mysql:8.0    volumes:      - db_data:/var/lib/mysql    environment:      MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password      MYSQL_DATABASE: myapp    secrets:      - db_root_password    networks:      - backend    healthcheck:      test: ["CMD-SHELL", "mysqladmin ping -h localhost"]      interval: 30s      timeout: 10s      retries: 3volumes:  db_data:networks:  frontend:  backend:secrets:  db_root_password:    file: .envapp/Dockerfile:123456FROM node:18-alpineWORKDIR /appCOPY package*.json ./RUN npm install --productionCOPY . .CMD ["npm", "start"]nginx/Dockerfile:12FROM nginx:alpineCOPY nginx.conf /etc/nginx/conf.d/default.confnginx/nginx.conf:12345678server {    listen 80;    location / {        proxy_pass http://app:3000;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;    }}.env:1DB_ROOT_PASSWORD=supersecret七、高级功能扩展配置:12345678# 扩展服务实例app:  deploy:    replicas: 3  resources:    limits:      cpus: '0.5'      memory: 512M多环境配置:123456789# docker-compose.override.yml(开发环境)version: '3.8'services:  app:    build: ./app    volumes:      - ./app:/app  # 挂载代码目录实现热更新    environment:      - NODE_ENV=development使用模板文件:1234# docker-compose.ymlservices:  app:    image: myapp:${TAG}八、最佳实践使用.env文件管理敏感信息为不同环境创建独立的Compose文件(如docker-compose.prod.yml)使用健康检查确保服务启动顺序对持久化数据使用命名卷定期清理未使用的镜像和卷:1docker system prune -a九、调试技巧查看容器状态:1docker-compose ps检查网络配置:1docker network inspect mynetwork验证配置文件:1docker-compose config
  • [课程学习] 学习docker使用
    教程非常适合新手,学到了不少东西
  • [热门活动] 【案例共创】ESC基于RAGFlow和DeepSeek构建本地问答知识库
    【案例共创】ESC基于RAGFlow和DeepSeek构建本地问答知识库一、案例介绍在人工智能技术飞速发展的当下,企业知识库智能化正成为提升运营效率的核心路径。DeepSeek 几乎家喻户晓,而 RAGFlow 是一个基于深入文档理解的开源RAG(检索增强生成)引擎。当与LLMs集成时,它能够提供真实的问题回答功能,并由来自各种复杂格式数据的有理有据的引用支持。本次我们基于ESC使用 Docker 部署RAGFlow,并使用 ollama 部署 DeepSeek R1 模型和 bge-m3 嵌入模型,体验 RAGFlow 的知识库、对话、Agent等功能,通过RAGFlow的智能文档解析与DeepSeek大语言模型的精准推理能力,构建具备多源异构数据处理、语义深度理解及动态知识更新特征的问答知识库、Agent。二、案例用时本案例总时长预计120分钟。三、案例流程 说明:通过ECS中安装dokcer部署ragflow通过ECS中docker部署ollama来运行deepseek通过配置ragflow来调用deepseek-r1模型能力用过通过公网ip访问ECS从而体验ragflow+deepseek四、资源总览云资源消耗/时时长ECS(含公网IP、磁盘等)0.9885120min合计:1.977元五、实践步骤0. 购买ECS配置如下:bash计费模式: 按需计费区域: 西南-贵阳一可用区: 随机分配CPU架构:x86计算实例规格:通用计算增强型 | x1e.4u.16g | 4vCPUs | 16GiB镜像: 公共镜像-Ubuntu 24.04 server 64bit(10GiB)磁盘: 通用型SSD 50G弹性公网IP:现在购买-全动态BGP-按带宽计算-5Mbit/s-随实例释放云服务器名称:ecs-ragflow密码:RagFlow@123使用时长:设定删除时间为 8 小时之后购买数量: 1清单链接:https://www.huaweicloud.com/pricing/calculator.html?shareListId=267c3c60fc6411efa933bd915e6892f51、安装 RAGFlow1.1 安装 Docker CE 和 Docker Compose打开终端,新建 install-docker.sh:bash# 查看系统uname -alsb_release -a# 准备安装 dockercd ~pwdmkdir RAGFlowcd RAGFlowvi install-docker.sh写入以下脚本到 install-docker.shbash#!/bin/bash# 定义日志文件路径LOGFILE="/var/docker-install.log"# 将标准输出和错误输出重定向到日志文件,同时显示到终端exec > >(tee -a "$LOGFILE") 2>&1# 设置DEBUG模式下的时间戳输出格式trap '{ set +x; } 2>/dev/null; echo -n "[$(date -Is)] "; set -x' DEBUG# 下载并安装 docker CE 和 docker composeecho "开始安装 Docker CE 和 Docker Compose..."# 添加Docker官方GPG密钥curl -fsSL https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -echo "已添加 Docker GPG 密钥"# 添加Docker软件源echo "" | sudo add-apt-repository "deb [arch=amd64] https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"echo "已添加 Docker 软件源"# 更新软件包列表echo "正在更新软件包列表..."echo "y" | sudo apt-get update# 安装Docker CE和Docker Composeecho "正在安装 Docker CE 和 Docker Compose..."echo "y" | sudo apt-get install docker-ce docker-composeecho "Docker 安装完成"# 配置docker镜像仓库为华为云镜像echo "正在配置华为云镜像源..."sudo echo '{"registry-mirrors": ["https://b4a1f63a156e435f9aeb797bdf515250.mirror.swr.myhuaweicloud.com"]}' >/etc/docker/daemon.json# 重启docker服务使配置生效echo "正在重启 Docker 服务..."sudo systemctl restart dockerecho "Docker 配置完成"接着运行 docker 安装脚本:bashsudo bash ./install-docker.sh我们查看版本发现 docker-compse 版本有点低,可能会影响后续的安装,因此尝试升级 docker-composebashdocker -vdocker-compse -v升级 docker-compose:bash# 先看看 docker-compose 的路径whereis docker-compose# 备份一下sudo mv /usr/bin/docker-compose /usr/bin/docker-compose.bak# 下载对应系统的 docker-composewget https://github.com/docker/compose/releases/download/v2.33.1/docker-compose-linux-x86_64 -O docker-compose# 如果速度慢可以尝试使用加速源,如 https://hub.gitmirror.com/、https://github.moeyy.xyz/、https://ghfast.top/# wget https://hub.gitmirror.com/https://github.com/docker/compose/releases/download/v2.33.1/docker-compose-linux-x86_64 -O docker-compose# 也可以自行去 github 下载: https://github.com/docker/compose/releases# 替换 docker-composesudo cp ./docker-compose /usr/bin/docker-compose# 加权限sudo chmod +x /usr/bin/docker-compose# 验证docker-compose -v1.2 安装 RAGFlow先设置一下最大虚拟内存。vm.max_map_count该值设置进程可能拥有的内存映射区域的最大数量。它的默认值是65530。虽然大多数应用程序需要的映射少于一千个,但减小此值可能会导致异常行为,并且当进程达到限制时,系统将抛出内存不足错误。RAGFlow v0.17.0使用Elasticsearch或Infinity进行多次调用。正确设置vm.max_map_count的值对于Elasticsearch组件的正常运行至关重要。bash# 检查vm.max_map_count的值sysctl vm.max_map_count# 如果小于 262144 则至少设置为 262144sudo sysctl -w vm.max_map_count=262144接着安装 RAGFlowbash# 下载源码git clone https://github.com/infiniflow/ragflow.git# 如果下载比较慢请尝试使用镜像加速,如:# git clone https://ghfast.top/https://github.com/infiniflow/ragflow.gitcd ragflow/docker# 切换最新稳定分支 (截止 20205-03-08 为 0.17.0)git checkout -f v0.17.0git branch我们可以修改 .env 启用全量版本(非必须,可无须修改直接使用 slim 版本),并设置 docker 镜像源:bashsudo echo '{"registry-mirrors": ["https://b4a1f63a156e435f9aeb797bdf515250.mirror.swr.myhuaweicloud.com"]}' >/etc/docker/daemon.jsonRAGFlow镜像标签镜像大小(GB)是否包含嵌入模型和Python包是否稳定v0.17.0≈9✔️稳定版本v0.17.0-slim≈2❌稳定版本nightly≈9✔️nightly 构建不稳定nightly-slim≈2❌nightly 构建不稳定接着通过 docker-compose 启动 RAGFlow,全量的镜像约 9G,安装稍微慢些,需要耐心等待大约10分钟bash# 拉取镜像并启动(默认不包含 embedding 模型, 可以修改 .env 配置,选为华为云镜像v0.17.0 )# vi .env 找到对应位置进行修改docker-compose -f docker-compose.yml up -d# 如果minio拉取不顺,请尝试切换镜像源,需修改 docker-compose-base.yml 的:quay.io 为 quay.m.daocloud.io# 查看日志docker-compose logs -f ragflow-server# 查看端口情况netstat -nptl2. 访问本地 RAGFlow并配置模型RAGFlow是一个RAG引擎,需要与大模型服务一起搭配使用,实现本地、无幻觉的问答功能。RAGFlow支持大多数主流LLMs。2.1 访问本地RAGFlow 并注册账号登录如本次案例中 ecs-ragflow 的 ip 为1.95.184.111 则访问: http://1.95.184.111/login ,注册账号即可使用 RAGFlow。登录之后的主界面如下:⚠️本地模型为选配,同样可以使用其他大模型API服务,比如 Mass、硅基流动等2.2 通过 Docker 安装 ollama首先我们设置docker镜像源,重启docker之后,通过docker拉取ollama镜像并运行bash# 设置 docker 镜像源sudo echo '{"registry-mirrors": ["https://b4a1f63a156e435f9aeb797bdf515250.mirror.swr.myhuaweicloud.com"]}' >/etc/docker/daemon.jsonsudo systemctl restart dockersudo docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama2.3 安装 DeepSeek-R1 模型和 bge-m3 鉴于网络下载速度比较慢,我们拉取相对较小的 deepseek-r1:1.5b 和嵌入模型 bge-m3 (预计25分钟,具体看网络状况)bash# 拉取 deepseek-r1:1.5bsudo docker exec ollama ollama pull deepseek-r1:1.5b# 拉取 bge-m3sudo docker exec ollama ollama pull bge-m32.4 配置模型虽然RAGFlow和Ollama都是跑在同一台机器上,但由于分别使用了docker-compose和docker来部署,可能会导致网络不通的情况,那我们可以通过暴露 11434 ollama的端口来提高大模型服务。于是,我们在模型提供商选择Ollam之后分别配置了嵌入模型 bge-m3 和聊天模型deepseek-r1:1.5b。接着并在设置--系统模型设置中配置好聊天模型和嵌入模型。3. 简单使用接下来,我们简单体验一下RAGFlow 提供的功能,分别是知识库、聊天、搜索、Agent。3.1 知识库功能体验点击知识库,我们创建了一个名为ModelArts助手的知识库,传入了几个pdf文件作为本地知识库。在RAGFlow中知识库被称为数据集,我们可以上次多个文件作为数据集,并通过不通的解析方法将文档进行处理如切片、Q/A等。解析成功的文档可以在后续功能中作为知识库引入。3.2 聊天功能体验我们创建了ModelArts助手的助理,可以对助理进行配置如基本信息、关键词分析、模型参数设置等,并选取知识库作为回答语料。我们一个“如何快速入门”的简单问题开始,AI助理根据挂载的知识给了相关的回答。3.3 搜索功能体验在RAGFlow中,还有搜索功能,类似于传统的搜索引擎给出结果并添加了智能回答和思维导图。3.4 Agent功能体验最后我们来体验Agent功能,这里我们使用的是预置的 text2sql。Agent 会提供一个工作流编排界面,并提供运行测试功能,我们发现Agent也是可以作为单独的页面嵌入到其他网站,简单地要Agent给出“用户转化率”,它基于 deepseek-r1 模型,因此也有思考能力,最终它生成了一段完整的 SQL 语句。至此,案例实践就结束了,记得释放资源哦!记得释放资源哦!记得释放资源哦!我正在参加【案例共创】第2期 构建开发场景最佳实践/体验评测,创作案例文章cid:link_0
  • [专题汇总] 二月技术干货合集【合集贴】
    1.Docker应用部署(Mysql、tomcat、Redis、redis)https://bbs.huaweicloud.com/forum/thread-0251176000289103057-1-1.html    2. 鸿蒙NEXT开发案例:随机数生成https://bbs.huaweicloud.com/forum/thread-0226175856046738051-1-1.html3.ExaGear for Server on Ubuntuhttps://bbs.huaweicloud.com/forum/thread-02127175583262901024-1-1.html4.惊叹数据结构之美,品味排序算法之妙:对快排的详细介绍 -转载https://bbs.huaweicloud.com/forum/thread-0210175572143077031-1-1.html5.修改 Docker 容器的 http_proxy 和 https_proxy -转载https://bbs.huaweicloud.com/forum/thread-02127175572007355023-1-1.html6.【Linux】gdb_进程概念-转载https://bbs.huaweicloud.com/forum/thread-0257175571963347026-1-1.html7.详解Redis之事务-转载https://bbs.huaweicloud.com/forum/thread-0251175571892832022-1-1.html8.Python中的对象关系映射SQLAlchemy ORM在Web开发中的实践 -转载https://bbs.huaweicloud.com/forum/thread-0218175571849778026-1-1.html9.鸿蒙NEXT开发案例:颜文字搜索器https://bbs.huaweicloud.com/forum/thread-0225175848016900053-1-1.html10.鸿蒙NEXT开发案例:经纬度距离计算https://bbs.huaweicloud.com/forum/thread-02127175847897096052-1-1.html11.鸿蒙NEXT开发案例:世界时间表https://bbs.huaweicloud.com/forum/thread-0220175848120824046-1-1.html12.鸿蒙NEXT开发案例:保质期计算https://bbs.huaweicloud.com/forum/thread-0257175848211239048-1-1.html13.鸿蒙NEXT开发案例:九宫格随机https://bbs.huaweicloud.com/forum/thread-0257175848540835049-1-1.html14.Python中的对象关系映射SQLAlchemy ORM在Web开发中的实践 -转载https://bbs.huaweicloud.com/forum/thread-0218175571849778026-1-1.html15.【MySQL】 表的操作-转载https://bbs.huaweicloud.com/forum/thread-0220174982575490008-1-1.html
  • [技术干货] Docker应用部署(Mysql、tomcat、Redis、redis)
    Docker 是一种开源的容器化技术,它可以帮助开发人员和运维人员以更高效、更轻松的方式管理应用程序和服务。通过容器技术,我们可以将应用与其所有的依赖包一起打包,使得应用可以在任何环境中快速、可靠地运行。本文将展示如何在 Docker 容器中部署 MySQL、Tomcat 和 Redis 服务,帮助你快速构建一个多服务的应用环境。1. 准备工作在开始 Docker 部署之前,请确保已经安装了 Docker。可以通过以下命令检查 Docker 是否安装成功:bashCopy Codedocker --version如果没有安装 Docker,可以参考官方文档进行安装:Docker 官方安装文档2. 部署 MySQL 服务2.1. 拉取 MySQL 镜像首先,我们需要拉取 MySQL 镜像。使用 Docker Hub 提供的官方 MySQL 镜像:bashCopy Codedocker pull mysql:latest2.2. 启动 MySQL 容器接下来,通过以下命令启动一个 MySQL 容器:bashCopy Codedocker run --name mysql-container -e MYSQL_ROOT_PASSWORD=root -d mysql:latest--name mysql-container:指定容器名称为 mysql-container。-e MYSQL_ROOT_PASSWORD=root:设置 MySQL 的 root 用户密码为 root。-d:以后台模式运行容器。mysql:latest:使用 mysql 的最新版本镜像。2.3. 连接到 MySQL 容器要进入 MySQL 容器,可以使用以下命令:bashCopy Codedocker exec -it mysql-container mysql -uroot -p输入密码 root 即可进入 MySQL 命令行。2.4. 设置数据库在 MySQL 中创建一个数据库和一个用户(可选):sqlCopy CodeCREATE DATABASE mydb; CREATE USER 'myuser'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%'; FLUSH PRIVILEGES;3. 部署 Tomcat 服务3.1. 拉取 Tomcat 镜像我们可以使用官方的 Tomcat 镜像:bashCopy Codedocker pull tomcat:latest3.2. 启动 Tomcat 容器启动 Tomcat 容器,指定要暴露的端口:bashCopy Codedocker run --name tomcat-container -d -p 8080:8080 tomcat:latest--name tomcat-container:指定容器名称为 tomcat-container。-d:后台运行容器。-p 8080:8080:将容器内的 8080 端口映射到主机的 8080 端口。Tomcat 启动后,可以通过浏览器访问 http://localhost:8080 来查看 Tomcat 默认的欢迎页面。3.3. 部署 Web 应用将自己的 WAR 文件部署到 Tomcat 中的 webapps 目录中,方法如下:bashCopy Codedocker cp your-app.war tomcat-container:/usr/local/tomcat/webapps/将 your-app.war 替换为你自己的应用包。重新启动 Tomcat 容器以加载新部署的应用:bashCopy Codedocker restart tomcat-container此时,你的应用可以通过 http://localhost:8080/your-app 来访问。4. 部署 Redis 服务4.1. 拉取 Redis 镜像我们可以使用官方的 Redis 镜像:bashCopy Codedocker pull redis:latest4.2. 启动 Redis 容器启动 Redis 容器并将端口映射到主机:bashCopy Codedocker run --name redis-container -d -p 6379:6379 redis:latest--name redis-container:指定容器名称为 redis-container。-d:后台运行容器。-p 6379:6379:将容器内的 6379 端口映射到主机的 6379 端口。4.3. 连接到 Redis 容器要连接到 Redis 容器,可以使用以下命令:bashCopy Codedocker exec -it redis-container redis-cli5. 测试应用是否正常运行测试 MySQL:可以通过以下命令测试 MySQL 服务是否正常运行:bashCopy Codedocker exec -it mysql-container mysql -uroot -p -e "SHOW DATABASES;" 这会列出当前 MySQL 实例中的所有数据库。测试 Tomcat:通过访问 http://localhost:8080,可以检查 Tomcat 是否成功启动。测试 Redis:可以通过以下命令测试 Redis 是否正常运行:bashCopy Codedocker exec -it redis-container redis-cli ping如果返回 PONG,则表示 Redis 正常运行。6. 总结通过 Docker 容器化技术,我们能够轻松地部署 MySQL、Tomcat 和 Redis 服务。Docker 提供了简单的命令来启动、配置和管理这些服务,使得开发和部署过程更加高效和便捷。通过容器化的方式,你可以确保应用在任何环境中都能保持一致性和可移植性。这种方法对于开发、测试以及生产环境的部署都非常有用,并且可以通过 Docker Compose 进一步简化多个服务的管理。希望这篇文章能帮助你更好地理解如何使用 Docker 部署和管理 MySQL、Tomcat 和 Redis 服务。
  • [技术干货] 修改 Docker 容器的 http_proxy 和 https_proxy -转载
    修改 Docker 容器的 http_proxy 和 https_proxy 可以通过几种方式实现。以下是一些常用的方法:在运行容器时设置环境变量:当你启动一个新的容器时,可以使用 -e 选项设置这些环境变量:docker run -e HTTP_PROXY=http://proxy.example.com:8080 -e HTTPS_PROXY=http://proxy.example.com:8080 your_image1对于已经运行的容器:a. 使用 docker exec 命令:docker exec -it your_container_name /bin/bashexport HTTP_PROXY=http://proxy.example.com:8080export HTTPS_PROXY=http://proxy.example.com:8080123注意,这种方法只在当前会话中有效,容器重启后就会失效。b. 修改容器的 /etc/environment 文件:docker exec -it your_container_name /bin/bashecho "HTTP_PROXY=http://proxy.example.com:8080" >> /etc/environmentecho "HTTPS_PROXY=http://proxy.example.com:8080" >> /etc/environment123这种方法在容器重启后仍然有效。在 Dockerfile 中设置:如果你正在构建自己的镜像,可以在 Dockerfile 中设置这些环境变量:ENV HTTP_PROXY http://proxy.example.com:8080ENV HTTPS_PROXY http://proxy.example.com:808012使用 Docker Compose:如果你使用 Docker Compose,可以在 docker-compose.yml 文件中设置环境变量:version: '3'services:  your_service:    image: your_image    environment:      - HTTP_PROXY=http://proxy.example.com:8080      - HTTPS_PROXY=http://proxy.example.com:8080修改 Docker 守护进程的配置:你可以为 Docker 守护进程设置全局代理,这会影响所有容器。编辑 /etc/systemd/system/docker.service.d/http-proxy.conf 文件(如果不存在就创建它):[Service]Environment="HTTP_PROXY=http://proxy.example.com:8080"Environment="HTTPS_PROXY=http://proxy.example.com:8080"123然后重启 Docker 服务:sudo systemctl daemon-reloadsudo systemctl restart docker12注意事项:确保使用正确的代理地址和端口。某些应用程序可能使用小写的环境变量名(http_proxy, https_proxy),你可能需要同时设置大写和小写版本。如果你的代理需要认证,格式应该是:http://username:password@proxy.example.com:8080————————————————                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                        原文链接:https://blog.csdn.net/jsyzliuyu/article/details/142873507
  • [技术干货] docker 中的 entrypoint.sh
    entrypoint.sh 文件通常用于 Docker 容器中,作为容器启动时执行的默认脚本。这个文件定义了容器启动时需要执行的一系列命令或操作。通过自定义 entrypoint.sh,开发者可以控制容器如何初始化、启动应用程序、设置环境变量等。下面是一些关于 entrypoint.sh 的关键点和用法示例:关键点启动应用程序:entrypoint.sh 中通常会包含启动容器中主要应用程序的命令。环境配置:可以在脚本中设置环境变量,确保应用程序在正确的环境中运行。权限管理:根据需要,脚本中可能包含更改文件或目录权限的命令。前置/后置操作:在启动应用程序之前或之后,可以执行一些前置或后置操作,比如数据库迁移、静态资源编译等。错误处理:添加错误处理逻辑,确保在出现问题时能够正确记录日志或进行其他处理。示例以下是一个简单的 entrypoint.sh 示例,它展示了如何设置环境变量、执行一个前置操作(如数据库迁移),然后启动应用程序:#!/bin/sh # 设置环境变量 export DATABASE_URL="postgres://user:password@db/dbname" # 前置操作:数据库迁移 echo "Running database migrations..." ./manage.py migrate # 启动应用程序 echo "Starting application..." exec gunicorn myapp.wsgi:application --bind 0.0.0.0:8000使用方法创建 entrypoint.sh 文件:在你的项目根目录或 Docker 上下文中创建一个名为 entrypoint.sh 的文件,并将上述脚本内容粘贴进去。修改权限:确保 entrypoint.sh 文件具有可执行权限。你可以使用 chmod +x entrypoint.sh 命令来设置。在 Dockerfile 中引用:在你的 Dockerfile 中,使用 COPY 命令将 entrypoint.sh 文件复制到镜像中,并使用 ENTRYPOINT 指令指定它为容器启动时执行的命令。例如:# ... 其他 Dockerfile 指令 ... COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] 构建和运行容器:使用 docker build 命令构建镜像,然后使用 docker run 命令启动容器。此时,容器将按照 entrypoint.sh 中定义的逻辑启动和运行。通过自定义 entrypoint.sh,你可以灵活控制 Docker 容器的启动过程,确保应用程序在最佳状态下运行。
  • [问题求助] 开发者空间的ubuntu系统如何安装docker?试了好几种网上的方案,都报错
    开发者空间的ubuntu系统如何安装docker?试了好几种网上的方案,都报错