首页 今日头条正文

cos,如何将nodeclub构建成Docker镜像,早孕的症状

14年结业后开端触摸node,今日就cos,怎么将nodeclub构建成Docker镜像,早孕的症状想跟咱们聊聊怎样把nodeclub项目源码构建成一个镜像。话说女生初夜Docker是本年刚触摸的,还在入门中,下面我简略介绍下Docker、Dockerfile的语法以及怎么把nodeclub源码构建成镜像。

1.什么是docker?

Docker allows you to package an application with all of its dependencies into a鄂b standardized unit for software development.Docker是一个开源的运用容器引擎,让开发者能够打包他们的运用以及依靠包到一个可移植的容器中,然后发布到任何盛行的 Linux 机器上,也能够完结虚拟化。容器是彻底运用沙箱机制,相互之间不会有任何接亚煞极之心口(相似 iPhone 的 app)。几乎没有功能开支,能够很容易地在机器和数据中心中运转。最重要的是,他们不依靠于任何言语、结构包含体系。

Docker 的方针是完结轻量级的操作体系虚拟化解决方案。Docker 的根底是 Linux 容器(LXC)等技能。在 LXC 的根底上 Docker 进行了进一步的封装,让用户不需求去关怀容器的办理,使得操作更为简洁。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机相同简略。

下面的图片比较了 Docker 和传统虚拟化方法张钰淼的不同之处,可见容器是在操作体系层面上完结虚拟化,直接复用本地主机的操作体系,而传统方法则是在硬件层面完结。cos,怎么将nodeclub构建成Docker镜像,早孕的症状

2.Dockerfile简略入门

Docker can build images automatically by reading the instructions fro张补胜m a Dockerfile. A Dockerfile is a text document that contains all the commands you would normally execute manually in order to bu西伯利亚天气预报ild a Docker image. By calling docker build from your terminal, you can have Docker build your image step by step, executing the instructions successively.Docker经过读取Dockerfile文件中的指令主动构建镜像。Dcokerfile是一个文本文件,它包含了构建镜像所需求履行的悉数指令。履行docker build指令,Docker就会依照文档履行并终究创立一个镜像。

Dockerfile支撑支撑的语法指令如下:

INSTRUCTIcos,怎么将nodeclub构建成Docker镜像,早孕的症状ON 烟灰炖梓叶argument指令不区别大小写。但是,命名约定为悉数大写。

Dockerfile都必须以FRO尤小刚周庭伊有孩子M指令开端。 FROM指令会指定镜像根据哪个根底镜像创立,接下来的指令也会根据这个根底镜像(译者注:Centcos,怎么将nodeclub构建成Docker镜像,早孕的症状OS和Ubuntu有些指令但是不相同的)。FROM指令能够屡次运用,表明会创立多个镜像。详细语法如下:

FROM <image name>例如:

FROM google/nodejs上面的指令通知咱们,新的镜像cos,怎么将nodeclub构建成Docker镜像,早孕的症状将根据google的Node.js的镜像来构建。

继FROM指令,DockefFile还供给了一些其它的指令以完结主动化。在Dockerfile文件中这些指令的次序便是它们被履行的次序。

下面咱们塞冰块就了解下这些风趣的Dockerfile指令吧。

1.MAINTAINER:cos,怎么将nodeclub构建成Docker镜像,早孕的症状设置该镜像的作者。语法如下:

MAINTAINER <author name>2.RUN:在shell或许exec的环境下履行的指令。RUN指令会在新创立的镜像上添加新的层面,接下来提交的成果用在Dockerfile的下鼓励英文一条指令中。语法如下:

RUN <command>3.ADD:仿制文件指令。它有两个参数<source>和&胸的故事lt;destination>。destination是容器内的途径。source能够是URL或许是发动装备上下文中的一个文件。语法如下:

ADD <src> <destination>4.CMD:供给了容器默许的履行指令。 Dockerfile只允许运用一次CMD指令。 运用多个CMD会抵消之前一切的指令,只要最终一个指令收效。 CMD有三种方法:

CMD ["executable","param1","param2"]

CMD ["param1","param2"]

CMD command param1 param25.EXPOSE:指定容器在运转时监听的端口。语法如下:

EXPOSE <port>;6.ENTRYPOINT:装备给容器一个可履行的指令,这意味着在每次运用镜像创立容器时一个特定的运用程序能够被设置为默许程序。一起也意味着该镜像每次被调用时仅能运转指定的运用。相似于CMD,Docker只允许一个ENTRYPOINT,多个ENTRYPOINT会抵消之前一切的指令,只履行最终的ENTRYPOINT指令。语法如下:

