环境:centos7
yum install docker
systemctl start docker.service
systemctl enable docker.service
说是docker hub 慢,就找到了一个国内的镜像去下载
docker pull hub.c.163.com/nce2/nodejs:0.12.2
docker images
然后在工作目录下创建package.json文件
vi package.json
写入内容
创建server.js,也就是我们node应用的主文件
vi server.js
写点内容
在项目代码更目录创建Dockerfile文件
vi 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应用。
在我们的Dockerfile所在的目录下执行构建命令
docker build -t mynodeapp .
别忘了最后那个点,不久我们会看到成功构建的信息。
然后我们去查看一下我们构建的镜像
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下来了。然后查看下现在的镜像。
现在我们去改下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 .
启动docker镜像:
docker run -d -p 8888:8888 8b
然后查看下container
docker ps
然后用浏览器访问下8888端口:
完美!!!!!!!!!这次终于成功了~
然后去删除没用的images和container…
若要删除所有的image, 使用命令:
docker rmi $( docker images -q )
删除container
docker rm id
因为镜像的事情走了不少弯路,浪费了很多的时间,所以最好还是去官网下需要的东西,然后看官方给的文档,英文的也要尽力去看。
今后还要去做学习一些images的管理,container的管理,以及应用日志处理相关的东西。