制作自己的 Docker 容器

        软件开发最大的麻烦事之一,就是环境配置。用户必须保证操作系统的设置,各种库和组件的安装,只有它们都正确,软件才能运行。docker从根本上解决问题,软件安装的时候,把原始环境一模一样地复制过来。

        以 koa-demos 项目为例,介绍怎么写 Dockerfile 文件,实现让用户在 Docker 容器里面运行 Koa 框架。准备工作,下载源码:git clone https://github.com/ruanyf/koa-demos.git cd koa-demos

1、编写 Dockerfile 文件

        首先,在项目的根目录下,新建一个文本文件.dockerignore,写入下面的内容。

.git node_modules npm-debug.log

        上面代码表示,这三个路径要排除,不要打包进入image文件。如果你没有路径要排除,这个文件可以不新建。

        然后,在项目的根目录下,新建一个文本文件 Dockerfile,写入下面的内容。

FROM node:8.4 
COPY . /app WORKDIR /app 
RUN npm install --registry=https://registry.npm.taobao.org 
EXPOSE 3000

        上面代码一共五行,含义如下。

        FROM node:8.4:该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。

        COPY . /app:将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。

        WORKDIR /app:指定接下来的工作路径为/app。

        RUN npm install:在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。

        EXPOSE 3000:将容器 3000 端口暴露出来, 允许外部连接这个端口。

2、创建 image 文件

        有了 Dockerfile 文件以后,就可以使用docker image build命令创建 image 文件了。

docker image build -t koa-demo . 
# 或者 
docker image build -t koa-demo:0.0.1 .

        终端打印执行过程:

        上面代码中,-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest。最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。

        如果运行成功,就可以看到新生成的 image 文件koa-demo了。

docker image ls

3、生成容器

        docker container run命令会从 image 文件生成容器。

docker container run -p 8000:3000 -it koa-demo /bin/bash 
# 或者 
docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash

        如果一切正常,运行上面的命令以后,就会返回一个命令行提示符。

root@66d80f4aaf1e:/app#

        这表示你已经在容器里面了,返回的提示符就是容器内部的 Shell 提示符。执行下面的命令。

root@66d80f4aaf1e:/app# node demos/01.js

        这时,Koa 框架已经运行起来了。打开本机的浏览器,访问 http://127.0.0.1:8000,网页显示"Not Found",这是因为这个 demo 没有写路由。

4、CMD 命令

        上一节的例子里面,容器启动以后,需要手动输入命令node demos/01.js。我们可以把这个命令写在 Dockerfile 里面,这样容器启动以后,这个命令就已经执行了,不用再手动输入了。

FROM node:8.4 
COPY . /app WORKDIR /app 
RUN npm install --registry=https://registry.npm.taobao.org 
EXPOSE 3000 
CMD node demos/01.js # 容器启动后执行命令,一个容器只能有一个CMD命令.

        上面的 Dockerfile 里面,多了最后一行CMD node demos/01.js,它表示容器启动后自动执行node demos/01.js。

        注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令。现在,启动容器可以使用下面的命令。

docker container run --rm -p 8000:3000 -it koa-demo:0.0.1

5、测试demo

        在ubuntu 21.04最小系统上,运行hello.sh文件,运行方式./hello.sh,文件内容:

#hello.sh 
echo "hello docker"        

        Dockerfile基本结构:

FROM ubuntu:21.04 
ADD hello.sh / 
CMD ["./hello.sh"]

        镜像的构建,-t:tag指定镜像名称和版本:

docker image build -t hello.sh:1.0 .

        构建过程截图:

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

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

相关文章

RHCE9学习指南 第9章 权限管理

9.1 所有者所属组 为了了解所有者和所属组的概念,我们先看图9-1。 图9-1 用房子来帮助理解所有者和所属组 张老板是公司老板,买了一套房作为员工宿舍给A部门的员工居住。张老板是房主,所以他对房子具有很多权限,A部门员工只能具…

SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载

作者:yx 文章目录 一、发布服务二、代码加载三、结果展示 一、发布服务 SuperMap iServer支持将地图发布为ArcGIS REST地图服务,您可以在发布服务时直接勾选ArcGIS REST地图服务,如下图所示: 也可以在已发布的地图服务中&#x…

【量化金融】证券投资学

