DockerFile创建及案例

2023-05-16

DockerFile

dockerfile是用来构建docker镜像的文件,命令脚本参数脚本!
构建步骤

  1. 编写一个dockerfile文件
  2. docker build 构建成为一个对象
  3. docker run 运行镜像
  4. docker push 发布镜像(DockerHub、阿里云镜像仓库)

去官网Docker-Hub查找一个镜像,选择版本会跳转到github获取一个具体的dockerfile,以centos:7为例
在这里插入图片描述很多官方镜像是基础版
Docker Hub中99%镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来进行构建

FROM scratch
ADD centos-7-x86_64-docker.tar.xz /

LABEL \
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20201113" \
    org.opencontainers.image.title="CentOS Base Image" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-11-13 00:00:00+00:00"

CMD ["/bin/bash"]

DockerFile的构建过程

基础知识

  1. 每个保留关键字(指令)都必须是大写字母
  2. 执行从上到下顺序执行
  3. # 表示注释
  4. 每个指令都会创建一个新的镜像层,并提交!

DockerFile是面向开发的,发布项目做镜像,编写dockerfile
DockerFile:构建文件,定义了一切步骤,源代码
DockerImages:通过DockerFile构建生成镜像,最终发布和运行镜像。
Docker容器:容器是镜像运行起来提供容器

DockerFile指令

DockerFile命令文档

FROM  # 基础镜像,指定基本(父)图像。
MAINTATNER # 镜像作者,用户名+邮箱,现在一般使用LABLE
LABEL # 提供元数据,包括维护者信息。
ENV   # 设置持久性环境变量。
RUN   # 运行命令并创建图像层,用于将软件包安装到容器中,docker build时运行。
COPY  # 将文件和目录复制到容器。
ADD   # 将文件和目录复制到容器,可以支持本地.tar文件。
CMD   # 为执行中的容器提供命令和参数,会覆盖参数,指定这个容器启动的时候要运行的命令,只能有一个CMD,只有最后一个生效,CMD实在docker run时运行。
ENTRYPOINT # 为执行中的容器提供命令和参数,对比CMD追加指令。但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当作参数送给ENTRYPOINT指令指定的程序。
WORKDIR # 设置镜像工作目录。 
ARG   # 定义在构建时传递给Docker的变量。
EXPOSE # 暴露端口。
VOLUME # 创建目录安装点以访问和存储持久数据。
ONBUILD # 当构建一个被继承DockerFile的时候会运行ONBUILD的指令,触发指令。
USER # 指定该镜像以什么样的用户去执行,如果都不指定,默认是root。

CMD和ENTRYPOINT 的区别

新建一个dockerfile文件cmd-centos

FROM centos
CMD ["ls","-a"]

编译运行

# 编译docker文件
docker build -f cmd-centos -t ccentos:01 .
# 运行镜像,ls -a命令执行
docker run [image_id] 
# 运行镜像,报错, -l替换了 ls -a命令导致报错
docker run [image_id] -l
# ls -al 替换 ls -a
docker run [image_id] ls -al

新建一个dockerfile文件ept-centos

FROM centos
ENTRYPOINT ["ls","-a"]
# 编译docker文件
docker build -f ept-centos -t ecentos:01 .
# 运行镜像,ls -a命令执行
docker run [image_id] 
# 运行镜像, -l追加到命令ls -a之后
docker run [image_id] -l

ENTRYPOINT 和CMD共用

构建nginx:test镜像

FROM nginx

ENTRYPOINT ["nginx","-c"] # 定参
CMD["/etc/nginx/nginx.conf"] # 变参

默认命令

# 实际执行命令 nginx -c /etc/nginx/nginx.conf
docker run nginx:test

传参运行

# 实际执行命令 nginx -c /etc/nginx/new.conf
docker run nginx:test -c /etc/nginx/new.conf

构建案例

在基础centos添加工具

构建一个具有vim和net-tools的dockerfile文件dockerfile-centos

FROM centos
MAINTATNER chenyonging<18882022676@163.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash

编译dockerfile

# 通过docke build 将dokerfile文件编译为镜像,注意结尾的一个.
docker build -f dockerfile-centos -t vncentos:01 .

