docker小记学习

环境搭载

  1. windows下,需要开启hyper-v,开启虚拟服务功能
  2. 安装wsl,为windows提供linux的能力
  3. 安装docker www.docker.com/get-started...

如遇以下情况,关闭杀毒软件后,重新安装

基本概念

docker

开发完成后,使用docker打包应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。简单来说,Docker可以帮助我们创建、部署和运行应用程序。

工作流程如下:

  1. 编写代码:编写应用程序代码。
  2. 构建镜像:使用Dockerfile(一个文本文件,包含了构建镜像所需的所有指令)来定义应用程序及其依赖项。这个过程被称为"构建镜像"。
  3. 运行容器:使用构建好的镜像来创建一个新的容器,并在这个容器中运行应用程序。这个过程被称为"运行容器"。

docker的优点:

  1. 隔离性:每个容器都是独立的,互不影响;
  2. 轻量级:与虚拟机相比,Docker容器非常轻量级,启动速度快;
  3. 简单易用:可以便利快速地复制、停止、重启容器。
  4. 可移植性强:镜像可以理解为是一个可执行文件,不用过分依赖移植后的环境、依赖。

镜像

镜像是一个只读模板,包含创建 Docker 容器的指令。

可以理解为一个运行应用程序,其包含了运行程序以及所需的一切内容(包括文件、配置和依赖项)的标准包。

容器镜像是一个标准化的包,包含了运行容器所需的所有文件、二进制文件、库和配置,它为容器提供了保证程序正常稳健运行的前置条件。

若要构建自己的镜像,需要创建一个具有简单语法的 Dockerfile,用于定义创建和运行该镜像所需的步骤。

镜像的 2 大原则:

  1. 镜像是不可变的。一旦镜像创建完成,就不能被修改。只能创建一个新的镜像或在其基础上添加更改。
  2. 容器镜像是由层组成的。每一层代表一组对文件系统的更改,这些更改可以添加、删除或修改文件。 Dockerfile 中的每条指令都会在镜像中创建一层。 当修改 Dockerfile 并重新构建镜像时,只有那些发生变化的层会被重新构建。

Docker 注册表

Docker 注册表存储 Docker 镜像。

Docker Hub 是一个任何人都可以使用的公共注册表,默认情况下,Docker 会在 Docker Hub 上查找镜像。

当然也可以运行自己的私有注册表。

Docker Hub

镜像仓库,Docker Hub 是镜像的默认和首选注册表,我们可以快速找到他人共享的镜像,同时也可以自己发布镜像。

容器

容器是镜像的可运行实例。

容器只是一个隔离的进程,具有运行所需的全部文件。 如果你运行多个容器,它们都共享同一个内核,从而允许你在更少的基础架构上运行更多应用程序。

可以使用 Docker API 或 CLI 创建、启动、停止、移动或删除容器。

也可以将容器连接到一个或多个网络,为其附加存储,甚至可以根据其当前状态创建一个新的镜像。

常用命令

启动项目

docker compose up -d --build 这个命令做了以下内容:

  1. 从 Docker Hub 下载了容器镜像;
  2. 为应用程序创建了一个网络;
  3. 创建了一个卷,以便在容器重启之间持久化数据库文件;
  4. 启动了相应容器,并配置了它们所有必要的设置。

热更新

通过 CLI 启动项目,请运行以下命令 docker compose watch

docker compose允许我们同时维护多个不同的镜像/容器。

使用 Docker Compose,你可以将所有容器及其配置定义在一个 YAML 文件中。如果你将此文件包含在代码存储库中,任何克隆你的存储库的人都可以通过一条命令启动并运行。

看到cli中显示拉取容器镜像、启动容器等的输出,启动完成后,更新代码会热更新

而项目启动后,却惊奇的发现项目中没有依赖文件的产生,那么这其中到底发生了什么呢?

这也太不可思议了,相当于docker帮我们集成了所有需要依赖的环境,并安装了所有依赖在它的虚拟化空间里,我们本地只需要留存源代码本身即可。

移除所有内容(容器、网络和卷)

docker compose down

docker默认不会删除持久化存储依赖的卷,如果需要删除可添加--volumes指令

构建并推送镜像到docker hub

bash 复制代码
docker build -t <DOCKER_USERNAME>/getting-started-todo-app .
arduino 复制代码
// 验证镜像是否存在
docker image ls
bash 复制代码
推送到docker hub
docker push <DOCKER_USERNAME>/getting-started-todo-app
相关推荐
Tadas-Gao29 分钟前
大模型幻觉治理新范式:SCA与[PAUSE]注入技术的深度解析与创新设计
人工智能·深度学习·机器学习·架构·大模型·llm
PKUMOD29 分钟前
论文导读 | 在长上下文及复杂任务中的递归式语言模型架构
人工智能·语言模型·架构
梦想的旅途21 小时前
Python 开发企微第三方 API:RPA 模式下外部群主动调用实现
架构·企业微信·rpa
梦想的旅途21 小时前
RPA 架构下的企微非官方 API:外部群主动调用的技术实现与优化
架构·企业微信·rpa
查无此人byebye1 小时前
阿里开源Wan2.2模型全面解析:MoE架构加持,电影级视频生成触手可及
人工智能·pytorch·python·深度学习·架构·开源·音视频
汪碧康2 小时前
一文讲解kubernetes的gateway Api的功能、架构、部署、管理及使用
云原生·容器·架构·kubernetes·gateway·kubelet·xkube
Blossom.1182 小时前
从单点工具到智能流水线:企业级多智能体AI开发工作流架构实战
人工智能·笔记·python·深度学习·神经网络·架构·whisper
梵得儿SHI2 小时前
实战项目落地:微服务拆分原则(DDD 思想落地,用户 / 订单 / 商品 / 支付服务拆分实战)
spring cloud·微服务·云原生·架构·微服务拆分·ddd方法论·分布式数据一致性
Blossom.1182 小时前
从“金鱼记忆“到“超级大脑“:2025年AI智能体记忆机制与MoE架构的融合革命
人工智能·python·算法·架构·自动化·whisper·哈希算法
铁蛋AI编程实战2 小时前
AI Agent工程化落地深度解析:从架构拆解到多智能体协同实战(附源码/避坑)
人工智能·架构