使用Dockerfile构建镜像
使用Dockerfile构建镜像
创建一个空目录 docker
mkdir docker
进入此目录
cd docker
创建并编辑DockerFile文件
vi touch Dockerfile
Dockerfile文件的内容如下:
from node
label maintainer xxx@qq.com
RUN git clone -q https://github.com/docker-in-practice/todo.git
workdir todo
RUN npm install > /dev/null
EXPOSE 8000
CMD ["npm","start"]
docekrfile文件执行是从上往下顺序执行的。
Dockerfile文件中的目录的作用如下:
FROM node ⇽--- 定义基础镜像
LABEL maintainer ian.miell@gmail.com ⇽--- 声明维护人员
RUN git clone -q https://github.com/docker-in-practice/todo.git ⇽--- 克隆todoapp代码
WORKDIR todo ⇽--- 移动到新的克隆目录;启动容器时用户所处的默认目录
RUN npm install > /dev/null ⇽--- 执行node包管理器的安装命令(npm)
EXPOSE 8000 ⇽--- 指定从所构建的镜像启动的容器需要监听这个端口
CMD ["npm","start"] ⇽--- 指定在启动时需要执行的命令
构建镜像
使用docker build命令构建镜像,“.”指定了Dockerfile文件在当前目录,如果dockerfile文件在其他目录,请指定dockerfile文件的位置
docker build .
输出结果如下:
最后一行输出了镜像的id
给镜像打tag
使用镜像id给镜像打标签,也可以理解给镜像取名,后续可以使用名称指定镜像
docker tag bfeafdb9d45b1ddf130fbb71d04193343b16f51a1d4c5ec4f7b70d41d9f79cbe todoapp
启动容器
docker run子命令启动容器,-p将容器的 8000 端口映射到宿主机的8000端口上,–name给容器赋予一个唯一的名字,最后一个参数是镜像
docker run -i -t -p 8000:8000 --name example todoapp
部分常见命令
docker ps -a
#查看已经启动和移除的容器,以及其ID和状态
docker ps -a
结果如下
docker start 容器名
# 重新启动容器,在后台运行
docker start example2
# 终止在后台运行的容器
docker stop example1
docker diff
#显示了自镜像被实例化成一个容器以来哪些文件受到了影响
docker diff
参考
- 《Docker实战》