制作自己的 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.mzph.cn/news/533341.shtml

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

相关文章

notepad php源码,GitHub - CharlesKiki/Web-Notepad: 这是一个仿制有道云笔记的原生PHP小玩具。...

What is this?一个仿制笔记的Web应用。但是重点在于“重构”的乐趣。特点简言之,不使用框架就以原生的语言来开发一个网站,最大的好处就是最实现方法的理解会加深。但是不适用框架也意味着重复和冗余,这也导致了项目阅读时的阅读思路。设计稿…

matlab机械手ikine函数,关于Mtalab-robotics工具箱中的fkine和ikine两个函数的问题讨论!...

clear;clc;L1 Link([-pi/2 0 0 0 0],standard);L2 Link([0 10 0 -pi/2 0],standard);L3 Link([0 9.5 0 0 0],standard);L4 Link([-pi/2 3.2 -pi/2 0 0],standard);L5 Link([0 0 0 14.5 0],standard);r SerialLink([L1 L2 L3 L4 L5]);%r.name 5R工业机械臂-上电姿态;q […

matlab差分算子的灰度图像边缘检测,常用图像边缘检测方法及MATLAB研究

论文2 1年 2月 I 01 5日现代电子技术M o e n El c r i sT e h qu d r e ton c c ni e第3 4卷第 4期Fe .2 11 b 0 Vo1 3 . . 4 NO 4常用图像边缘检测方法及 Malb研究 t a韦炜(安文理学院,陕西西安西 706 ) 1 0 5({№吨~一~一一一三一一垂”. ; _堇;~~ _一…

mysql客户端重置密码是多少,mysql重置root密码

你可以按照以下简单的五步来重置/etc/init.d/mysql stop输出:Stopping MySQL database server: mysqld./usr/bin/mysqld_safe --skip-grant-tables &输出:[1] 5988Starting mysqld daemon with databases from /var/lib/mysqlmysqld_safe[6025]: sta…

go为什么比php性能好,刚学 GO,撸了个支付宝发券的程序,为什么性能还比不上 PHP ?...

下面是主程代码,这是详细代码func main() {//解析参数filePath : flag.String("f", "", "文件路径")tplId : flag.String("t", "", "模版 ID")flag.Parse()//解析密钥pk, err : ParsePrivateKey()chec…

php %3c%3c%3cxml 报错,代码审计| APPCMS SQL-XSS-CSRF-SHELL

0x01 背景由若水师傅提供的一个素材,想要复现CNVD上披露的一个APPCMS的漏洞,由CNVD上的描述可以知道存在漏洞的地方是comment.php这个文件,然后就没有详细的漏洞信息了,所以就需要分析相应的源码文件找出存在漏洞的点。借这个素材…

php二进制保存到本地,C# 将二进制字符串保存到本地

C# 将二进制字符串保存到本地#region 将文件保存到本地/// /// 将文件保存到本地/// /// 文件的二进制数据字符串/// 文件名称,必须带后缀private void SaveFile(string psContent, string psFileName){byte[] accessory Convert.FromBase64String(psContent);//Sy…

suse 安装oracle11,Suse11安装Oracle11gR2

注:以下采用终端XmanagerEnterprise 4中的Xshell连接1、安装前参数修改vi /etc/security/limits.conf --末尾添加如下oracle soft nproc 2047oracle hard nproc 16384oracle soft nofile 1024oracle hard nofile 65536vi /etc/sysctl.conf --末尾添加如…

oracle安装缺少,安装oracle11g R2 缺少依赖包

最近我在RHEL6.1上安装oracle11gR2时总是碰见如题说示的错误,在网上查了很多资料但都未能解决。网上都说是gcc版本问题或者gcc的包没有装全,但没有给出正确的gcc安装方法。这里转载别人的安装gcc的rpm包的顺序及方法,供各位参考:转…

PHP7数字三角形代码,倒数字三角

摘要&#xff1a;描述 Description以下的数字倒直角三角形是由二个数确定的&#xff1a;一个数是行数R&#xff0c;1<R<39&#xff0c;另一个是种子数S,1<S<9。S放在左上角&#xff0c;照着样例输出文件的样子&#xff0c;写一个程序&#xff0c;根据输入的二个数打…

oracle 超市管理系统,SuperManager 超市账单管理系统 JSP + Servlet + Oracle Jsp/ 240万源代码下载- www.pudn.com...

文件名称: SuperManager下载 收藏√ [5 4 3 2 1 ]开发工具: Java文件大小: 2144 KB上传时间: 2015-07-07下载次数: 0详细说明&#xff1a;超市账单管理系统JSP Servlet Oracle-超市账单管理系统JSP Servlet Oracle文件列表(点击判断是否您需要的文件&#xff0c;如果是…

oracle组合数据类型,oracle复合数据类型-相关方法

oracle提供了一些内置的函数和方法来操作复合数据类型。一、count 返回集合中的元素的个数declaretype ename_table_type is table of varchar2(20) index by binary_integer ;ename_table ename_table_type ;beginfor i in 1..5 loopename_table(i):a||i ;end loop ;dbms_outp…

hibernate native oracle,hibernate native 主键生成策略

前一次做个系统用的oracle数据库&#xff0c;使用hibernate生成主键的策略是SEQUENCE,当时觉得很累&#xff0c;因为不知道怎么的&#xff0c;oraclesequencetrigger怎么也取不到新增数据时的主键值。这次就把重点放这里了&#xff0c;同时还有两个新的问题&#xff0c;1。到底…

export Oracle_sid =asm,单实例下oracle数据库从文件系统迁移到ASM上

第一步&#xff1a;启动ASM实例(ASM)[oracleoracle ~]$ export ORACLE_SIDASM[oracleoracle ~]$ sqlplus / as sysdbaSQL*Plus: Release 10.2.0.5.0 - Production on Tue Jan 18 13:25:46 2011Copyright (c) 1982, 2010, Oracle. All Rights Reserved.Connected to:Oracle Dat…

linux命令行的操作符,如何在Linux命令行中进行基本的数学运算

原标题&#xff1a;如何在Linux命令行中进行基本的数学运算Linux bash或命令行允许您执行基本和复杂的算术和布尔运算。像expr&#xff0c;jot&#xff0c;bc和factor等命令可以帮助您找到复杂问题的最优数学解决方案。在本文中&#xff0c;我们将描述这些命令并提供示例&#…

在linux关闭的命令,关于关闭Linux计算机的命令操作

关于关闭Linux计算机的命令操作shutdown -h now 立即关机shutdown -r now 立即重启Linux命令&#xff1a;shutdown功能说明&#xff1a;系统关机指令。语法&#xff1a;shutdown [-efFhknr][-t 秒数][时间][警告信息]补充说明&#xff1a;shutdown指令可以关闭所有程序&#xf…

linux什么用户什么任务,linux任务里的1 和2是什么意思

输出学过代码的小伙伴应该知道STDIN、STDOUT、STDERR通常都是指定输出通道的&#xff0c;perl里又称之为句柄那么1代表的就是STDOUT、2代表的是STDERR、jimmy在视频中会翻译成1代表的是正确输出&#xff0c;2代表的是错误输出。其实严格上不能这样去固有化去理解每一个软件的定…

linux 命令 查询丢包率,linux测试丢包率的命令 linux查看丢包率命令

关于用ping命令测网络延迟和丢包率&#xff1f;在工作中&#xff0c;ping命令用于测试网络是否可以连接。其次是网络连接的稳定性&#xff0c;也就是所谓的丢包率。延时参数可手动设定&#xff0c;影响因素较多。输入windows dos并输入Ping/all以查看所有参数分析和单个示例。L…

linux http连接超时时间设置,Linux 下 HTTP连接超时

将项目部署到现场环境&#xff0c;HTTP请求莫名奇妙的连接超时&#xff0c;通过抓包定位了问题&#xff0c;是请求的IP被禁止掉。其中用到了抓包&#xff0c;将记录记录于此。tcpdump host 120.197.89.51 -i any -vvv::06.241085 IP (tos 0x0, ttl , id , offset , flags [DF],…

linux 库的头文件安装在,“找不到jpeg的头文件或库文件”在Alpine Linux上安装枕头...

我试图在基于python:alpine的Docker容器中运行Python的Scrapy。它以前是有效的&#xff0c;但现在我想使用Scrapy的Image Pipeline这需要我安装枕头。作为一个简单的例子&#xff0c;我尝试了以下Dockerfile&#xff1a;FROM python:alpineRUN apk --update add libxml2-dev li…