news 2026/10/29 10:28:19

Docker学习记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker学习记录

一、linux当中的容器

docker: failed to connect to the docker API at unix:///Users/triumph/.docker/run/docker.sock; check if the path is correct and if the daemon is running: dial unix /Users/triumph/.docker/run/docker.sock: connect: no such file or directory

Run ‘docker run --help’ for more information

Unable to find image ‘ubuntu:15.10’ locally
docker: Error response from daemon: failed to resolve reference “docker.io/library/ubuntu:15.10”: failed to do request: Head “https://registry-1.docker.io/v2/library/ubuntu/manifests/15.10”: EOF

dockerrmi-fubuntu:15.10//彻底删除镜像而不是删除容器(因为命令里面有一个i)#删除容器的命令dockerrm-f容器# 查看正在运行的容器dockerps# 查看所有容器(包括已停止的)dockerps-adockerstop 容器ID/容器名字#都可以停止容器

为什么每次使用docker run都会创建一个新的实例
简单来说:因为 docker run 的设计初衷就是“从蓝图启动一个全新的、隔离的实例”。
如果您再次 docker run,您肯定不希望进入一个已经被修改过的、充满之前实验痕迹的环境。
每次创建新实例保证了环境的纯净和隔离,避免了依赖冲突和配置污染。

如果您想「重复进入」同一个容器,应该怎么做?

# 1. 启动一个已存在的、处于停止状态的容器dockerstart<容器名或ID># 2. 然后附加到它的终端进行交互dockerattach<容器名或ID># 或者将上面两步合二为一:dockerstart-ai<容器名或ID>

下面图片的意思是创建一个新的容器,进入里面在内部进行交互

总结当我们想和以前容器的终端进行操作
docker pull postgres:latest(先拉取镜像,后面才能开启镜像)

  1. docker run -i -t ubuntu:22.04 /bin/bash(开启一个终端,并进行交互)
  2. docker start -ai 240a9b0b853e (以后再进入这个容器内的时候就可以直接用了)
  3. 或者你启动了容器后,docker attach 容器ID/容器名字

1.挂载
在 Docker 中,挂载(Mounting) 的本质和操作系统是一样的,但目的更具体:把宿主机(你的电脑或服务器)上的文件或文件夹,连接到容器内部的一个目录,让容器能读写宿主机上的数据。实现数据持久化。

docker run-d \--name timescaledb \ \\需要注意一下的事情相当于是给当前的容器命名-v/home/cm3d/timescaleData:/home/postgres/pgdata/data \-e POSTGRES_PASSWORD=mysecret \-p5432:5432\-v/home/cm3d/timescaleData:/home/postgres/pgdata/data ↑ ↑ 宿主机路径 容器内路径(source)(target)Docker 容器是一个隔离的虚拟环境,容器里的文件默认都存在容器内部虚拟磁盘,一旦容器被删除,里面所有数据库、日志数据会全部消失。-v A:B 挂载就是打通宿主机(你的服务器)和容器内部的目录通道: A:宿主机真实路径(服务器硬盘上的文件夹/文件) B:容器内部访问的路径 容器读写 B 里的文件,实际操作的是服务器硬盘上 A 的文件,实现数据持久化、文件共享、时区同步。

2.docker start -ai container 为什么进入linux容器的shell,进入不了数据库的shell

  • 数据库容器的主进程是数据库服务本身,而不是 shell。docker start -ai 会附加到容器的主进程(通常是
    MySQL、PostgreSQL 等数据库程序)
  • docker exec -it 3d7e767f33d9(镜像的ID或者就是镜像的名字)/bin/sh 使用这个可以
    这个命令是进入已经存在的容器,不是拉取新镜像。

2、docker-compose.yaml

用一个 yaml 文件批量定义、启动、管理一组互相配合的 docker 容器。
https://www.runoob.com/docker/docker-compose.html

只有在 docker-compose.yml 的 volumes 中明确映射的子目录,才属于“挂载到容器”,例如: volumes: - ./config:/workspace/config - ./results:/workspace/results 表示: Windows:docker_robot\config ↕ 实时共享 容器: /workspace/config

二、windows中的容器(docker desktop)

1、docker desktop

参考安装https://blog.csdn.net/twoz_/article/details/163705858 (可以选择对应的虚拟器)
基础教程:https://www.cnblogs.com/phzmxw/p/18657577

正常情况下,打开 Docker Desktop,它会自动拉起内置的 Docker Engine(dockerd),等左下角鲸鱼图标变成绿色、面板显示 running,引擎就就绪了,你就可以直接跑docker命令

2 、docker_robot(父节点)

  • 它不是一个单独容器,所以你看到它的Container ID、Image两栏是空的;相当于是项目的总目录,所有的子容器都在这里面,所有的配置都在这个地方
  • 在后台启动当前项目
cdC:\Users\cm3d\Desktop\jxb\docker_robotdockercompose up-d
  • 这个名字就是你compose.yaml里项目的名字(默认是 yaml 所在文件夹名,也可以手动指定name: docker_robot);
  • 对它点启动 / 停止,会批量控制这个项目下全部容器一起启停。

ros_rviz_test_bridge(子容器),它们之间的关系Compose 会自动把同项目下所有容器放到同一个自定义网桥里,容器之间可以直接用服务名互相通信

Dockerfile → 构建镜像 镜像 → 创建容器 容器 → 启动、停止和运行

3、如何去创建这个项目呐

Docker Desktop 不能直接创建 Windows 项目总目录;总目录需要在 Windows 文件资源管理器或 PowerShell 中创建。

例如在 PowerShell 中:mkdir C:\Users\cm3d\Desktop\jxb\new_project 然后把 Dockerfile 和 compose.yaml 放进该目录,再运行:
cd C:\Users\cm3d\Desktop\jxb\new_project
docker compose up -d
Docker Desktop 就会自动显示这个 Compose 项目及其容器。

简单来说:
Windows创建项目目录
→ 目录内放compose.yaml
→ 执行docker compose up
→ Docker Desktop显示该项目

4、什么是Dockerfile文件

Dockerfile 就是创建 Docker 镜像的“安装说明书”,它规定基础系统、需要安装的软件、需要复制的代码,以及容器启动时运行什么程序。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/29 10:16:53

Linux - 文件和目录列表

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/29 10:16:18

EasyGoAdmin 生成 CRUD 后的前后端联调步骤

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/29 10:16:16

GoFrame+Vue3+ElementPlus 代码生成器配置字段映射

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/29 10:16:05

用 EasyGoAdmin 搭 OA 后台:GoFrame+Vue3+ElementPlus 实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/29 10:15:59

EasyGoAdmin 代码生成器模板改造步骤

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/29 10:15:20

GoFrame+Vue3+ElementPlus 物流后台模块实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华