通过docker history查看镜像的生成过程

# 通过镜像id查看生成过程
docker history [image_id]

部署tomcat镜像

  1. 准备镜像文件tomcat压缩包,jdk压缩包
  2. 编写dockerfile文件,官方命名Dockerfile,build会自动寻找这个文件,不用通过-f指定文件名

在这里插入图片描述

FROM centos
MAINTATNER chenyonging<18882022676@163.com>

COPY readme.txt /usr/local/readme.txt
# 默认会解压压缩包
ADD jdk-8ull-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.22.tar.gz /usr/local/

RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH

# 配置环境
ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar;$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22
ENV  PATH $PATH:$JAVA_HOME/bin;$CATALINA_HOME/lib;$CATALINA_HOME/bin

EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catlina.out

构建文件

# 创建镜像,由于使用观法名称DockerFile,不用指定文件名,注意结尾的小点
docker build -t diytomcat .

运行容器

# 运行容器
docker run [image_id]

测试访问

发布项目

发布镜像

发布到DockerHub

  1. 地址https://hub.docker.com/注册自己的账号。
  2. 在服务器上提交
# 查看登录命令
docker login --help
# 登录,根据提示输入密码
docker login -u [user_name]

登录完成提交镜像

# 推送镜像
docker push [user_name]/images_name:tag

为镜像添加tag

docker tag [image_id] [name]:tag

发布到到阿里云镜像服务上

  1. 登录阿里云,找到容器服务
  2. 创建命名空间
  3. 创建容器仓库,创建容器镜像
  4. 按照提示操作,在本地登录阿里云镜像仓库
  5. 提交镜像

docker命令图

在这里插入图片描述

虚悬镜像(dangling)

