Deploy web in docker!

在centOS中使用docker部署简单的web服务

本机环境为物理机中开启虚拟机,虚拟机中已经配置好网络,可以正常访问外网。
先在物理机中创建项目代码,推送到github,然后在虚拟机中拉取代码,创建镜像,启动容器。也可以直接在centOS中创建项目和必要的脚本。

  1. 先快速生成一个简单web项目,本次使用EggJS框架。
    如何快速搭建EggJS框架
    在生成的项目根目录下创建Dockerfile文件(对,没有扩展名)
    Dockerfile内容:
    
      FROM mc2labs/nodejs
      LABEL Name=mytest
      # RUN npm config set registry=https://registry.npm.taobao.org/ \
            && npm install egg-scripts -g  \
            && npm install \
            && npm install -g typescript 
      EXPOSE 7001
      #CMD egg-scripts start --port 80 --daemon --title=APP_API
      CMD npm run dev
    
  

各种命令的含义点这里
以上就完成了Dockerfile脚本的工作。 本地测试项目可以正常运行之后推送到代码仓库。

  1. 在centOS中创建镜像并启动容器
    从代码仓库拉取项目代码到虚拟机中,cd进入项目Dockerfile所在根目录执行命令:
    docker build -t mynodeapp .
    注意最后那个点,表示当前目录,如果是在其他目录执行上述命令,那就需要把”.”改成Dockerfile的相对路径
    上述命令会逐步执行Dockerfile中的每行指令
    类似下图
    _config.yml 完成之后使用命令docker images查看所有存在镜像
    _config.yml 此时镜像已经创建好了,就需要运行镜像

执行命令docker run -d -p 7001:7001 <镜像id>
然后查看镜像是否成功运行docker ps
如果不成功,那应该是通过docker ps -a才能看到,此时可以通过日志查看原因。

执行docker logs <运行失败的容器id>,此处运行失败的容器id跟镜像id是不一样的,需要注意,容器id是执行docker ps -a返回的列表中状态为exited的容器对应的container id。

如果成功,docker ps命令会显示正在运行中的容器信息
_config.yml

测试一下是否可以访问运行中的web服务

curl 127.0.0.1:7001
hi, egg

成功。

Written on August 22, 2018