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 run或docker 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
⚠️ 关键最后一步:执行完上述命令后,权限不会立刻在当前终端窗口生效。你需要让权限刷新,有两种极简方式:
直接执行:
newgrp docker(仅在当前窗口立刻生效)或者最推荐的:彻底退出当前 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
后台模式的优势与操作:
安全退出终端:敲完上面的命令后,终端会立刻返回一个长长的容器 ID,然后你可以放心地关闭终端、拔掉网线、按
Ctrl + C,程序都会在 CentOS 后台稳定运行。随时查看控制台日志:即使你重新连接 SSH,只需要输入以下命令,就能像看直播一样重新接管并查看实时的控制台输出:
docker logs -f my_data_task(查看日志时按
Ctrl + C只会退出日志查看界面,绝对不会中断后台运行的程序)检查程序是否还在运行:
docker ps | grep my_data_task程序跑完后的清理:因为去掉了
--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_task3. 退出后的清理:由于你这次没有加--rm,docker stop之后,容器会变成Exited(退出)状态,但依然存在于系统中(占据一点点磁盘空间,保留了日志现场)。当你确认不需要它了,可以手动删除容器:
docker rm data_task极简优雅重启方案
修改完 Python 代码后,直接在宿主机终端执行以下命令:
# -t 15 表示给程序 15秒 的时间进行优雅退出(默认是10秒) docker restart -t 15 data_task这行命令背后的“优雅”逻辑是这样的:
Docker 会先向容器内的 Python 进程发送一个
SIGTERM(终止信号)。你的程序有 15 秒钟的时间去处理收尾工作(比如:提交/回滚数据库事务、关闭文件句柄、打印结束日志)。
如果 15 秒后程序退出了,Docker 会立刻重新启动它;如果 15 秒后程序卡死还没退出,Docker 才会发送
SIGKILL强制杀掉它,然后再重新启动。重新启动时,Python 会直接读取你刚刚修改过的最新代码文件并执行。