docker入门教程之将应用程序容器化

将应用程序容器化

在本指南的其余部分中,您将使用在 Node.js 上运行的简单待办事项列表管理器。如果您不熟悉 Node.js,请不要担心。本指南不需要任何 JavaScript 经验。

先决条件

  • 您已安装最新版本的 Docker Desktop。
  • 您已经安装了 Git 客户端。
  • 您可以使用 IDE 或文本编辑器来编辑文件。 Docker 建议使用 Visual Studio Code。

 

  • Code。

下载这个软件

在运行应用程序之前,您需要将应用程序源代码获取到您的计算机上。

  1. 使用以下命令克隆 getting-started-app 存储库:

    $ git clone https://github.com/docker/getting-started-app.git
    
  2. 查看克隆存储库的内容。您应该看到以下文件和子目录。

    ├── getting-started-app/
    │ ├── package.json
    │ ├── README.md
    │ ├── spec/
    │ ├── src/
    │ └── yarn.lock

构建应用程序的映像

要构建映像,您需要使用 Dockerfile。 Dockerfile 只是一个基于文本的文件,没有文件扩展名,但包含指令脚本。 Docker 使用此脚本构建容器映像。

  1. 在该getting-started-app目录中与该文件相同的位置package.json,创建一个名为Dockerfile.您可以使用以下命令根据您的操作系统创建 Dockerfile。

    Mac / Linux / Windows (Git Bash) Windows(命令提示符) Windows(PowerShell)

    在终端中,运行以下命令。

    确保您位于该getting-started-app目录中。替换/path/to/getting-started-app为您的目录的路径getting-started-app

    $ cd /path/to/getting-started-app
    

    创建一个名为 的空文件Dockerfile

    $ touch Dockerfile
    

  2. 使用文本编辑器或代码编辑器,将以下内容添加到 Dockerfile 中:

    # syntax=docker/dockerfile:1FROM node:18-alpine
    WORKDIR /app
    COPY . .
    RUN yarn install --production
    CMD ["node", "src/index.js"]
    EXPOSE 3000
  3. 使用以下命令构建图像:

    在终端中,确保您位于getting-started-app目录中。替换/path/to/getting-started-app为您的目录的路径getting-started-app

    $ cd /path/to/getting-started-app
    

    构建形象。

    $ docker build -t getting-started .
    

    docker build命令使用 Dockerfile 构建新映像。您可能已经注意到 Docker 下载了很多“层”。这是因为您指示构建器您想要从node:18-alpine映像开始。但是,由于您的计算机上没有该镜像,因此 Docker 需要下载该镜像。

    Docker 下载映像后,Dockerfile 中的指令会复制到您的应用程序中并用于yarn安装应用程序的依赖项。该CMD指令指定从此映像启动容器时要运行的默认命令。

    最后,-t旗帜标记您的图像。将此视为最终图像的人类可读名称。由于您命名了该镜像getting-started,因此您可以在运行容器时引用该镜像。

    命令末尾.的告诉 Docker 它应该在当前目录中docker build查找。

启动应用程序容器

现在您已经有了映像,您可以使用docker run命令在容器中运行应用程序。

  1. 使用以下命令运行容器docker run并指定刚刚创建的映像的名称:

    $ docker run -dp 127.0.0.1:3000:3000 getting-started
    

    -d标志( 的缩写--detach)在后台运行容器。这意味着 Docker 启动您的容器并将您返回到终端提示符。您可以通过在Containers下的 Docker Dashboard 中查看容器或docker ps在终端中运行来验证容器是否正在运行。

    -p标志( 的缩写--publish)在主机和容器之间创建端口映射。该-p标志采用 格式的字符串值 HOST:CONTAINER,其中HOST是主机上的地址,CONTAINER是容器上的端口。该命令将容器的端口 3000 发布到 主机上的127.0.0.1:3000( )。localhost:3000如果没有端口映射,您将无法从主机访问应用程序。

  2. 几秒钟后,打开 Web 浏览器访问 http://localhost:3000。您应该会看到您的应用程序。

    todo-list-empty.webp
  3. 添加一两个项目,看看它是否按您的预期工作。您可以将项目标记为完成并将其删除。您的前端已成功将项目存储在后端。

