初识 docker 以及 node 应用的部署

本贴最后更新于 2194 天前,其中的信息可能已经渤澥桑田

​环境:centos7

docker 的安装以及一些设置

安装 docker

     yum install docker

启动 docker 服务

     systemctl start docker.service

设置开机启动

     systemctl enable docker.service

pull 下 nodejs 镜像,说是 docker hub 慢,就找到了一个国内的镜像去下载

     docker pull hub.c.163.com/nce2/nodejs:0.12.2

docker pull hub.c.163.com/nce2/nodejs:0.12.2

查看镜像

     docker images

docker images

创建 node 应用

然后在工作目录下创建 package.json 文件

     vi package.json

写入内容:

package.json

创建 server.js,也就是我们 node 应用的主文件

     vi server.js

写点内容:

server.js

创建 Dockerfile 文件

在项目代码更目录创建 Dockerfile 文件

     vi Dockerfile

写入以下内容:

Dockerfile

下面简单解释下 Dockerfile 文件

FROM hub.c.163.com/nce2/nodejs:0.12.2

FROM 是构建镜像的基础镜像源,后面的一串是我们刚才 pull 下来的那个 Image,如果本地没有 Docker,会自己 pull 镜像的。

#Create app directory

RUN mkdir -p /home/Service

WORKDIR /home/Service

第一句 RUN 用于在 Image 里创建一个文件夹,将会用于保存我们的代码。

第二句 WORKDIR 是将我们创建的文件夹作为工作目录。

Bundle app Source

COPY . /home/Service

RUN npm install

第一句的 COPY 是把本机当前目录下的所有文件拷贝到 Image 的 /home/Service 目录下。

第二句的 RUN 是用 npm 安装我们的 node 应用中的所有依赖包。

EXPOSE 8888

我们的 node 应用监听的是 8888 端口,我们可以把这个端口暴露给主机。这样我们就可以从外网访问我们的应用了。

CMD ["npm" , "start"]

用来启动我们的 node 应用。

构建 Image

在我们的 Dockerfile 所在的目录下执行构建命令

docker build -t mynodeapp .

别忘了最后那个点,不久我们会看到成功构建的信息。

构建信息

然后我们去查看一下我们构建的镜像

docker images

docker images

运行构建的 Image

docker run -d -p 8888:8888 50550c

-d 表示容器会在后台运行,-p 表示端口映射,把本机的 8888 端口映射到 container 的 8888 端口,这样外网就可以通过本机访问我们的应用,

后面的 50550c 是我们 Image 的 ID,没写后面的是因为根据这几个就能定位出来了。

竟然报错了,也不能访问 8888 端口。想了一下,应该是镜像的问题。

就跑去 dochub 找了官方镜像,修改 Dockerfile 里的基础镜像

FROM node:4-onbuild

然后再次构建我们的应用

docker build -t nodeapp .

然后开始从官网下载镜像,确实特别慢..等了好久才下载完 1 个。貌似需要下载 9 个文件..

在漫长的等待过程中。。。

下载基础镜像

算了,放弃。。找找国内镜像试试吧~~

然后去 daocloud 注册了帐号,在这拉镜像吧

下载基础镜像

很快,镜像 pull 下来了。然后查看下现在的镜像。

docker images

现在我们去改下 Dockerfile 的基础镜像吧。

FROM daocloud.io/library/node

现在我们再来构建下镜像试试

docker build -t nodeapp .

看到了构建成功的信息,接着查看一下 imges

然后启动:

docker run -d -p 8888:8888 7b784

果然出现了问题... 启动不成功,最后才知道,镜像和 Dockerfile 都是对应的,不对应就可能会出现上面的所有问题。(切记)

最近还是选择了官网的镜像,等待了 40 分钟左右,全部 pull 下来了,开始干活~~

修改 Dockerfile 文件如下:

FROM node:4-onbuild

replace this with your application's default port

EXPOSE 8888

重新构建:

docker build -t my-node-apps .

构建 images

启动 docker 镜像:

docker run -d -p 8888:8888 8b

然后查看下 container

docker ps

docker ps

然后用浏览器访问下 8888 端口:

访问成功了!!!

完美!!!!!!!!!这次终于成功了~

然后去删除没用的 images 和 container...

若要删除所有的 image, 使用命令:docker rmi  $( docker  images -q )

删除 container   docker rm id

总结

因为镜像的事情走了不少弯路,浪费了很多的时间,所以最好还是去官网下需要的东西,然后看官方给的文档。

今后还要去学习一些 image 的管理,container 的管理,以及应用日志处理相关的东西。

参考

Docker Hub

在Docker中运行Node.js的Web应用 - DockOne.io 无标题文档

系统运维|如何在 CentOS 7 上安装 Docker

Docker实践--部署Nodejs应用 - li-peng - 博客园

​​​​

  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    496 引用 • 934 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
maixiaojie
如果哪天你累了告诉我 我背你。❤️

推荐标签 标签

  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    181 引用 • 821 回帖
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    32 引用 • 99 回帖
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    45 引用 • 114 回帖 • 180 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    167 引用 • 408 回帖 • 489 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 675 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 7 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 248 回帖
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 394 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    298 引用 • 763 回帖
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 512 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 347 关注
  • Visio
    1 引用 • 2 回帖 • 1 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25745 引用 • 106536 回帖
  • 996
    13 引用 • 200 回帖 • 3 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    167 引用 • 597 回帖 • 2 关注
  • 印象笔记
    3 引用 • 16 回帖 • 1 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 256 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 634 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    326 引用 • 1395 回帖
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    227 引用 • 476 回帖
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 652 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    54 引用 • 37 回帖 • 1 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    438 引用 • 1250 回帖 • 594 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 635 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 31 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