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.rhkb.cn/news/252758.html

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

相关文章

88 SRC挖掘-拿下CNVD证书开源闭源售卖系统

目录 1.开源系统、闭源系统、售卖系统2.如何寻找上述三类系统并进行安全测试3.如何挑简单的入手最快速度获取证书装x演示案例:某开源逻辑审计配合引擎实现通用某闭源审计或黑盒配合引擎实现通用某售卖审计或黑盒配合引擎实现通用 涉及资源&am…

10s初认识多线程创建四种方法

1 继承Thread类 2 实现Runnable接口 3 实现Callable接口 4 多线程池 1-2两方法 10s学会教程网址: http://t.csdnimg.cn/UPy1r 本文简略提及多线程池 -》提前创建多个线程,放在一个“容器”,用时取出,不用即放回池中 优点-》响应…

博客|基于Springboot的个人博客系统设计与实现(源码+数据库+文档)

个人博客系统目录 目录 基于Springboot的个人博客系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能实现 (1)用户管理 (2)文章分类管理 (3)公告信息管理 (4&#…

MySQL查询优化技巧和10个案例展示

优化MySQL查询的实战技巧: **避免使用SELECT ***:只获取需要的列,这样可以减少数据传输量,提高查询效率。使用索引:为查询频繁的列创建索引,可以显著提高查询速度。但请注意,索引并非万能&…

AI新宠Arc浏览器真可以取代Chrome吗?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

缩略图保持加密(TPE)论文

文献: R.Zhao,Y.Zhang,Y.Nan,W.Wen,X.Chai,andR. Lan, “Primitively visually meaningful image encryption: A new paradigm,” Inf. Sci. (Ny), Vol. 613, pp. 628–48, 2022. DOI: 10.1016/j.ins.2022.08.027. (1) 第1行:原始图像 第2行:加密图像 加密的目标: 原始…

MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(1)-后端项目框架搭建

前言: 前面的四个章节我们主要讲解了MongoDB的相关基础知识,接下来我们就开始进入使用.NET7操作MongoDB开发一个ToDoList系统实战教程。本章节主要介绍的是如何快熟搭建一个简单明了的后端项目框架。 MongoDB从入门到实战的相关教程 MongoDB从入门到实战…

Flink cdc3.0动态变更表结构——源码解析

文章目录 前言源码解析1. 接收schema变更事件2. 发起schema变更请求3. schema变更请求具体处理4. 广播刷新事件并阻塞5. 处理FlushEvent6. 修改sink端schema 结尾 前言 上一篇Flink cdc3.0同步实例 介绍了最新的一些功能和问题,本篇来看下新功能之一的动态变更表结…

设计模式学习笔记04(小滴课堂)

1.创建基础类: 调用它进行类对象的复制: 但是如果属性都是基本数据类型确实像这样很简单,但是如果属性中也包含复杂的数据类型呢? 再去测试一下: 我们发现person1和person2的list属性值的内容是同步的,这显…

探索C语言结构体:编程中的利器与艺术

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言学习 贝蒂的主页:Betty‘s blog 1. 常量与变量 1. 什么是结构体 在C语言中本身就自带了一些数据类型&#x…

浏览器唯一标识(浏览器指纹)fingerprintjs

目标 H5用户在未登录前,经常也需要记录游客身份,便于记录用户操作习惯,给用户推荐相关产品。H5项目是运行在浏览器环境的,浏览器没有提供相关设备ID的信息。很多项目会随机生成一个UUID,并持久化存储在localStorage&a…

C#在既有数组中插入另一个数组:Array.Copy方法 vs 自定义插入方法

目录 一、使用的方法 1.使用Array.Copy方法 2.Copy(Array, Int32, Array, Int32, Int32) 3. 使用自定义的方法 二、实例 1.示例1:使用Array.Copy方法 2.示例2:使用自定义的方法 一、使用的方法 1.使用Array.Copy方法 首先定义了一个名为InsertAr…

基于Vue2用keydown、keyup事件实现长按键盘任意键(或组合键)3秒触发自定义事件(以F1键为例)

核心代码 <template></template> <script> export default {created() {//监听长按快捷键addEventListener("keydown", this.keydown);addEventListener("keyup", this.keyup);},destroyed(d) {//移除长按快捷键removeEventListener(&…

【python】绘制春节烟花

一、Pygame库春节烟花示例 下面是一个使用Pygame实现的简单春节烟花效果的示例代码。请注意&#xff0c;运行下面的代码之前&#xff0c;请确保计算机上已经安装了Pygame库。 import pygame import random import math from pygame.locals import *# 初始化pygame pygame.ini…

颐和园龙纹珍宝展亮相,文物预防保护科技护航

在皇家园林颐和园的深处&#xff0c;一场独特的文化盛宴正静静上演。2月1日&#xff0c;“祥龙贺岁—颐和园藏龙纹题材文物特展”在德和园华丽揭幕。此次特展汇聚了66件珍贵文物&#xff0c;包括玉器、瓷器、书画、珐琅、家具等&#xff0c;每一件都是颐和园园藏的瑰宝。这些文…

Windows编程入门-窗口控件-资源操作

window控件&#xff1a; 控件是常见的窗口上的交互元素例如&#xff1a;一个按钮&#xff0c;一个复选框&#xff0c;一个列表框等。 当控件的特定功能被触发后&#xff0c;会主动发送消息通知父窗口&#xff0c;父窗口可以通过发送消息给控件控制控件的行为。 控件的本质是一个…

Java开发IntelliJ IDEA2023

IntelliJ IDEA 2023是一款强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为Java开发人员设计。它提供了许多特色功能&#xff0c;帮助开发人员更高效地编写、测试和调试Java应用程序。以下是一些IntelliJ IDEA 2023的特色功能&#xff1a; 智能代码编辑器&…

MQ,RabbitMQ,SpringAMQP的原理与实操

MQ 同步通信 异步通信 事件驱动优势&#xff1a; 服务解耦 性能提升&#xff0c;吞吐量提高 服务没有强依赖&#xff0c;不担心级联失败问题 流量消峰 ​ 小结: 大多情况对时效性要求较高&#xff0c;所有大多数时间用同步。而如果不需要对方的结果&#xff0c;且吞吐…

20240202在Ubuntu20.04.6下使用whisper.cpp的CPU模式

20240202在Ubuntu20.04.6下使用whisper.cpp的CPU模式 2024/2/2 14:15 rootrootrootroot-X99-Turbo:~/whisper.cpp$ ./main -l zh -osrt -m models/ggml-medium.bin chs.wav 在纯CPU模式下&#xff0c;使用medium中等模型&#xff0c;7分钟的中文视频需要851829.69 ms&#xf…

代码随想录 Leetcode51. N 皇后

题目&#xff1a; 代码(首刷看解析 2024年2月6日&#xff09;&#xff1a; class Solution { private:vector<vector<string>> res;void backtracking(int n, int row, vector<string>& chessboard) {if (row n) {res.push_back(chessboard);return;}f…