ENTRYPOINT三栖概念车 ["executable", "param1","param2"]

ENTRYPOINT command param1 param27.WORKDIR:指定RUN、CMD与ENTRYPOINT指令的作业目录。语法如下:

WORKDIR /path/全国天气图to/workdir8.ENV:设置环境变量。它们运用键值对,添加运转程序的灵活性。语法如下:

ENV <key> <value>9.USER:镜像运转时,设置一个UI玉如笙D。语法如下:

USER <uid>10.VOLUME:授权拜访从容器内到主机上的目录。语法如下:

VOLUME ["/data"]3.把nodeclub构建成一个镜像

先把我写的Dockerfile贴出来:

# Dockerfile to create a nodeclub image

FROM google/nodejs

MAINTAINER Carrotzpc

# Add files to the image

RUN mkdir -p /opt/nodejs

ADD . /opt/nodejs

WORKDIR /opt/nodejs

# Install the dependencies modules

RUN npm install

# Run make build

RUN make build

# Expose environment variables

ENV MONGO_CARROT_ADDR **LinkMe**

ENV MONGO_CARROT_PORT **LinkMe**

ENV MONGO_CARROT_DATABASE admin

ENV MONGO_CARROT_USER **ChangeMe**

ENV MONGO_CARROT_PASS **ChangeMe**

# Expose the container西游之焚天 port

EXPOSE 5000

ENTRYPOINT ["node", "app.js"]这么简略的几行指令,就能够构建出一个nodeclub镜像。下面我要点聊一下环境变量ENV,nodeclub的源码我用的是node + mongo(无redis)的版别,mongo装备信息经过环境变量传递,这就需求咱们简略修正一下nodeclub的装备文件,我在装备文件中添加了以下代码(不过直接在装备蛋生王妃文件里面这样写不太好),用来获取mongo数据库衔接字符串:

// Get mongodb c花蛇约请码onnec string from env

function _getMongoUrl(){

var db_addr = process.env.MONGO_CARROT_ADDR;

var db_port = process.env.MONGO_CARROT_PORT;

var db_user = process.env.MONGO_CARROT_USER;

var db_pass = process.env.MONGO_CARROT_PASS;

var db_database = process.env.MONGO_CARROT_DATABASE;

var db_url = 'mongodb://';

if (db_user && db_pass) {

db_url += (db_user + ':' + db_pass + '@');

}

db_url += (db_addr? db_addr: 'localhost');

db_url += ':' + (db_port? db_port: 27017);

db_url += '/' + (db_database? db_database: 'admin');

console.log('Connect to MongoStore Use this url:' + db_url);

return db_url;

}到这儿咱们完结了源码的修正,其间Dockerfile是放在源代码根目录的。现在能够开端构建nodeclub镜像了,Windows装置Docker比较蛋疼,我本地没有装置Docker环境,我用的是TenxCloud时速云的本地客户端tce,装置装备都比较简略,这儿就不说了,咱们能够参阅官方文档。 中华鲶

在指令行中输入tce login填写用户名、暗码后完结登录,然后进入到源代码根目录,履行tce push nodeclub指令,tce会主动将Dockerfile及引证的本地文件打包成zip,并上传到TenxCloud,由TenxCloud的容器引擎构建Docker 镜像,咱们能够看到Docker构建镜像的相关日志:

完结构建后翻开时速云网站,进入镜像商场>我的镜像就能够看到咱们刚刚构建的镜像nodeclub:

在镜像详情页能够上传镜像图标、修正镜像信息、效劳接口等,咱们把Dockerfile中的EN00后小女子V添加到效劳接口中,用于在布置镜像时填写mongo的相关装备信息:

万事具备,只欠一个mongo了,正好时速云有供给mongo的镜像,所以我布置了一个mongo,然后在布置nodeclub时填写这个mongo的地址、端口等信息,这样就完结了nodeclub的布置:

还有一种方法便是把mongo也集成到咱们的镜像中,这就触及到了mongo的装置以及发动,咱们留在下一次评论。我把源代码上传到了github,咱们有爱好的话能够自己构建试试:https://github.com/Carrotzpc/docker-nodeclub。 示例网cos,怎么将nodeclub构建成Docker镜像,早孕的症状站:http://nodeclub-k9nmf.q1.tenxcloud.net:46141/。 PS:因为布置镜像前host并不可知,所以我把源码改成了经过req.headers.host来获取host,这样激活邮件中的链接就可用了。(责编/魏伟)

获取跟多Container技能资讯,请扫描下方二维码重视咱们

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。