Docker 的镜像与容器

📅 发布时间:2026/8/25 10:21:04
Docker 的镜像与容器 文章目录一、Docker 镜像下载镜像镜像库Docker Hub镜像源配置查看镜像删除镜像二、Docker 容器创建并运行容器创建容器容器列表启停容器删除容器容器内部查看创建信息容器日志一、Docker 镜像下载镜像Docker Pull命令用来从仓库下载镜像。dockerpull docker.io/library/nginx:latest一个Docker镜像下载地址包含 4 部分内容docker.io: registry仓库地址 / 注册表如果是 Docker 官方仓库则可以省略这个地址。library: 命名空间镜像作者为了防止不同用户上传同一个名字的镜像 发生冲突。“library 是 docker 官方仓库的命名空间这个空间下的所有镜像都是由 Docker 官方维护。如果是官方的命名空间 则可以省略不写nginx: 镜像名latest: 标签名、版本号。写 “latest” 或者不写 表示获取最新版本的镜像。镜像库repository: 镜像库存放一个镜像的不同版本“docker.io/library/nginx” 就是一个镜像库。简化后的命令如下# 从 Docker 官方仓库的官方命名空间里面下载最新的 Nginx Docker 镜像dockerpull nginx其他例子# 从 docker.n8n.io 的私有仓库下载 n8nio 上传的 n8n 镜像dockerpull docker.n8n.io/n8nio/n8nDocker Hubdocker 官方的镜像仓库地址为 https://hub.docker.com 可以在这个上面搜索自己需要的镜像标有Docker Offcial Images 表示 Docker 官方维护的镜像。如果打不开 可以通过 https://docker.fxxk.dedyn.io/ 镜像站来搜索镜像。镜像源配置在国内的网络环境中如果执行docker pull可能会出现 下载失败的问题可以参考这篇文档配置镜像站解决https://github.com/tech-shrimp/docker_installer?tabreadme-ov-file#2-pull%E9%95%9C%E5%83%8F拉取特定架构的镜像docker pull --platformxxx nginx默认情况下docker 会选择当前宿主机 CPU 架构的镜像大部分情况下我们不需要关注这个参数。Mac 目前的 M 系列 CPU 都是 arm 架构的但在运行 AMD64 架构的容器时会自动调用 QEMU 来模拟 x86_64 指令集从而实现兼容 AMD64 的镜像不过可能会存在一些兼容性问题 以及额外的性能开销。查看镜像docker images使用此命令可以查看 所有 Pull 到本地的镜像删除镜像docker rmi [镜像标识] # 例如 docker rmi nginx使用此命令可以删除 pull 到本地的镜像镜像标识可以选择 镜像的 IDimage id或者镜像的名称repository二、Docker 容器创建并运行容器docker run [镜像标识]使用 run 命令 可以通过 镜像创建一个容器并启动它。镜像标识可以是 镜像 ID 或者镜像名称。例如docker run nginx就是创建一个 Nginx 容器。docker pull 命令可以省略直接使用 docker run 运行如果 docker 发现本地没有这个镜像 则会自动拉取。分离模式默认情况下docker run创建容器后会导致当前终端挂起不能进行其他操作可以增加 -d 参数 表示容器在后台运行不阻塞当前窗口。C:\Users\xinjie docker run redis Starting Redis Server 1:C 25 Dec 2025 06:07:08.379 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 1:C 25 Dec 2025 06:07:08.380 * Redis version8.4.0, bits64, commit00000000, modified1, pid1, just started 1:C 25 Dec 2025 06:07:08.380 * Configuration loaded 1:M 25 Dec 2025 06:07:08.381 * monotonic clock: POSIX clock_gettime 1:M 25 Dec 2025 06:07:08.384 * Running modestandalone, port6379.自定义容器名称docker run -d -name my-redis redis容器的名称和 容器 ID 的效果是等价的但是名字更方便记忆。端口映射容器的网络和宿主机的网络是隔离的例如运行了一个 Nginx 容器容器内的 Nginx 监听了 80 端口。这时通过宿主机的 80 端口是无法访问到 Nginx 服务的。所以需要-p {宿主机端口}:{容器端口}命令进行映射例如-p 8080:80标识将Nginx容器的 80 端口映射到宿主机的 8080 端口。目录映射绑定挂载与端口映射类似的就是目录映射将容器外和容器内的目录进行绑定容器内对文件的修改会影响宿主机的文件夹宿主机的修改也会影响容器内文件夹。这种目录也被称为 挂载卷他的最大作用是数据的持久化。 当容器删除时容器内的所有数据都会被删除但通过挂载卷映射到宿主机的文件夹将得以保留。docker run -d -p 8080:80 -v ./:/usr/share/nginx/html nginx使用绑定挂载的时候宿主机的文件会暂时覆盖掉容器内的目录。除了这种用法 还有一种叫Docker卷可以在容器之间共享和重用。环境变量可以在命令行通过 -e 参数传递环境变量到容器内部例如创建一个数据库应用需要在 创建容器时就指定数据库的账户、密码等信息。docker run -d -p 27017:27017 \ -e MONGO_INITDB_ROOT_USERNAMEtech \ -e MONGO_INITDB_ROOT_PASSWORDdbkuaizi \ mongo如果不知道容器的环境变量有哪些可以在Docker Hub上搜索一下或者去 Github 上看一下 readme 文档都有详细的描述。进入容器docker run -it alpine通过-it参数可以在创建一共容器时同时进入容器内部的终端。退出删除docker run -it --rm alpine--rm表示当退出容器时自动删除这个容器。一般和-it命令配合使用容器重启策略docker run -d --restart always nginx--restart参数用来表示 容器在停止时的重启策略它有两个选项always: 只要容器停止了就会立即重启。包含容器因为内部错误崩溃或者宿主机断电等场景unless-stopped: 与 always 类似唯一区别是手动停止的容器不会尝试重启了创建容器docker create nginx与run命令功能类似区别在于只创建容器不自动启动。容器列表C:\Users\xinjiedocker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c4acace9689b vue3-vue3-app /docker-entrypoint.… 4 hours ago Up 4 hours 0.0.0.0:8080-80/tcp, [::]:8080-80/tcp vue3-appps 是 Process Status(进程状态) 的缩写也是 Linux 上的一个经典命令用于查看进程的状态信息。这一命令也被继承到 Docker 里面了这些列含义如下CONTAINER ID 容器 ID每个容器在创建时会生成一个唯一的 IDIMAGE 基于那个镜像创建出来的CREATED 镜像创建时间STATUS 镜像当前状态PORTS 镜像使用端口NAMES 容器的名字如果创建容器时没有指定名字系统就会随机分配一个。增加-a参数可以看到所有的容器包括正在运行的和已经停止的。启停容器每次使用docker run运行都会创建一个新的容器如果我们需要对同一个容器进行持续的操作可以通过 容器的启停命令来控制。# 启动容器 docker start {容器标识} # 停止容器 docker stop {容器标识}使用start启停容器的时候不需要再传递创建容器时的 端口映射、挂载卷、环境变量等参数都不需要重新写了docker 已经自动保存了重新启动可以按照原因运行。删除容器docker rm {容器标识}使用rm命令可以删除容器如果要删除运行中的容器 需要加 -f 参数强制删除。容器内部# 进入容器内部 docker exec -it {容器标识} bash使用exec -it命令 可以进入容器在容器内部执行 shell 命令dockerexec{容器标识}{shell 命令}也可以通过这种方式 在容器外部执行容器内部的命令# 查看容器 alpine 中的进程信息dockerexecalpineps-ef注意 docker 镜像为了尽可能缩小镜像体积内部一般是一个极简的操作系统很多系统工具、基础命令都是缺失的查看创建信息docker inspect {容器标识}使用这个命令可以看到容器的所有信息输出的是一个 JSON 格式可以直接丢给 ai 帮忙解析容器日志docker logs {容器标识}这个命令可以看容器的日志加上-f命令可以持续输出滚动查看。 感谢阅读想了解更多 我的博客网站 | 记录思考分享干货 我的个人主页 | 关于我、开源项目