news 2026/4/17 13:17:45

【亲测有效】linux centos7.9裸机极简极速安装docker,临时用干净任意版本python环境跑后台程序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【亲测有效】linux centos7.9裸机极简极速安装docker,临时用干净任意版本python环境跑后台程序

docker极速安装:

第一步:极速安装 Docker(使用阿里云源)如果有报错就重复执行几次,有时候是网络抖动

这段命令会自动安装依赖、配置阿里云 Docker 源、替换底层下载地址,并完成安装与启动:

# 1. 安装必备的依赖工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 2. 添加阿里云的 Docker CE 镜像源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 3. 强制将 repo 文件中的官方地址替换为阿里云地址(防止部分依赖仍然去官方拉取导致超时)
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

# 4. 安装 Docker 核心组件
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 5. 启动 Docker 并设置开机自启
sudo systemctl enable --now docker

docker

第二步:配置国内拉取镜像加速器(一劳永逸)

为了让你以后docker rundocker pull任何镜像都不再卡顿,我们需要配置daemon.json

# 1. 创建配置目录
sudo mkdir -p /etc/docker

# 2. 写入国内可用的镜像源配置
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerpull.com",
"https://docker.1panel.live"
]
}
EOF

# 3. 重载配置并重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker

第三步:让xxx用户免 sudo 直接使用 Docker

将操作用户加入docker用户组(日常与运维最标准做法)

这是最常规的解决方式。Docker 在安装时通常会创建一个名为docker的用户组。该组的用户被授予了访问docker.sock的权限。

操作方法:

这一步解决你“普通用户直接使用”的需求。我们将xxx用户加入docker专属用户组。

# 1. 如果 docker 组不存在,先创建(通常已存在)
sudo groupadd docker

# 2. 将当前用户(bigdata)加入 docker 组
sudo usermod -aG docker $USER

# 3. 刷新用户组权限(或者退出当前终端重新登录)
newgrp docker

⚠️ 关键最后一步:执行完上述命令后,权限不会立刻在当前终端窗口生效。你需要让权限刷新,有两种极简方式:

  1. 直接执行:newgrp docker(仅在当前窗口立刻生效)

  2. 或者最推荐的:彻底退出当前 SSH 连接(输入exit),然后重新登录xxx用户。

重新登录后,输入docker ps,如果没有报permission denied错误,说明你的极简国内 Docker 环境已经完美就绪了。


以下方法无需下载单独python解释器,miniconda等大文件的包,全靠docker自带的镜像拉取对应的python解释器,并且安装依赖,极大简化在陌生的临时的linux下运行复杂依赖的python程序,做快速验证,快速拿结果。

一次性用docker 指定python环境,执行本地一个要安装依赖库的程序,打印到控制台,ctrl+c推出程序:

命令级替换(最快,立刻就能跑)

不需要修改任何系统配置,直接在命令里加上国内第三方镜像库的代理前缀。

把你命令里的python:3.10-slim替换为docker.m.daocloud.io/library/python:3.10-slim或者dockerpull.com/python:3.10-slim

直接复制运行这段:

docker run --rm \
-u $(id -u):$(id -g) \
-v /home/xxx/workdir:/workdir \
-w /workdir \
-e PYTHONPATH=/workdir/libs \
-e HOME=/workdir \
docker.m.daocloud.io/library/python:3.10-slim bash -c "pip install --no-cache-dir -t /workdir/libs -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple && python xxx.py"

解释:

1,--rm参数,一旦程序被Ctrl + C中断停止,Docker 会立刻将这个容器彻底删除

2,增加了-u $(id -u):$(id -g)映射权限,以及-e HOME=/workdir确保 pip 在非 root 状态下有权限写入缓存或直接用--no-cache-dir规避缓存报错。

3,Docker 容器默认使用 UTC 时区 ,国内宿主机是 CST(北京时间,UTC+8)。不然docker里日志打印时间会相差8小时。

解决方案:添加 -e TZ=Asia/Shanghai 环境变量

修改你的 Docker 运行命令:-e TZ=Asia/Shanghai

生产环境最佳实践:如何让程序在后台安全运行?

作为数据处理任务,通常运行时间较长,强烈不建议将其挂在当前终端的前台运行(万一 SSH 断开、电脑休眠或手滑按了Ctrl+C,任务就全毁了)。

建议将其改为后台守护(Detached)模式。你只需要修改两个小地方:去掉--rm,加上-d(后台运行) 和--name(给容器起个名字方便管理)。

完整后台运行命令(只需保证有网能拉取到几十MB的python:3.10-slim基础镜像):