此时,您已经有一个正在运行的待办事项列表管理器,其中包含一些项目。

如果您快速查看一下容器,您应该会看到至少有一个容器正在使用该getting-started映像并在 port 上运行3000。要查看容器,您可以使用 CLI 或 Docker Desktop 的图形界面。

 

 

命令行界面 

docker ps在终端中运行以下命令以列出您的容器。

$ docker ps

应出现类似于以下内容的输出。

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
df784548666d        getting-started     "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        127.0.0.1:3000->3000/tcp   priceless_mcclintock

概括

在本部分中,您学习了有关创建 Dockerfile 来构建映像的基础知识。构建镜像后,您启动了一个容器并看到正在运行的应用程序。

相关信息:

  • Dockerfile 参考
  • docker CLI 参考
  • 使用 Docker 构建指南

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/665964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

突破编程_C++_基础教程(指针(一))

1 指针的基础概念 指针是 C 的核心之一,使用 C 语言构建的程序之所以性能强悍,有很大部分原因是体现在使用指针直接操作内存。当然这样的工具是一把双刃剑,错误的指针操作可能会导致程序崩溃或者数据损坏。 指针主要有四个方面的用途&#x…

java05 数组

一 概念介绍 指的是一种容器,可以同来存储同种数据类型的多个值。 但是数组容器在存储数据的时候,需要结合隐式转换考虑。 比如: 定义了一个int类型的数组。那么boolean。double类型的数据是不能存到这个数组中的, 但是byte类…

Java线程同步的方法和例子

在Java中,线程同步是一种机制,用于确保多个线程可以安全地访问共享资源,而不会发生数据不一致或数据损坏的情况。线程同步的主要方法包括: synchronized关键字:这是Java中最常用的线程同步方法。它用于方法或代码块&a…

Orange3数据预处理(分组组件)

Group By是Orange3中一个非常有用的组件,它允许用户对数据集进行聚合操作,类似于SQL中的GROUP BY语句或Pandas库中的groupby方法。以下是Group By组件的一些核心功能介绍: 1. Mean (平均数): 数据值的总和除以数据项的数量,显示数…

Megatron-LM源码系列(七):Distributed-Optimizer分布式优化器实现Part2

1. 使用入口 DistributedOptimizer类定义在megatron/optimizer/distrib_optimizer.py文件中。创建的入口是在megatron/optimizer/__init__.py文件中的get_megatron_optimizer函数中。根据传入的args.use_distributed_optimizer参数来判断是用DistributedOptimizer还是Float16O…

【持续学习系列(九)】《Continual Learning with Pre-Trained Models: A Survey》

一、论文信息 1 标题 Continual Learning with Pre-Trained Models: A Survey 2 作者 Da-Wei Zhou, Hai-Long Sun, Jingyi Ning, Han-Jia Ye, De-Chuan Zhan 3 研究机构 National Key Laboratory for Novel Software Technology, Nanjing University; School of Artifici…

C#,雅各布斯塔尔—卢卡斯(Jacobsthal Lucas Number)的算法与源代码

1 雅各布斯塔尔序列 雅各布斯塔尔序列是一个与斐波那契序列类似的加法序列,由递归关系JnJn-12Jn-2定义,初始项J00,J11。序列中的一个数字称为雅可布沙尔数。它们是卢卡斯序列Un(P,Q)的一种特殊类型&#x…

股票交易

这里尝试利用单调队列优化,这里不好直接用单调队列的原因是因为(以买为例)\(-ap[i]*k_1\)不是只与下标有关的 所以解决方案一:我们将下标变成一个整体,再把后面的代价换掉然后将与下标无关的直接提出去 解决方案二:利用“蚯蚓”那…

<设计模式>单例模式懒汉和饿汉

目录 一、单例模式概述 二、懒汉模式和饿汉模式 1.饿汉模式 1.1代码实现 1.2实现细节 1.3模式优劣 2.懒汉模式 2.1代码实现 2.2实现细节 2.3模式优劣 三、多线程下的线程安全问题 1.懒汉和饿汉线程安全问题分析 1.1安全的饿汉模式 1.2不安全的懒汉模式 2.懒汉线程…

YOLOv5算法进阶改进(15)— 引入密集连接卷积网络DenseNet

