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

news/2024/7/7 19:14:32

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

http://lihuaxi.xjx100.cn/news/1886828.html

相关文章

ML之FE:数据预处理/特征工程之构造特征—构造交互特征(四则运算/多项式)—将输入特征进行多项式映射,即根据两个特征来构造多项式组合特征的代码实战

ML之FE:数据预处理/特征工程之构造特征—构造交互特征(四则运算/多项式)—将输入特征进行多项式映射,即根据两个特征来构造多项式组合特征的代码实战 目录

docker二 redis单机安装

创建文件夹 mkdir -p /usr/local/redis/data /usr/local/redis/logs /usr/local/redis/conf chmod -R 777 /usr/local/redis/data* chmod -R 777 /usr/local/redis/logs*另一种风格 # 创建 redis 配置存放目录 mkdir -p /home/docker/redis/conf && chmod 777 /home/…

Axure元件的介绍使用与登录界面以及个人简历的绘制

目录 一.Axure元件介绍 1.1.简介 1.2.常见的元件 1.3.元件的操作 二.基本元件的使用 2.1.矩形和圆形 2.2.图片 2.3.文本元件 2.4.热区 2.5.线段元件 三.表单型元件的使用 3.1.文本框 3.2.文本域 3.3.下拉列表 3.4.列表框 3.5.单选按钮 3.6.复选框 四.菜单和表…

QML WebEngineView 全屏和退出

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在使用浏览器时,我们经常会用到全屏模式,最常见的场景有:观看视频、阅读文章、在线演示等。全屏模式的优点在于,它可以让用户充分地利用有限的屏幕空间,更好地专注于内容本身,从而提供丰富的沉浸式视觉…

磁力计LIS2MDL开发(1)----轮询获取磁力计数据

磁力计LIS2MDL开发.1--轮询获取磁力计数据 概述视频教学样品申请源码下载通信模式速率生成STM32CUBEMX串口配置IIC配置CS设置串口重定向参考程序初始换管脚获取ID复位操作BDU设置设置速率启用偏移消除开启温度补偿设置为连续模式轮询读取数据主程序演示 概述 本文将介绍如何使…

如何基于Python + requests实现发送HTTP请求

这篇文章主要介绍了如何基于Python requests实现发送HTTP请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一、在接口自动化测试过程中,存在两种情况: 一种是不需要鉴权的接口&…

【动态规划精选题目】1、斐波那契数列模型

此动态规划系列主要讲解大约10个系列【后续持续更新】 本篇讲解入门级:斐波那契模型,会在讲解题目同时给出AC代码 为什么叫斐波那契数列模型?因为本篇4道题的状态转移方程都跟斐波那契递推方程差不多,但这点不重要,请往…

Nginx的location匹配和rewrite重写

一、location匹配 常用的正则表达式 ^ :匹配输入字符串的起始位置 $ :匹配输入字符串的结束位置 * :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”:匹配前面的字符一次或多次。如“ol”能匹配“ol”及“oll…