创建docker 镜像有两种方法
1 是通过commit命令 形成一个新的镜像
2 就是通过dockerfile,通过build 构建最终的镜像文件。
在实际环境中,变量很多,不能说修改一次commit一次,很麻烦,此时我们就可以通过dockerfile来创建镜像,一次搞定。
dockerfile 文件:
从上到下执行,关键保留字都要大写。
每次运行一行都相当于创建了一个新的镜像,commit一次,之后在创建出一个容器,在容器内在执行下一条命令,直到命令全部运行完形成最终的镜像。
官网 dockerfile
from是指基础镜像,当前新镜像是基于哪一个镜像的,指定一个已存在的镜像作为模板。
是镜像维护者 指当前的镜像是由谁编写的 加上姓名和邮箱。
run是在docker built 时运行的,他有两种格式
1、 是 shell格式 比如 RUN apt-get -y install vim (更常用)
2、是exec格式 RUN ['可执行文件',‘参数1’,‘参数2’]
比如 RUN['./text.php','dev','offline'] 就相当于 RUN ./text.php dev offline
当前容器对外暴露出的端口,就比如我们的-p
指定在我们的容器创建后,默认进入的工作目录,一个落脚点
指定镜像以什么样的用户去执行,如果不指定,就是root
用于在构建镜像的过程中 设置环境变量。
容器卷 即-v
ADD 是COPY+解压
COPY 没有解压功能
COPY是将宿主机的文件或目录 复制到我们镜像中
命令:
类似于 docker cp....
注意:
Dockerfile 可以有多个CMD命令,但是最终只会有最后一个生效,并且 CMD 命令会被docker run后边的参数所取代。
比如 tomcat Dockerfilw 最后是 CMD ['catalina.sh',‘run’]
当我们启动一个tomcat容器时,会自动执行该命令 ,且如果访问8080端口,会访问成功。
但是如果我们写了 docker run -d tomcat /bin/bash
则会用bin/bash 代替 原始的CMD 此时在访问 8080端口就会失败。
可以和CMD 一起使用,一般是变参的话才会只用CMD,此时CMD等于是在给ENTRYPOINT传参,而不是run时要使用的命令。
CMD也会被run后参数取代
通过Dockerfile 在ubuntu上添加一个vim功能 生成一个新的镜像。
使用docker built -t 镜像名 [:tag] .
记得最后有一个 空格加一个点
已生成
仓库名和tag 都为None
Dockerfile 内容:
第一次有个错误:即 我写成了 FROM Ubuntu 仓库第一个字母大写了
创建
docker image ls -f dangling=True 查找本地所有的虚悬镜像
docker image prune 删除虚悬镜像