docker基础命令
Docker 基础命令(Linux)
一、服务管理(systemctl)
systemctl start docker # 启动docker
systemctl stop docker # 停止docker
systemctl restart docker # 重启docker
systemctl status docker # 查看状态
systemctl enable docker # 开机自启
systemctl disable docker # 取消开机自启
docker --version # 版本
docker info # 查看docker信息
docker system df # 查看磁盘占用
二、镜像 image
docker pull nginx:1.25 # 拉取镜像,不加tag默认latest
docker images # 列出本地镜像
docker images -q # 只输出镜像ID
docker rmi nginx:1.25 # 删除镜像
docker rmi -f 镜像ID # 强制删除
docker build -t myapp:v1 . # 构建镜像(当前目录Dockerfile)
docker build --no-cache -t myapp:v1 . # 不使用缓存构建
docker tag myapp:v1 repo/myapp:v1 # 镜像打标签
docker inspect 镜像ID # 查看镜像详细信息
# 镜像打包备份
docker save -o nginx.tar nginx:1.25
docker load -i nginx.tar
三、容器 container(最常用)
容器 ID / 容器名都可以作为参数
# 核心:创建并启动容器
docker run -d --name mynginx -p 8080:80 nginx:1.25
# 参数说明
# -d 后台守护运行
# --name 容器名字
# -p 宿主机端口:容器端口 端口映射
# -v 宿主机目录:容器目录 挂载
# -e 环境变量
# --restart=always 开机自启
# -it 交互式终端
docker ps # 查看正在运行容器
docker ps -a # 查看所有(含停止)
docker ps -q # 只输出容器ID
docker start 容器名/ID
docker stop 容器名/ID
docker restart 容器名/ID
docker kill 容器名/ID # 强制杀死
docker rm 容器名/ID # 删除停止的容器
docker rm -f 容器名/ID # 强制删除运行中容器
docker rm $(docker ps -aq) # 删除所有容器(慎用)
# 进入容器
docker exec -it mynginx /bin/bash
# 退出:exit
# 日志
docker logs mynginx
docker logs -f mynginx # 实时跟踪日志
docker logs --tail 200 mynginx # 最后200行
# 拷贝文件
docker cp ./a.txt mynginx:/tmp/ # 宿主机→容器
docker cp mynginx:/tmp/a.txt ./ # 容器→宿主机
docker inspect 容器ID # 容器详情(IP、挂载等)
docker stats # 实时监控容器CPU、内存
四、数据卷 volume(持久化)
docker volume ls
docker volume create myvol
docker volume inspect myvol
docker volume rm myvol
docker volume prune # 删除未使用卷
五、网络 network
docker network ls
docker network create my-bridge
docker network inspect my-bridge
docker network rm my-bridge
docker network connect my-bridge 容器名
docker network disconnect my-bridge 容器名
六、清理命令(日常维护)
docker system prune # 清理停止容器、悬空镜像、无用网络
docker system prune -a # 清理所有未使用镜像(谨慎)
七、Docker Compose(常用)
docker compose up -d
docker compose down
docker compose logs -f
docker compose ps
docker compose restart
常用 run 示例
# mysql示例
docker run -d --name mysql8 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/mysql:/var/lib/mysql \
--restart=always \
mysql:8.0
内网机器 Docker 镜像上传方案(无外网,常用 3 种)
场景:内网机器不能访问外网仓库,不能直接
docker push到公网;分两种目标:传到另一台内网 Docker 机器 / 传到内网私有仓库(Harbor/Registry)
方案 1:save+load 离线包(最简单,不用搭仓库,适合少量镜像)
1)在有镜像的机器导出
# 导出单个镜像
docker save -o myapp-v1.tar myapp:v1
# 多个镜像打包(空格分隔)
docker save -o images.tar nginx:1.25 redis:6.2
-o:输出文件;文件会比较大,内网传输可以 rsync /scp/ 共享盘 / U 盘拷贝
2)传到目标内网机器后导入
docker load -i myapp-v1.tar
✅ 优点:零依赖、不用部署服务 ❌ 缺点:没有版本管理、不方便批量分发,适合临时迁移
小技巧:打包压缩,减少传输大小
# 导出+gzip压缩
docker save myapp:v1 | gzip > myapp-v1.tar.gz
# 解压导入
gunzip -c myapp-v1.tar.gz | docker load
方案 2:内网私有仓库 Registry(轻量,推荐固定内网分发)
1. 在内网选一台机器当仓库服务器,启动 registry
# 仓库服务器(比如 192.168.1.100:5000)
docker run -d \
--name registry \
-p 5000:5000 \
-v /data/registry:/var/lib/registry \
--restart=always \
registry:2
⚠️ 默认是 http,所有内网 docker 客户端必须配置信任这个不安全仓库
2. 所有内网 Docker 节点配置 insecure-registries
编辑 /etc/docker/daemon.json
{
"insecure-registries": ["192.168.1.100:5000"]
}
重启 docker 生效
systemctl daemon-reload
systemctl restart docker
3. 给镜像打【仓库地址前缀】标签(关键!不打 tag 推不上去)
# 格式:内网仓库IP:端口/镜像名:标签
docker tag myapp:v1 192.168.1.100:5000/myapp:v1
4. 上传(push)到内网 registry
docker push 192.168.1.100:5000/myapp:v1
5. 其他内网机器拉取
docker pull 192.168.1.100:5000/myapp:v1
查看仓库里有哪些镜像(http 接口)
curl http://192.168.1.100:5000/v2/_catalog
✅ 优点:标准 docker push/pull 方式,适合持续迭代、多节点分发 ❌ 缺点:简陋,没有 web 界面、权限管理;生产内网一般用 Harbor
方案 3:内网 Harbor(企业内网首选,带页面、权限、复制、https)
流程和上面 registry 一致,只是仓库地址换成 Harbor 地址,支持 https/http:
- 先在 Harbor 上新建项目(比如
internal) - 打 tag:
docker tag myapp:v1 shturl.cc/s4gUNL2vpJEZdhvSUWtu4z - 登录 harbor
docker login shturl.cc/29Bc
- push
docker push shturl.cc/s4gUNL2vpJEZdhvSUWtu4z
如果 Harbor 是 http,同样要在
daemon.json加insecure-registries
常见踩坑
- push 报
http: server gave HTTP response to HTTPS client👉 就是没配置insecure-registries - tag 不能省略仓库地址前缀,docker push 识别前缀去找仓库
- 内网机器防火墙放行端口:
5000(registry)/80/443(harbor) - registry 默认无认证,任何人内网都能推拉;对外不要开
快速选型建议
- 临时迁移、一两台机器:save/load tar 包
- 小团队内网分发、不想复杂部署:docker registry
- 正式项目、需要权限、镜像清理、web 管理:Harbor

浙公网安备 33010602011771号