dockerfile是什么?我们用dockerfile做什么?带着问题看内容嘛,因为我也是在学习
Sample Dockerfile
编写Dockerfile是将应用容器化的第一步,你可以这么认为,Dockerfile中的命令就好像是教你一步一步做菜的菜谱去告知docker如何构建我们的镜像。
# Use the official image as a parent image. FROM node:current-slim # Set the working directory. WORKDIR /usr/src/app # Copy the file from your host to your current location. COPY package.json . # Run the command inside your image filesystem. RUN npm install # Add metadata to the image to describe which port the container is listening on at runtime. EXPOSE 8080 # Run the specified command within the container. CMD [ "npm", "start" ] # Copy the rest of your app's source code from your host to your image filesystem. COPY . .
我们先从docker官网给的例子一步一步看吧
- 从FROM开始,后面的node:current-slim是一个由node.js供应商构建的官方镜像,并且经过docker验证通过,包含node.js长期维护的解释器和相关的依赖。
- 使用WORKDIR指定了后续所有的操作都会在镜像文件的文件系统目录/usr/src/app目录中执行(不是我们自己主机上的文件系统)。
- COPY会将package.json文件复制到镜像的当前目录中去(学过linux的同学都知道 . 是哪里)。这里额外说明一下,这个package.json文件会复制到我们的WORKDIR中也就是会在镜像里的这个位置/usr/src/app/package.json。再次提醒COPY是从复制主机文件到镜像的内部
- RUN指令就是在镜像中执行命令用的,即在镜像中执行npm install,它将会读取package.json确定依赖,并且安装。
- 最后一个COPY,会复制你的应用(服务)的剩余源代码从你的主机到你镜像的文件系统。这里我的理解就是(项目连锅端进镜像里,依赖在镜像里单独装)
到这里,这些步骤和在主机上设置环境,和安装应用的步骤机会是相同的,就是一步一步来。使用Dockerfile的好处就是,捕获了这些配置的动作,让我们的服务或者应用能够更好更方便的迁移。上面的步骤已经构建好了项目文件系统。但是Dockerfile中还有其他几行接着看吧
- CMD指令指定了一些元数据,描述了如何基于该镜像运行容器(这里不看操作真的不懂),该镜像支持npm start的容器化过程。
- EXPOSE 8080通知Docker该容器在运行时正在监听8080端口。
我们上面看到的例子就是一种很好的构建Dockerfile的方法。始终以FROM开头,然后按照步骤构建我们的私有文件系统,并且以添加元数据规范作为结束。Dockerfile指令还有很多,请参考
下次更新如何部署Django项目
因为我自己刚工作,只能晚上回家自己慢