docker build -f /path/to/a/Dockerfile -t tag:12 .
-f指定dockerfile的文件路径 . 指构建上下文,构建上下文是指Dockerfile
所在的本地路径或一个URL
(Git
仓库地址)。构建上下文环境会被递归处理,所以,构建所指定的路径还包括了子目录,而URL
还包括了其中指定的子模块。
比如dockerfile 的copy a.go a.go 就是在我们当前目录下(. 所在的目录下)
基础镜像的选择
固定版本tag 尽量不使用lastest
尽量小的镜像
FROM
FROM nginx:1.21.0-alpine
RUN
主要用在image里面执行指令,安装软件,下载等
dockerfile 每次执行run 语法 都会生成一个image layer,导致镜像臃肿
文件复制和目录操作
copy 和 add
copy 和add都可以把文件复制到镜像中,如果目录不存在,自动创建
复制压缩文件
add 比copy高级,add复制同时解压缩
WORKDIR 工作目录,复制的文件都会在此文件夹下
容器启动时执行的命令会在该目录下执行
环境变量ARG 和 ENV
ENV : 进入到容器之后env
arg 只在创建镜像,但是不会保存在镜像里面,在容器里面也是不能用到这个变量。
env 会永久保存在镜像里面,创建容器之后,在容器env中可以获取到该变量
--build-arg 可以动态修改变量值
docker image build -f Dockerfile -t myimage:2.0 --build-arg VERSION=2.0.0
就会覆盖掉docker file 里面的arg
CMD
设置容器启动时默认执行的命令
docker container run -it myimage
直接进入到容器 sh:
因为基础镜像 有cmd
启动容器可以直接在后面加入
docker container run -it myimage ipinfo 8.8.8.8 这个就是执行命令,取代dokerfile的CMD
ENTRYPOINT
entrypoint 是必须会执行的
cmd 是可以被参数替换的
两者可以同时使用 传递参数
cmd 和 entrypoint同时支持shell 格式 exec格式
docker system prune -f | 清理已退出的容器 |
docker image prune -a | 清理没有使用的镜像 |