docker在删除或创建镜像时可能出现虚悬镜像(名称和tag都是<none>

# 查看虚悬镜像
docker images ls -f dangling=true
# 删除虚悬镜像
docker image prune
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DockerFile创建及案例 的相关文章

随机推荐

  • windows 环境变量PATH设置列表显示

    问题 编辑环境变量发现是如下界面 xff0c 完全无法编辑 xff1a 解决 当我们的变量值以 开头 xff0c 打开编辑的时候就会显示一串的变量值 调整变量值中的变量是以绝对路径开始 xff0c 即不要把 开头的变量放在最前面就可以了 x
  • Linux(ubuntu18.04)安装指定版本的 cmake

    span class token comment 获取cmake span span class token function wget span https github com Kitware CMake releases downlo
  • 【RV1126/RV1109学习笔记】#基础篇#(2)基础入门使用

    文章目录 一 调试方式 1 串口调试 2 ADB调试 3 网络调试 二 基础外设使用 音频使用 aplay arecord amixer 三 WIFI连接 四 屏幕背光控制 一 调试方式 1 串口调试 波特率 1500000 2 ADB调试
  • 【RV1126/RV1109学习笔记】#RKNN篇#(2)RKNN环境安装与测试

    文章目录 一 环境要求 二 Python pip 安装 python相关 问题 三 通过 docker 镜像安装 四 验证 五 测试 参考 一 环境要求 项 版本要求 操作系统版本 Ubuntu16 04 x64 及以上 Windows 7
  • 【RV1126/RV1109学习笔记】#基础篇#(1)资料与简介

    文章目录 一 官方资料 二 芯片差异表 三 芯片框架 四 IPC典型应用及EVB系统框图 参考 一 官方资料 瑞芯微智能视觉芯片RV1126是瑞芯微新一代智能视觉芯片 基于四核ARM Cortex A7内核 内置2T算力 NPU 支持4K3
  • 【RV1126/RV1109学习笔记】#RKNN篇#(3)RKNN模型转换示例

    文章目录 一 概述 二 模型转换流程 三 模型转换参考示例 四 执行模型转换 一 概述 RKNN Toolkit 支持 Caffe TensorFlow TensorFlow Lite ONNX Darknet Pytorch MXNet
  • 【RV1126/RV1109学习笔记】#RKNN篇#(4)RKNN模型推理示例

    文章目录 一 概述 二 模型推理流程 三 模型推理参考示例 四 执行模型推理 问题解决 一 概述 RKNN Toolkit 能够在 PC 上模拟 Rockchip NPU 运行 RKNN 模型并获取推理结果 也可以将RKNN 模型分发到指定
  • 【目录】瑞芯微RV1126/RV1109学习笔记

    目录 瑞芯微RV1126 RV1109学习笔记 基础篇 RV1126 RV1109学习笔记 基础篇 xff08 1 xff09 资料与简介 RV1126 RV1109学习笔记 基础篇 xff08 2 xff09 基础入门使用 RV1126
  • word文档转html利器

    有需求 xff0c 就会有相应的技术出现 xff0c 以前知道word可以用来书写html网页 xff0c 那自然就可以转成html页面 xff0c 难道我们要用word开发html页面吗 xff1f 你可能会问 xff0c 我为什么要把w
  • 【RV1126/RV1109学习笔记】#RockX篇#(3)人脸检测

    文章目录 一 概述 二 流程 三 API说明 四 实现代码 一 概述 人脸检测是人脸识别 人脸属性分类 人脸编辑 人脸跟踪等任务必不可少的早期步骤 其性能直接影响到人脸识别等任务的有效性 尽管在过去的几十年里 不受控制的人脸检测取得了巨大的
  • 【RV1126/RV1109学习笔记】#RockX篇#(2)API说明

    文章目录 基础API 人脸相关API 基础API span class token comment brief 创建Rockx模块 param handle out 创建的模块的句柄 param m in RockX模块的枚举 ref Ro
  • 【问题解决】python安装bs4后,仍然报错 ModuleNotFoundError: No module named ‘bs4‘

    问题 我这里是windows上使用出现的问题 xff1a 代码中使用了 from bs4 span class token function import span BeautifulSoup span class token commen
  • 【问题解决】python报错 IndexError: list index out of range

    问题 list 遍历时报错 xff1a IndexError list index out of range 分析 可能是 xff1a list 下标 index 超出范围list 为空 解决 try span class token pu
  • 机械+固态双硬盘时机械硬盘卡顿问题解决

    机械 43 固态双硬盘时机械硬盘卡顿问题解决 参考文章 xff1a xff08 1 xff09 机械 43 固态双硬盘时机械硬盘卡顿问题解决 xff08 2 xff09 https www cnblogs com xia weiwen p
  • IDM下载百度资源出现403的解决方法

    IDM下载百度资源出现403的解决方法 参考文章 xff1a xff08 1 xff09 IDM下载百度资源出现403的解决方法 xff08 2 xff09 https www cnblogs com aucy p 9567375 html
  • _tcsrchr 的用法

    tcsrchr 查找字符串中某个字符最后一次出现的位置 两个参数 第一个参数 xff1a 字符串 第二个参数 xff1a 查找的字符 返回值 xff1a 指向最后一次在字符串中出现的该字符的指针 xff0c 如果要查找的字符再串中没有出现
  • 航模无人机中PWM信号频率浅谈

    航模中执行机构 xff1a 动力电调 xff0c 舵机等基本都是通过PWM信号来驱动的 xff0c 但不同的电机或电调输入的信号频率和占空比又是不一样的 xff0c 这个是由什么决定的呢 xff1f 今天就以我的理解来简单讲一讲 最早的航模
  • 公网IP TCP服务器调试

    在MCU上调试4G等模块时 xff0c 为了验证和平台TCP通信是否顺畅 xff0c 很多时候需要一个公网的IP环境能够直接和4G模块通信 xff0c 一些网络调试工具只能提供局域网内的TCP Server 博主找到一个好的网站提供这个功能
  • windows环境下安装opendr

    pip install opendr会报下面的错误 应该先安装glfw glfw是opengl的一个框架 xff0c pip install glfw 即可安装 下载 https github com polmorenoc opendr 后
  • DockerFile创建及案例

    DockerFile dockerfile是用来构建docker镜像的文件 xff0c 命令脚本参数脚本 xff01 构建步骤 编写一个dockerfile文件docker build 构建成为一个对象docker run 运行镜像dock