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
相关推荐
曼岛_9 小时前
[架构之美]linux常见故障问题解决方案(十九)
linux·运维·架构
金刚猿15 小时前
openfeign 拦截器实现微服务上下文打通
微服务·云原生·架构
Naylor16 小时前
微服务概述
微服务·架构·springcloud
尽兴-17 小时前
Lambda架构与Kappa架构对比详解
hadoop·架构·kafka·lambda·kappa
boring_11117 小时前
从Aurora 架构看数据库计算存储分离架构
数据库·架构
CloudPilotAI19 小时前
“海外滴滴”Uber的Arm迁移实录:重构大规模基础设施
arm开发·架构·arm
互联网搬砖老肖1 天前
Web 架构之会话保持深度解析
前端·架构
互联网搬砖老肖1 天前
Web 架构之攻击应急方案
前端·架构
zizisuo1 天前
9.3.云原生架构模式
云原生·架构
风虎云龙科研服务器1 天前
英伟达Blackwell架构重构未来:AI算力革命背后的技术逻辑与产业变革
人工智能·重构·架构