docker run -d \
--name my_data_task \
-u $(id -u):$(id -g) \
-v /home/xxx/workdir:/workdir \
-w /workdir \
-e PYTHONPATH=/workdir/libs \
-e HOME=/workdir \
docker.m.daocloud.io/library/python:3.10-slim bash -c "pip install --no-cache-dir -t /workdir/libs -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple && python yyy.py"

python:3.10-slim 使用体积较小的 slim 版本,极大提升迁移复制速度,亲测可以换成其他python版本:python:3.11-slim python:3.12-slim python:3.13-slim

后台模式的优势与操作:

  1. 安全退出终端:敲完上面的命令后,终端会立刻返回一个长长的容器 ID,然后你可以放心地关闭终端、拔掉网线、按Ctrl + C程序都会在 CentOS 后台稳定运行。

  2. 随时查看控制台日志:即使你重新连接 SSH,只需要输入以下命令,就能像看直播一样重新接管并查看实时的控制台输出:

    docker logs -f my_data_task

    (查看日志时按Ctrl + C只会退出日志查看界面,绝对不会中断后台运行的程序)

  3. 检查程序是否还在运行:

    docker ps | grep my_data_task
  4. 程序跑完后的清理:因为去掉了--rm,程序运行结束后容器会处于 Exited 状态,保留了完整的现场供你排查问题。确认没问题后,你可以手动清理:

    docker rm my_data_task

一、 优雅退出 Docker 后台程序

既然你在启动时使用了--name data_task,管理起来就非常方便了。

1. 优雅退出的命令:

docker stop data_task
  • 为什么叫“优雅”?这个命令会向容器内的主进程发送一个SIGTERM(终止信号),你的 Python 程序(如果写了异常捕获或信号处理)会有默认 10 秒钟的时间来执行清理工作,比如正常关闭数据库连接、写入剩余的日志、保存临时文件等。

  • 如果程序卡死,10 秒后 Docker 才会发送强制的SIGKILL杀掉它。

2. 强制杀死的命令(仅在卡死时备用):

docker kill data_task

3. 退出后的清理:由于你这次没有加--rmdocker stop之后,容器会变成Exited(退出)状态,但依然存在于系统中(占据一点点磁盘空间,保留了日志现场)。当你确认不需要它了,可以手动删除容器:

docker rm data_task

极简优雅重启方案

修改完 Python 代码后,直接在宿主机终端执行以下命令:

# -t 15 表示给程序 15秒 的时间进行优雅退出(默认是10秒) docker restart -t 15 data_task

这行命令背后的“优雅”逻辑是这样的:

  1. Docker 会先向容器内的 Python 进程发送一个SIGTERM(终止信号)。

  2. 你的程序有 15 秒钟的时间去处理收尾工作(比如:提交/回滚数据库事务、关闭文件句柄、打印结束日志)。

  3. 如果 15 秒后程序退出了,Docker 会立刻重新启动它;如果 15 秒后程序卡死还没退出,Docker 才会发送SIGKILL强制杀掉它,然后再重新启动。

  4. 重新启动时,Python 会直接读取你刚刚修改过的最新代码文件并执行。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 13:14:14

FINN实战:从Docker环境到FPGA部署的完整指南

1. 为什么选择FINNDockerFPGA组合 第一次接触FINN框架时&#xff0c;我被它"用FPGA加速量化神经网络"的理念吸引&#xff0c;但真正让我决定深入使用的&#xff0c;是它提供的DockerJupyter全栈开发环境。传统FPGA开发需要手动配置Vivado、Vitis、Python环境等一堆工…

作者头像 李华
网站建设 2026/4/17 13:12:18

Qt应用字体部署:从“Cannot find font directory”到跨平台字体配置实战

1. 当Qt应用找不到字体目录时发生了什么 第一次在国产操作系统上部署Qt应用时&#xff0c;看到终端疯狂输出"Cannot find font directory"的红色警告&#xff0c;我整个人都是懵的。这就像你精心准备的PPT演讲&#xff0c;上台却发现投影仪连不上电脑——明明代码在…

作者头像 李华
网站建设 2026/4/17 13:08:11

Linux环境下RNA-seq上游分析实战:从环境配置到表达矩阵

1. Linux环境下RNA-seq上游分析全流程指南 刚接触生物信息学的同学可能会被RNA-seq分析流程吓到&#xff0c;其实只要掌握正确的方法&#xff0c;在Linux系统上完成从原始数据到表达矩阵的全流程并不复杂。我自己第一次做RNA-seq分析时&#xff0c;花了整整两周时间才跑通整个…

作者头像 李华