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:

  1. 先在 Harbor 上新建项目(比如 internal)
  2. 打 tag:docker tag myapp:v1 shturl.cc/s4gUNL2vpJEZdhvSUWtu4z
  3. 登录 harbor
docker login shturl.cc/29Bc
  1. push
docker push shturl.cc/s4gUNL2vpJEZdhvSUWtu4z

如果 Harbor 是 http,同样要在 daemon.json 加 insecure-registries


常见踩坑

  1. push 报 http: server gave HTTP response to HTTPS client 👉 就是没配置 insecure-registries
  2. tag 不能省略仓库地址前缀,docker push 识别前缀去找仓库
  3. 内网机器防火墙放行端口:5000(registry)/ 80/443(harbor)
  4. registry 默认无认证,任何人内网都能推拉;对外不要开

快速选型建议

  • 临时迁移、一两台机器:save/load tar 包
  • 小团队内网分发、不想复杂部署:docker registry
  • 正式项目、需要权限、镜像清理、web 管理:Harbor
 
posted @ 2026-11-11 17:52  hanease  阅读(2)  评论(0)    收藏  举报