韭菜的自我修养 第一章: 基本框架和概念1.1 大盘底部形成的技术条件1.2 牛市与熊市1.3 交易系统1.3.1 树懒型交易系统1.3.2 止损止损的4个技术 第二章:证券家族4兄弟2.1 债券(1)债券,是伟大的创新(2&#x…

赛宁综合安全验证评估,筑牢关基网络安全屏障

在国际复杂态势和数字经济发展的驱动下,关键信息基础设施(以下简称:关基)的安全运营逐步走向实战化、体系化和常态化。验证评估作为安全运营的试金石,已成为实现动态防御、主动防御的有力手段。如何通过体系化验证评估…

Flutter 三: Dart

1 数据类型 数字(number) int double 字符串转换成 num int.parse(“1”) double.parse(“1”);double 四舍五入保留两位小数 toStringAsFixed(2) 返回值为stringdouble 直接舍弃小数点后几位的数据 可使用字符串截取的方式 字符串(string) 单引号 双引号 三引号三引号 可以输…

云计算与大数据之间的羁绊(期末不挂科版):云计算 | 大数据 | Hadoop | HDFS | MapReduce | Hive | Spark

文章目录 前言:一、云计算1.1 云计算的基本思想1.2 云计算概述——什么是云计算?1.3 云计算的基本特征1.4 云计算的部署模式1.5 云服务1.6 云计算的关键技术——虚拟化技术1.6.1 虚拟化的好处1.6.2 虚拟化技术的应用——12306使用阿里云避免了高峰期的崩…

Unity 人物方向旋转详细讲解

Unity 人物方向旋转详细讲解 人物的旋转有很多种一、在介绍之前我们需要理解Unity的向量也就是Vector3二、下面我们创建两个小球f1,f2左边的为f2 右边的为f1 三、我们将小球坐标用白色直线画出来,两个小球之间用黑色线画出来,两个小球的向量用黄线表示接…

关于JVM的垃圾回收GC的一些记录

目录 一、JVM内存区域划分 二、从一个基本问题开始引入垃圾回收 三、GC作用的区域 三、如何确定一个对象是否可以被当成垃圾进行回收 (1)引用计数法 (2)可达性分析算法 (3)引用的类型 (3…

(Matlab)基于CNN-LSTM的多维时序回归预测(卷积神经网络-长短期记忆网络)

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、代码实际运行结果展示: 三、部分代码展示: 四、本文完整代码数据下载: 一、程序及算法内容介绍: 基本内容: 本代码…

【Kubernetes】控制器Statefulset

Statefulset控制器 一、概念二、Statefulset资源清单文件编写技巧2.1、查看定义Statefulset资源需要的字段2.2、查看statefulset.spec字段如何定义2.3、查看statefulset的spec.template字段如何定义 三、Statefulset使用案例:部署web站点3.1、编写一个Statefulset资…

【四】记一次关于架构设计从0到1的讨论

记一次关于架构设计从0到1的讨论 简介: 在一次面试中和面试官讨论起来架构设计这个话题,一聊就不知不觉一个小时了,感觉意犹未尽。现在回想起来感觉挺有意思的,古人说独学而无友则孤陋而寡闻,的确是这样的&#xff0c…

【并发编程篇】读锁readLock()和写锁writeLock()

文章目录 🛸情景引入⭐解决问题 readLock()和writeLock()都是ReadWriteLock接口中定义的方法,用于获取读锁和写锁。 readLock()方法返回一个读锁,允许多个线程同时获取该锁,以进行并发读取操作。如果当前已有一个写锁或其他线程正…

HDFS NFS Gateway(环境配置,超级详细!!)

🐮博主syst1m 带你 acquire knowledge! ✨博客首页——syst1m的博客💘 😘《CTF专栏》超级详细的解析,宝宝级教学让你从蹒跚学步到健步如飞🙈 😎《大数据专栏》大数据从0到秃头👽&…

云原生之深入解析基于FunctionGraph在Serverless领域的FinOps的探索和实践

一、背景 Serverless 精确到毫秒级的按用付费模式使得用户不再需要为资源的空闲时间付费。然而,对于给定的某个应用函数,由于影响其计费成本的因素并不唯一,使得用户对函数运行期间的总计费进行精确的事先估计变成了一项困难的工作。以传统云…

免费福利马上截止!深圳的户外小伙伴别错过!COSP2024体育展来了

COSP2024户外博览会 展会时间:2024年3月14-16日 展会地址:深圳福田会展中心 户外运动爱好者不可错过! COSP2024户外博览会不仅可以逛展 看各种露营装备、户外器材 还有各种沙龙、峰会活动 就在明年开年,阳春三月天&#xf…

解决 MATLAB 遗传算法中 exitflg=4 的问题

一、优化问题简介 以求解下述优化问题为例: P 1 : min ⁡ p ∑ k 1 K p k s . t . { ∑ k 1 K R k r e q l o g ( 1 α k ∗ p k ) ≤ B b s , ∀ k ∈ K p k ≥ 0 , ∀ k ∈ K \begin{align} {P_1:}&\mathop{\min}_{\bm{p}}{ \sum\limits_{k1}^K p_k } \no…

微信小程序开发学习(上强度):从0开始写项目

前置知识 1、配置插件 微信小程序 基础模板引入sass的两种方法_微信小程序使用sass-CSDN博客 之后在对应页面里新建一个scss文件,写css 2、注册小程序,有个自己的appid,不用测试号了 5.1.注册小程序账号获取appid及个人和企业版差异_哔哩…

MATLAB学习笔记(一)求解三阶微分方程

一、求解三阶微分方程 对于多变量三阶微分方程求解问题,这里介绍一种求解方法。 例题如下: 对于以上方程,给定边界条件,,,,,。求解和的表达式。 二、解题步骤 (1&…

【扩散模型】7、GLIDE | 文本指引的图像生成和编辑

论文:GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models 代码:https://link.zhihu.com/?targethttps%3A//github.com/openai/glide-text2im 出处:OpenAI 一、背景 在扩散模型经过了一系列…

【论文解读】CNN-Based Fast HEVC Quantization Parameter Mode Decision

时间:2019 年 级别:SCI 机构:南京信息工程大学 摘要 随着多媒体呈现技术、图像采集技术和互联网行业的发展,远程通信的方式已经从以前的书信、音频转变为现在的音频/视频。和 视频在工作、学习和娱乐中的比例不断提高&#xff0…