docker
约 1006 字大约 3 分钟
2026-08-03
A / B1 / B2 三套方案完整对比(含流程+命令+镜像关系)
一句话核心总结
- A = 服务器 拉源码 → 服务器 build → 服务器内 Nuitka 打包 → 生成镜像 → 运行
- B1 = 本地 Nuitka 打包 → 上传程序 → 不 build → 直接用官方镜像运行(最简推荐)
- B2 = 本地 Nuitka 打包 → 上传程序 → build 生成自定义镜像 → 运行
方案A:服务器内打包
A定位
- 代码仓库:Git 存储完整源码、Dockerfile、docker‑compose.yml
- 镜像:服务器现场 build 生成,不推送镜像仓库
- 打包:在服务器容器内自动执行 Nuitka 打包
- 适用:团队协作、运维部署、需要频繁更新代码
方案B:本地打包 + 不构建镜像
B定位
- 代码仓库:无需上传源码
- 镜像:仅使用官方 ubuntu:22.04 镜像
- 打包:你本地 Ubuntu 环境提前 Nuitka 打好
- 不执行 docker build,不生成任何自定义镜像
- 适合:你自己去客户现场部署、最快、最稳、最不容易出错
B方案需要上传文件
- beidou_serial_bridge (你本地 Nuitka 打包好的二进制程序)
- config.json (你的配置文件)
- Dockerfile (镜像构建文件,需要在Dockerfile里写使用的官方镜像FROM ubuntu:22.04 )
- docker-compose.yml (启动配置文件,需要在compose里使用当前目录下构建build .)
方案 C:本地打包 + 构建自定义镜像(标准交付)
C定位
- 代码仓库:可选
- 镜像:生成你自己的专属镜像
- 打包:你本地提前打好
- 适合:企业标准交付、需要推送到镜像仓库、多服务器部署,多版本部署
- 需上传到服务器的文件
C方案需要上传文件
- xxxx.tar.gz (生产机根据Dockerfile要求打包好的镜像文件,如存在images文件夹内)
- config.json (你的配置文件)
- docker-compose.yml (启动配置文件,需要在compose里使用当前镜像文件,取消build,使用images:xxxx)
docker安装
- ubuntu安装特定版本
# 1. 下载 Docker 20.10.14 二进制包
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.14.tgz
sudo tar -xzvf docker-20.10.14.tgz -C /usr/local/ && sudo cp /usr/local/docker/* /usr/bin/
docker --version- 统信os:dnf install -y docker
docker-compose 安装
-安装最新版本
curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o /usr/local/bin/
docker-compose --versio
chmod +x /usr/local/bin/docker-composeyum下载方式:yum install docker-compose -y
安装特定版本
sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
sudo chmod +x /usr/local/bin/docker-compose设置启动 + 开机自启
systemctl start docker
systemctl enable dockercuurl安装,配置docker.service
sudo tee /etc/systemd/system/docker.service > /dev/null <<'EOF'
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status docker将当前用户加入docker组
# 1. 创建 docker 组
sudo groupadd docker
# 2. 将当前用户加入 docker 组
sudo usermod -aG docker $USER
# 3. 刷新组成员资格(或者重新登录)
newgrp docker
# 4. 验证(不需要 sudo)
docker infodocker指令
docker-compose up -d # 创建并后台启动服务容器
docker-compose stop # 停止运行中的容器(不删除)
docker-compose restart # 重启已存在的容器
docker-compose down # 停止并移除容器、网络、默认数据卷
docker-compose ps # 查看当前项目容器的运行状态
docker-compose logs -f <服务名> # 实时跟踪查看容器日志
docker-compose logs --tail=100 -f <服务名> # 先输出末尾100行,再实时跟踪日志
docker-compose exec <服务名> /bin/bash # 进入运行中的容器内部执行交互式 Shell
docker-compose build --no-cache # 强制不使用缓存重新构建服务镜像
docker build -t beidou:<版本> . # 使用当前目录 Dockerfile 构建并打标签
docker save beidou:<版本> -o <路径>.tar # 将镜像导出为本地 tar 归档文件
docker load -i <路径>.tar.gz # 从本地归档文件加载镜像到 Docker 库
docker rmi <镜像ID/名称> # 删除本地指定的 Docker 镜像