Docker笔记:关于Dockerfile及构建镜像

2023-12-13 05:45:16

Dockerfile 的作用

  • Dockerfile让docker命令变得更简单,是用于构建docker镜像,实现自动化部署

Dockerfile 构建自己的centos镜像

  • 这里有一个应用场景,创建一个自己的centos镜像,这个镜像有我们所需的软件
    • 可以将我们一系列的操作,配置在dockerfile中
    • 通过 docker build 就可以生成我们自己的 centos镜像

1 ) 编写 Dockerfile

FROM centos
RUN yum install -y net-tools
WORKDIR /home/www
CMD /bin/bash

2 )构建centos镜像

  • $ docker build -f Dockerfile -t my_centos:v1.0.0 .
    • 这里 -f Dockerfile 指定Dockfile文件
    • 这里Dockerfile用的文件名就是Dockerfile可以不加,忽略
    • -t 是打镜像标签
    • 注意,最后面的 .

3 )运行新打包的镜像

  • 运行:$ docker run -it my_centos
    • 启动后,自动进入 /home/www目录中,可以使用 pwd 来测试
    • ifconfig 测试可以输出,说明 net-tools 已经正确被安装了
    • 这里 run 的时候,后面没有 /bin/bash 但是运行之后
    • 直接打开了bash环境了,是Dockerfile中的CMD执行了

Docker 打包 Nginx 镜像

  • Dockerfile 构建一个 nginx 镜像
  • 构建好的镜像内会有一个 /usr/share/nginx/html/index.html文件

1 )编写 Dockerfile

  • 新建 Dockerfile_nginx 文件
    FROM nginx
    RUN echo 'hello docker' > /usr/share/nginx/html/index.html
    WORKDIR /usr/share/nginx/html
    
  • 注意,上面没有 CMD, 如果添加命令,就会替换了 nginx 的默认启动命令
  • $ docker build -f Docker_nginx -t my_nginx:v1.0.0 . 这里是打包
  • $ docker run -itd -p 80:80 my_nginx:v1.0.0 运行新镜像
  • $ curl 127.0.0.1 可看到结果
  • $ docker exec -it 容器id /bin/bash
    • $ pwd 可看到 在 工作目录 /usr/share/nginx/html中

关于 Dockerfile中的一些配置信息

FROM           # 基础境像,一切从这里开始构建
MAINTAINER     # 镜像是谁写的,姓名+邮箱
LABEL          # LABEL 指令用来给镜像添加一些元数据
RUN            # 编译镜像时运行的脚本
COPY           # 编译镜像时复制文件到镜像中 不会解压
ADD            # 编译镜像时复制文件到镜像中 tar.gz 文件会自动解压
WORKDIR        # 镜像的工作目录 相当于 cd 的 命令
CMD            # 设置容器启动的命令,会被run时指定的命令替换掉, 比如 docker -it nginx /bin/bash 这里的 /bin/bash
ENTRYPOINT     # 设置容器启动的命令,不会被外部配置替换
EXPOSE         # 设置镜像暴露的端口,告诉外面容器暴露的端口 和 -p 不一样
VOLUME         # 设置容器挂载的卷,告诉外面容器暴露的数据卷 和 -v 不一样,在容器内使用 df 命令可以看到挂载的卷
ENV            # 设置容器的环境变量 和 -e 一样

构建一个复杂版的 centos 镜像

1 )编写 Dockerfile_centos 文件

FROM  centos
MAINTAINER  Wang
ENV MyLocal /home
WORKDIR $MyLocal
EXPOSE 80
VOLUME ["volume1", "volume2"] # 这样写在根目录下会产生这两个目录
RUN yum install -y net-tools
RUN yum install -y vim
ADD test.tar.gz /root
COPY test.tar.gz /home
CMD /bin/bash

2 ) 构建新镜像

  • $ docker build -f Dockerfile_centos -t my_centos:v2.0.0 .

3 )运行镜像

  • $ docker images 找到刚才打包的新镜像
  • $ docker run -it --name my_centos2 my_centos:v2.0.0的镜像id

4 )验证

  • $ pwd 验证了 workdir 是 /home
  • 再验证打包与解压的结果,验证通过
  • /volume1, /volume2 都存在
  • $ printenv 验证环境变量,验证通过
  • 其他验证,通过
  • $ docker inspect 镜像id | grep xxx 这里的 xxx 是你想看的任何相关信息
  • 这样可以看很多细节
  • 可查看 容器中的 /volume1 在物理机上的位置
  • 拿到位置后可验证内外数据同步

Dockerfile 中CMD与ENTRYPOINT

  • CMD 可被追加的命令替换
  • ENTRYPOINT 不可被替换,如果有命令,会被追加
    • 如果 ENTRYPOINT 配置的是 [“ls”, “-a”]
    • $ docker run -it 镜像id -l
      • 后面的 -l会追加,类似 ls -a -l

文章来源:https://blog.csdn.net/Tyro_java/article/details/134956833
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。