当前位置: 首页 > news >正文

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

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

相关文章:

  • 阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel
  • Axure元件的介绍使用以及登录界面和个人简历的绘制
  • 专项测试——移动app安装包检测
  • Python实验项目9 :网络爬虫与自动化
  • Qt 文字描边(基础篇)
  • 总结MySQL 的一些知识点:MySQL 运算符
  • 机器视觉技术与应用实战(Chapter Two-03)
  • 了解Spring Boot:重要注解详解
  • 向量、矩阵、数组、向量空间
  • <VR串流线方案> PICO 4 Pro VR串流线方案 Oculus Quest2 Link串流线方案
  • 计算机网络:网络层(无分类编址CIDR、计算题讲解)
  • 一篇文章了解Flutter Json系列化和反序列化
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • 【深度强化学习】策略梯度方法:REINFORCE、Actor-Critic
  • 前后端传参格式
  • 04-Nacos中负载均衡规则的配置
  • C# 数据的保存和提取(.TXT格式)
  • 外包干了3个月,技术退步明显。。。
  • SSL证书HTTPS保护服务
  • YOLOv8使用自定义改进后的模型同时《加载官方预训练权重》教程,附代码
  • 网络主播直播泄机密,别让这些“小事”成威胁国家安全的“突破口”
  • AI药企英矽智能第三次递表港交所:去年亏损超1700万美元,收入多数来自对外授权
  • 明星同款撕拉片,为何能炒到三四百一张?
  • 云南一餐馆收购长江野生鱼加工为菜品,被查处罚款
  • 甘肃省政府原副省长赵金云被决定逮捕
  • 牛市早报|国家发改委:今年将推出约3万亿元优质项目,支持民营企业参与