脚本宝典收集整理的这篇文章主要介绍了Dockerfile,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
思考:
操作系统组成:
Linux 文件系统由 bootfs 和 rootfs 两部分组成:
Docker 镜像:
总结:
Docker 镜像如何制作?
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load –i 压缩文件名称
什么是 Dockerfile ?
Dockerfile 主要组成部分:
使用 Dockerfile 做定制的镜像,都是从基础镜像开始的。这个基础镜像可以是各种版本的操作系统、或带着中间件的操作系统、或是自定义的操作系统镜像。本地有就从本地直接用,本地没有会去下载。
好习惯是将 Dockerfile 文件放在集中的位置,最好是共享存储里面。然后以项目名称创建目录,以 tag 名创建子目录。
[root@localhost ~]# mkdir dockerfile
[root@localhost ~]# cd dockerfile/
[root@localhost dockerfile]# mkdir nginx
[root@localhost dockerfile]# cd nginx
[root@localhost nginx]# mkdir v1from
[root@localhost nginx]# cd v1from/
[root@localhost v1from]# vi Dockerfile
注意创建 Dockerfile 名称就只能叫做“Dockerfile”,不然的话需要用 -f 参数指定 Dockerfile,看个人习惯。如果使用清晰的目录结构,建议使用 Dockerfile 命名。
这个 Dockerfile 只有一行 from 命令,即引用 nginx 这个基础镜像,剩余的动作完全没有。这并没有实际意义,除了演示不会有人这么做 Dockerfile 的。
# 构建镜像
docker build -t nginx:v1from .
注意:
使用新做的 nginx:v1from 镜像启动容器:
用于执行后面跟着的命令行命令。有两种格式:
RUN <命令行命令>
RUN ["可执行文件", "参数1", "参数2", ...]
仍然以 nginx 为基础镜像,这次增加一个 RUN 命令:
说明:可以到 docker wangt.cc 上查看 nginx 镜像的说明文档,找到这个镜像中 nginx 默认 web 目录的位置为:/usr/share/nginx/html/,并使用 echo 命令打印一句话并重定向到该目录下的 index.html 文件中。
容器启动后,再通过 nginx 看到这个静态页面查看命令执行结果。
可见默认文件 index.html 的内容已被修改。
注意事项:
# docker build -t nginx:3runwithoutrm .
FROM centos
RUN yum install -y wget
RUN wget http://nginx.org/download/nginx-1.19.10.tar.gz
RUN tar -zxvf nginx-1.19.10.tar.gz
# docker build -t nginx:1runwithoutrm .
FROM centos
RUN yum install wget &&
wget http://nginx.org/download/nginx-1.19.10.tar.gz &&
tar -zxvf nginx-1.19.10.tar.gz
# docker build -t nginx:4runwithrm .
FROM centos
RUN yum install wget
RUN wget http://nginx.org/download/nginx-1.19.10.tar.gz
RUN tar -zxvf nginx-1.19.10.tar.gz
RUN rm -f nginx-1.19.10.tar.gz
# docker build -t nginx:1runwithrm .
FROM centos
RUN yum install wget &&
wget http://nginx.org/download/nginx-1.19.10.tar.gz &&
tar -zxvf nginx-1.19.10.tar.gz &&
rm -f nginx-1.19.10.tar.gz
结论:
COPY 命令用于将本地文件或者目录拷贝进容器镜像。
如下图,构建 dockerfile,目录 web,web 下有一个 a.html 文件,文件中一句话。
启动容器并从浏览器中查看目录下的文件:
注意事项:
CMD 用于容器启动时后执行命令,注意和 RUN 的区别(RUN 用于构建的时候执行命令)。
在没有 ENTRYPOINT 的情况下,CMD 就是容器用来启动前台用户进程的命令。
格式:
CMD <shell 命令>
CMD ["可执行文件或命令", "参数1", "参数2", …]
这里推荐第二种写法,不然的话第一种可执行文件只能用 sh 脚本。
Dockerfile 说明:
1)docker run 时不加启动参数
注意,此处 Dockerfile 中未加入 EXPOSE,需要指定后端端口,用小写 -p 启动:
docker run -d -p 80:80 nginx:v4cmd
2)docker run 时加启动参数
docker run -d -p 81:80 nginx:v4cmd nginx -g "daemon off;" -c /nginx/nginx.conf
可以看到,若启动时带了运行参数,则会覆盖掉 Dockerfile 中的 CMD 执行内容,以新的命令和参数启动。
CMD 注意事项:
和 CMD 是同类命令,可以单独使用,也可以和 CMD 配合使用。
单独使用 ENTYRPOINT 格式:
ENTYRPOINT ["命令或者可执行脚本", "参数一", "参数二", …]
单独使用 ENTRYPOINT 时,和 CMD 不同,其参数不会被 docker run 时传入的启动参数所覆盖,但是 docker run 传入的启动参数会作为 ENTRYPOINT 指定命令的参数传入。
Dockerfile 示例内容:
FROM centos
RUN yum install -y nginx
COPY default.html /usr/share/nginx/html
RUN mkdir -p /nginx/html
COPY modify.html /nginx/html
COPY nginx.conf /nginx
ENTRYPOINT ["nginx","-g","daemon off;"]
1)docker run 时不加启动参数
2)docker run 时加启动参数
docker run -d -p 81:80 nginx:v5entrypoint -g "daemon off;" -c /nginx/nginx.conf
可以看到,modify.html 生效,但是这次传入的参数并不是完整的 nginx -g "daemon off;" -c /nginx/nginx.conf 命令,而是仅仅只有参数,并且参数覆盖了镜像中 ENTRYPOINT 的参数。
若两个命令同时存在,CMD 本身不再运行命令,其内容变成 ENTRYPOINT 的参数,同时 CMD 的内容依然可以被 docker run 时候的启动参数覆盖,进而传递给 ENTRYPOINT。
换句话说,两者组合,可以完成定参和变参的混合定义。
Dockerfile 示例:
FROM centos
RUN yum install -y nginx
COPY default.html /usr/share/nginx/html
RUN mkdir -p /nginx/html
COPY modify.html /nginx/html
COPY nginx.conf /nginx
ENTRYPOINT ["nginx","-g","daemon off;","-c"]
CMD ["/etc/nginx/nginx.conf"]
1)docker run 时不带参数
2)docker run 时带参数
实际使用中,ENTRYPOINT 和 CMD 组合的方式会更常见一些。
实现效果和 docker run -v 挂载主机目录一样。
写在 Dockerfile 中的好处是,万一在 docker run 时候忘记了 -v 参数,数据也不会丢失。
另外 docker run -v 指令会覆盖 Dockerfile 的 VOLUME 指令。
需求:自定义 centos7 镜像
实现步骤:
文件内容:
通过 dockerfile 构建镜像:
docker bulid –f dockerfile文件路径 –t 镜像名称:版本
实现步骤:
文件内容:
通过 dockerfile 构建镜像:
docker bulid –f dockerfile文件路径 –t 镜像名称:版本
以上是脚本宝典为你收集整理的Dockerfile全部内容,希望文章能够帮你解决Dockerfile所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。