前端全栈必学的Dockerfile-ABC!

news2024/9/22 5:30:51

举个很简单的例子,我有一个Centos7的服务器,但是由于系统限制,我无法安装nodejs18…

但是!我在Docker里就可以!

Dockerfile是Docker的心脏,一个文本文件,包含了一系列的指令,用来构建一个Docker镜像。每条指令都会在镜像中创建一个层。现在,让我带来一探究竟!

Dockerfile的基础命令
  • FROM:基础镜像指令。所有Dockerfile都以一个FROM指令开始,它指定了一个已存在的镜像作为构建的基础。
  • RUN:执行命令。在当前镜像层上执行命令,并提交结果,用于创建新的镜像层。
  • CMD:容器启动命令。提供容器启动时的默认执行命令。
  • LABEL:标签。用于为镜像添加元数据。
  • EXPOSE:暴露端口。它告诉Docker容器在运行时监听的端口。
  • ENV:环境变量。设置容器内的环境变量。
  • ADDCOPY:添加文件。ADD可以解压缩和远程URL,而COPY则更适用于本地文件复制操作。
  • ENTRYPOINT:入口点。配置容器启动时运行的命令。
  • VOLUME:定义匿名卷。用于在容器和宿主机之间共享数据。
  • USER:设置用户。指定运行容器的用户名或UID。
  • WORKDIR:工作目录。设置在容器内的命令执行的当前工作目录。
  • ARG:构建参数。用于定义构建时传递给Dockerfile的变量。
  • ONBUILD:构建触发器。当一个镜像被用作另一个构建的基础时,触发指令执行。
创建一个简单的Dockerfile

让我们通过一个实际的例子:部署Node.js项目来学习Dockerfile的使用

首先,这里假设你已经有了一个package.json和一个主文件比如app.js

# 使用官方Node.js的最新LTS版本作为基础镜像
FROM node:lts

# 设置容器内部的工作目录
WORKDIR /usr/src/app

# 将package.json和package-lock.json复制到工作目录
COPY package*.json ./

# 安装项目依赖
RUN npm install

# 将本地代码复制到工作目录
COPY . .

# 告诉Docker在运行时监听3000端口
EXPOSE 3000

# 定义环境变量
ENV NODE_ENV=production

# 运行你的app.js当容器启动
CMD ["node", "app.js"]
构建与运行

现在有了一个Dockerfile,那么如何使用它呢?

你只需要构建它!

docker build -t your-username/nodejs-app .

这个命令将构建Docker镜像,并标记它为your-username/nodejs-app

接下来,运行你的容器!

docker run -p 3000:3000 -d your-username/nodejs-app

-p参数映射了容器的端口到宿主机的端口。-d参数代表“detached”,意味着容器会在后台运行。

over!

结语

Dockerfile的魔力在于它的简单性和强大功能。

通过一系列简洁的指令,你可以创建一个可复制、可靠的环境,让应用的部署变得前所未有的轻松。

举个很简单的例子,我有一个Centos7的服务器,但是由于系统限制,我无法安装nodejs18…


但是!我在Docker里就可以!

Emmm…最近在学Docker、Github Action的自动化部署,下一期将会进一步讲述 Dockerfile的使用!

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

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

相关文章

机器学习----交叉熵(Cross Entropy)如何做损失函数

目录 一.概念引入 1.损失函数 2.均值平方差损失函数 3.交叉熵损失函数 3.1信息量 3.2信息熵 3.3相对熵 二.交叉熵损失函数的原理及推导过程 表达式 二分类 联立 取对数 补充 三.交叉熵函数的代码实现 一.概念引入 1.损失函数 损失函数是指一种将一个事件&#x…

Cubemx外部引脚按键中断

引脚配置: 时钟: 中断: 编写回调函数: 对函数void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)重写成用户自己的业务代码即可

期货交易的逻辑重要还是技术重要?

期货交易的逻辑重要还是技术重要? 我是一个从事交易多年的老交易员,我觉得这个问题很有意思,也很有难度。我认为交易的逻辑和技术都很重要,但是不是同等重要。我觉得逻辑是交易的灵魂,技术是交易的工具。没有逻辑&…

苹果手机更换国内IP地址的方法

在网络世界中,IP地址扮演着极为重要的角色,是互联网通信的基础。很多人在使用苹果手机时,有时候需要更换国内IP地址以获取更多网络资源或保护隐私。那么,是否可以更换国内ip地址?苹果手机更换国内ip地址的方法是怎样的…

Elasticsearch:ES|QL 入门 - Python Notebook

数据丰富在本笔记本中,你将学习 Elasticsearch 查询语言 (ES|QL) 的基础知识。 你将使用官方 Elasticsearch Python 客户端。 你将学习如何: 运行 ES|QL 查询使用处理命令对表格进行排序查询数据链式处理命令计算值计算统计数据访问列创建直方图丰富数…

