Dockerfile 是一个文本文件,它包含了生成镜像所需的所有命令,用来制作Docker的镜像。
介绍
构建镜像目的:
- 保存对容器的修改,并再次使用
- 自定义镜像的能力
- 以软件的形式打包并分发服务以及其运行环境
什么是 Dockerfile
通过Dockerfile构建镜像,Dockerfile 是一个文本文件,它包含了生成镜像所需的所有命令,用来制作Docker的镜像。
构建
通过容器构建
docker commit
提交运行中的容器为镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a, --author="" Author
e.g,"xiexianbin me@xiexianbin.cn"
-m, --message="" commit message
-p,--pause=true Pause container during commit
docker run -it -p 80 --name commit_test ubuntu /bin/bash
apt-get install nginx
exit
docker commit -a "xiexianbin" -m "xiexianbin" commit_test xiexianbin:nginx:commit
docker images
docker run -d --name nginx_web -p 80 xiexianbin/nginx:commit nginx -g "daemo off;"
docker ps
curl http://127.0.0.1:4980
docker push xiexianbin/nginx:commit
通过 Dockerfile 文件构建
# first Docker
From ubuntu:14.04
MAINTATIER xiexianbin "me@xiexianbin.cn"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80
docker build [OPTIONS] PATH | URL | -
--force-rm=false
--no-cache=false
--pull=false
-q,--quiet=false
--rm=true
-t,--tag=""
--build-arg "HTTP_PROXY=http://proxy.xiexianbin.cn/" # build 参数,代理设置
--build-arg "HTTPS_PROXY=http://proxy.xiexianbin.cn/"
docker build -t='xiexianbin/nginx' .
构建技巧
每条 instruction 的耗时
# 1. 开启
export DOCKER_BUILDKIT=1
# 2. 参数 --progress plain 获得输出结果
docker build -t <image-name> -f Dockerfile --progress plain .
Build Cache
以 Nodejs 项目构建为例:
FROM node:8
WORKDIR /usr/src/app
# package.json 不经常变动,可以缓存起来
COPY package*.json ./
RUN npm install
COPY . .
CMD [ "..." ]