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
相关推荐
掘金-我是哪吒37 分钟前
分布式微服务系统架构第102集:JVM调优支撑高并发、低延迟、高稳定性场景
jvm·分布式·微服务·架构·系统架构
软考诸葛老师2 小时前
软考高级系统架构设计师-第12章 系统质量属性与架构评估
架构·系统架构·软考高级·系统架构设计师·软考诸葛老师
学术小八3 小时前
计算机网络分层模型:架构与原理
计算机网络·架构
桂月二二3 小时前
Vue3服务端渲染深度实战:SSR架构优化与企业级应用
前端·vue.js·架构
群联云防护小杜3 小时前
隐藏源站IP与SD-WAN回源优化:高防架构的核心实践
网络·分布式·网络协议·tcp/ip·安全·架构·ddos
会讲英语的码农5 小时前
什么叫“架构”
考研·架构·硬件架构
AI糊涂是福6 小时前
数字政府与智慧城市区别报告分析
大数据·人工智能·机器学习·架构·智慧城市
AronTing6 小时前
06- 服务网格实战:从 Istio 核心原理到微服务治理升级
java·后端·架构
腾讯云开发者6 小时前
AI 时代,程序员只剩架构师?腾讯云架构师技术沙龙邀你共探破局之道
架构
AronTing7 小时前
05-微服务可观测性体系建设:从日志、监控到链路追踪实战指南
java·后端·架构