360企业安全浏览器兼容模式显示异常某个内容不显示 偶发现象 本地无法复现情况js

360企业安全浏览器兼容模式显示异常 ,现象测试环境频发 ,本地连测试无法复现,线上反馈问题。 出现问题的电脑为windows且使用360企业安全浏览器打开兼容模式可复现 复现过程: 不直接点击超链接跳转页面 ,登录后直接通…

ctf_show笔记篇(web入门---反序列化)

目录 反序列化 254:无用,是让熟悉序列化这个东西的 255:直接使$isViptrue 256:还是使用变量覆盖 257:开始使用魔法函数 258:将序列化最前面的过滤了,使用绕过 259: 这一题需要看writeup才…

uni-app攻略:如何对接驰腾打印机

一.引言 在当前的移动开发生态中,跨平台框架如uni-app因其高效、灵活的特点受到了开发者们的青睐。同时,随着物联网技术的飞速发展,智能打印设备已成为许多业务场景中不可或缺的一环。今天,我们就来探讨如何使用uni-app轻松对接驰…

全局过滤器实现Jwt校验

从Session到Jwt 之前我写过一篇 什么是 httpsession : 理解HttpSession 在经典的那个登录场景中: 客户端第一次访问的时候 需要登录 登录成功之后 后面再次访问的时候 为了让服务器认识 这是已经登录成功的我 在session中存储的用户的信息。 现在我…

按摩师C语言

题干出现“接或不接”,“最优”&#xff0c;仔细一想&#xff0c;该用动态规划了。 #include<stdio.h> int max(int a,int b) {if(a>b)return a;elsereturn b; } int massage(int* nums,int numSize) {if(numSize 0)return 0;else if(numSize 1)return nums[0];els…

面试笔记——MySQL(主从同步原理、分库分表)

主从同步原理 主从同步结构&#xff1a;主库负责写数据&#xff0c;从库负责读数据&#xff0c;如图—— MySQL主从复制的核心就是二进制日志&#xff08;BINLOG&#xff09;&#xff0c;它记录了所有的 DDL&#xff08;数据定义语言&#xff09;语句和 DML&#xff08;数据操…

php表单生成器系统下载 全新万能自定义表单系统源码 开源可二开

在数字化时代&#xff0c;表单系统是许多网站和应用不可或缺的一部分。为了满足不同场景下的需求&#xff0c;分享一个全新万能自定义表单系统源码&#xff0c;基于PHP开发&#xff0c;具有高度的灵活性和可扩展性&#xff0c;支持设置收费表单在线提交&#xff0c;比如说&…

Unity类银河恶魔城学习记录11-3 p105 Inventory UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_itemSlot.cs using System.Collections; using System.Collections.Gen…

JAVA八股--集合面试题

AVA八股--集合面试题--上 java只有值传递&#xff0c;没有引用传递代理模式Java之HashMap和Hashtable选用 ArrayDeque 来实现队列要比 LinkedList 更好为什么HashMap的长度一定是2的次幂&#xff1f;HashMap常见遍历方式 java只有值传递&#xff0c;没有引用传递 文章讲解 文…

全面放开的主流电商API接口,跨境电商与您“面对面”

通过 API&#xff0c;一个软件可以向另一个软件请求数据、执行操作或者提供服务。比如&#xff0c;当你使用手机上的天气应用程序时&#xff0c;它可能通过调用天气预报 API 来获取实时天气数据。又或者&#xff0c;当你在社交媒体上分享照片时&#xff0c;这个应用程序可能使用…

transformer的学习:Attention is all you need

目录 整体概述&#xff1a;​编辑​编辑 encoder&#xff1a; embedding&#xff1a; ​编辑 self-attention&#xff1a; 向量的相似度计算&#xff1a; qkv怎么来的​编辑 softmax&#xff1a; code multi-head-attention 位置编码&#xff1a; 残差&&FFN&…

基于react native的自定义轮播图

基于react native的自定义轮播图 效果示例图示例代码 效果示例图 示例代码 import React, {useEffect, useRef, useState} from react; import {Animated,PanResponder,StyleSheet,Text,View,Dimensions, } from react-native; import {pxToPd} from ../../common/js/device;c…

8个 C++ 开源项目,帮初学者快速进阶

参与或阅读开源项目的源代码&#xff0c;可以获得丰富的实践机会。下面&#xff0c;让我们一起看看以下八个优秀的 C 开源项目。 通过参与或阅读开源项目的源代码&#xff0c;你可以获得丰富的实践机会。实际的项目代码比简单的教程更具挑战性&#xff0c;可以帮助你深入理解 …

19.作业

1.作业样例图 2.学习视频 19.作业讲解

LeetCode每日一题【19. 删除链表的倒数第 N 个结点】

思路&#xff1a;快慢指针 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x)…