前言:Hello大家好,我是小哥谈。DenseNet(密集连接卷积网络)是一种深度学习神经网络架构,它在2017年由Gao Huang等人提出。DenseNet的核心思想是通过密集连接(dense connection)来促进信息的流动和共享。在传统的卷积神经网络中,每个层的输入只来自于前一层的输出。而在…

Linux下编译EtherCAT主站SOEM-1.4.1

目录 1、SOEM下载 2、CMake安装​​​​​​ 3、编译 环境:Ubuntu1604. 1、SOEM下载 最新版为SOEM-v1.4.0,可以从github下载地址: https://github.com/OpenEtherCATsociety/SOEM 2、CMake安装​​​​​​ 3、编译 解压文件&#xff0c…

BeanUtils.copyProperties()用法总结

BeanUtils.copyProperties()用法总结 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,今天我们来谈一谈在Java开发中常用的Bean属性拷贝工具——BeanUtils.copyProperties(),并总结其用法和注意事项。 1. 什么是BeanUt…

WebSocket学习笔记以及用户与客服聊天案例简单实现(springboot+vue)

一:介绍: 二:http协议与websocket对比: 三:websocket协议: 四:实现: 4.1客户端: 4.2服务端: 五:案例: 环境:做一个书店…

分布式任务调度框架XXL-JOB详解

分布式任务调度 概述 场景: 如12306网站根据不同车次设置放票时间点,商品成功发货后向客户发送短信提醒等任务,某财务系统需要在每天上午10天前统计前一天的账单数据 任务的调度是指系统为了完成特定业务,基于给定的时间点,时间间隔&#…

bat脚本 分片抓包并上传到ftp

在批处理脚本中实现分片抓包并上传到FTP服务器是一项比较复杂的任务,因为批处理脚本本身并不直接支持文件分片或FTP上传。但是,你可以结合使用一些外部工具和命令来实现这一功能。 首先,你需要一个用于分片的工具。WinPcap提供了一些工具和库…

【前端】弹框组件

vue2项目&#xff0c;封装的第一版弹框组件使用基于elment-ui 在vue同级创建components/dialog文件夹 里面放paramDialog.vue 父组件引入 dialogVisible要是改变量名&#xff0c;这个也记得改 <ParamDialog :title"title" :dialogVisible.sync"dialogVisibl…

onnx转换为rknn置信度大于1,图像出现乱框问题解决

前言 环境介绍&#xff1a; 1.编译环境 Ubuntu 18.04.5 LTS 2.RKNN版本 py3.8-rknn2-1.4.0 3.单板 迅为itop-3568开发板 一、现象 采用yolov5训练并将pt转换为onnx&#xff0c;再将onnx采用py3.8-rknn2-1.4.0推理转换为rknn出现置信度大于1&#xff0c;并且图像乱框问题…

C#下“Bitmap”转换为“BitmapImage”,“Bitmap”转换成“BitmapSource”

在实际开发中时常遇到“Bitmap”转换为“BitmapImage”&#xff0c;“Bitmap”转换成“BitmapSource”格式转化的开发&#xff0c;特此记录。 1、“Bitmap”转换为“BitmapImage” 要将 System.Drawing.Bitmap 转换为 System.Windows.Media.Imaging.BitmapImage&#xff0c;我…

【服务器】RAID(独立磁盘冗余阵列)

RAID&#xff08;独立磁盘冗余阵列&#xff09; 一、RAID的介绍二、RAID的分类#2-1 RAID 02-2 RAID 1#2-3 RAID 32-4 RAID 52-5 RAID 62-6 RAID 10(先做镜像&#xff0c;再做条带化)2-7 RAID 01&#xff08;先做条带&#xff0c;再做镜像&#xff09;2-8 RAID比较 三、磁盘阵列…

代码随想录刷题第24天

今天正式进入回溯。看了看文章介绍&#xff0c;回溯并不是很高效的算法&#xff0c;本质上是穷举操作。代码形式较为固定。 第一题为组合问题&#xff0c;用树形结构模拟&#xff0c;利用回溯算法三部曲&#xff0c;确定终止条件与单层逻辑&#xff0c;写出如下代码。 不难发现…