Docker概念学习

摘要:简要记录docker相关概念学习、常用命令总结(部分命令总结由gemini2.5pro生成)以及易错总结

1. Docker相关概念


1.1 是什么?

–是一个容器化平台,它可以把应用程序及其依赖的运行环境(包括系统库、配置、工具等)打包成一个可移植的容器(Container),从而保证在任何地方都能以相同的方式运行。

1.2 Dockerfile

–定义镜像如何构建的脚本

1.3 Dockerhub

–官方镜像仓库(类似 GitHub)

1.4 Image

–打包好的“程序 + 环境”模板

1.5 Docker Daemon (守护进程)

–Docker 的核心后台服务(因为docker工作是采用CS架构,docker daemon即server端,并且client端和server端是可以运行在同一台机器上的),负责管理镜像、容器、网络和数据卷,在客户端输入的 docker命令将转发给docker daemon执行。

1.6 学习来源

博客地址

1.7 总结

–总之是,先写dockerfile在dockerbuild,产生镜像,然后dockerrun镜像,生成container(Dockerfile → docker build → docker run → Container 启动成功)

2. 常用命令总结

以下是 Docker 操作中常用的一些命令,主要分为启动、镜像、容器、查看和清理几大类。

2.1启动相关

2.1.1 Linux
  • 启动 Docker 服务

sudo systemctl start docker

  • 停止 Docker 服务
    sudo systemctl stop docker

  • 重启 Docker 服务
    sudo systemctl restart docker

  • 查看 Docker 服务状态
    sudo systemctl status docker

2.1.1 MAC(M系列芯片)(mac不支持systemctl命令)

方式
使用colima(轻量级 Linux虚拟机)(本质上是控制整个虚拟机的工具)
安装
brew install colima
启动docker
colima start
关闭docker
colima stop
查看colima状态(相当于 systemctl status docker)
colima status
更多用法及设置(以上列出的用法对于日常需求应该足够了)
https://github.com/abiosoft/colima

2.1 镜像相关命令 (Image)

  • 搜索镜像 docker search

    • 从 Docker Hub 上搜索镜像。
    • docker search nginx
  • 拉取镜像 docker pull

    • 从镜像仓库(默认为 Docker Hub)拉取镜像到本地。
    • docker pull ubuntu:20.04 (拉取指定版本的 ubuntu)
    • docker pull redis (不指定版本,默认拉取 latest 最新版)
  • 查看本地镜像 docker imagesdocker image ls

    • 列出本地已经存在的所有镜像。
    • docker images
  • 构建镜像 docker build

    • 根据 Dockerfile 文件构建一个新的镜像。
    • docker build -t my-app:1.0 .
      • -t: (tag) 给镜像打上标签,格式为 name:tag
      • .: 表示 Dockerfile 文件在当前目录下。
  • 删除本地镜像 docker rmidocker image rm

    • 删除一个或多个本地镜像。
    • docker rmi [IMAGE_ID or REPOSITORY:TAG]
    • docker rmi my-app:1.0
    • 注意:如果该镜像被某个容器正在使用,需要先删除容器才能删除镜像。

2.2 容器相关命令 (Container)


  • 运行容器 docker run

    • 这是最核心的命令,基于一个镜像创建并启动一个容器。
    • docker run -it ubuntu:20.04 /bin/bash (交互式地进入 ubuntu 容器的 shell)
    • docker run -d -p 8080:80 --name my-web nginx (后台运行一个 nginx 容器)
      • -d: (detach) 后台运行容器。
      • -p: (publish) 端口映射,格式为 主机端口:容器端口
      • --name: 给容器指定一个名字,方便后续操作。
      • -it: (interactive & tty) 交互模式,通常一起使用来进入容器命令行。
      • -v: (volume) 挂载数据卷,实现宿主机和容器之间的数据同步,格式为 宿主机目录:容器内目录
  • 查看运行中的容器 docker ps

    • 列出当前正在运行的容器。
    • docker ps -a: 列出所有容器,包括已经停止的。
  • 停止容器 docker stop

    • 停止一个正在运行的容器。
    • docker stop [CONTAINER_ID or NAME]
    • docker stop my-web
  • 启动容器 docker start

    • 启动一个已经停止的容器。
    • docker start [CONTAINER_ID or NAME]
  • 重启容器 docker restart

    • 重启一个容器(无论其当前是运行还是停止状态)。
    • docker restart [CONTAINER_ID or NAME]
  • 删除容器 docker rm

    • 删除一个或多个已经停止的容器。
    • docker rm [CONTAINER_ID or NAME]
    • docker rm -f [CONTAINER_ID or NAME]: -f (force) 强制删除正在运行的容器。
  • 进入正在运行的容器 docker exec

    • 在正在运行的容器中执行命令,最常用于进入容器内部进行调试。
    • docker exec -it [CONTAINER_ID or NAME] /bin/bash (进入容器的 shell 环境)

2.3 查看信息与日志

  • 查看容器日志 docker logs

    • 获取容器的标准输出日志。
    • docker logs [CONTAINER_ID or NAME]
    • docker logs -f [CONTAINER_ID or NAME]: -f (follow) 持续跟踪日志输出,类似 tail -f
  • 查看容器/镜像详细信息 docker inspect

    • 获取容器或镜像的底层详细信息,以 JSON 格式返回。
    • docker inspect [CONTAINER_ID or IMAGE_ID]

2.4 清理命令

  • 一键清理 docker system prune
    • 一个非常方便的命令,可以一次性清理掉无用的 Docker 资源。
    • docker system prune: 会删除所有已停止的容器、所有悬空镜像(dangling images)、所有未被使用的网络。
    • docker system prune -a: 会更彻底地删除所有未被任何容器使用的镜像。使用时请小心!

3 常用命令易错点总结


总结表格

易错场景 错误原因 解决方案
创建同名容器失败 docker stop 只停止容器,不删除,名字仍被占用。 先用 docker rm <旧容器名> 删除,再用 docker run 创建。
启动容器后终端被卡住 忘记使用 -d 参数,默认认情况下,容器在前台运行,并把输出附加到终端上。 添加 -d 参数,如 docker run -d ...使其挂后台运行。
无法从外部访问容器服务 容器默认是隔离的,它的网络和主机不互通,需要使用 -p 参数进行端口映射。 添加 -p 主机端口:容器端口 参数。
删除容器后数据丢失 容器的文件系统是临时的。当容器被删除时,它内部所有未挂载出去的数据都会被一同删除。 对于重要数据,必须使用 -v 主机目录:容器目录 进行挂载。
镜像无法删除 有基于该镜像的容器(即使已停止)存在。 先用 docker ps -a 找到并用 docker rm 删除所有相关容器。
构建镜像时命令报错 docker build 命令末尾忘记指定构建上下文路径。 在命令末尾加上路径,通常是 .,表示当前目录。

(PS:绝大多数情况下,你都不需要从零开始写 Dockerfile。你可以直接利用 Docker Hub 上数以万计的、由官方或社区打包好的现成 Image,而 docker run 命令足够智能,在你本地没有这个 Image 时,会自动帮你从网上下载/那什么使用需要dockerfile?–当你需要打包和部署你自己的应用程序时)

Author

Cofeesy

Posted on

2025-11-01

Updated on

2025-12-03

Licensed under

Comments