首页 > 其他分享 >Docker 学习之路之 Dockerfile

Docker 学习之路之 Dockerfile

时间:2023-07-16 23:55:18浏览次数:28  
标签:容器 Dockerfile 之路 目录 docker 镜像 Docker dockerfile ONBUILD

Docker 镜像原理

Docker 镜像是由特殊的文件系统叠加而成的,其本质是一个分层的文件系统

镜像制作

  1. 由容器转为镜像
docker commit 容器ID 镜像名称:版本号

# 将镜像保存成压缩文件
docker save -o 压缩文件名称 镜像名称:版本号

# 将压缩的镜像加载成镜像
docker load -i 压缩文件名称

需要注意的是:如果容器中有挂载数据卷的在制作出来的镜像中不会将挂载的目录打包进镜像中,但容器中创建的文件会被打包到镜像中

  1. dockerfile 制作
  • dockerfile 就是一个文本文件,其中包含一条条的指令

dockerfile 关键字
LABEL :功能是为镜像指定标签
FORM:基础镜像,表明当前镜像是基于那么镜像的
MAINTAINER :镜像维护者的名字和邮箱地址
RUN:容器构建时需要用到的命令
EXPOSE:当前容器对外暴露的端口
WORKDIR:指定在创建容器后,终端默认登录的工作目录。(也就是你登录进某个容器的时候,默认的目录)
ENV:用来构建镜像过程中设置环境环境(ENV MY_PATH /usr/mytest、WORKDIR $MY_PATH)
ADD:讲宿主机目录的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包(类似于absible的某个模块)
COPY:类似ADD,拷贝文件和目录到镜像中(COPY src dest、COPY["src","dest"])
VOLUME:容器数据卷,指定数据卷目录,用于数据保存和持久化工作
CMD:指定一个容器启动时要运行的命令。dockerfile中可以有多个CMD,但是生效的只有最后一个,CMD会被docker run 之后 的参数替换。
ENTRYPOINT:指定一个容器启动时要运行的命令。有多个会追加。
ONBUILD:触发器,当构建一个被继承的 Dockerfile时运行命令,父镜像在被子继承后父镜像的 ONBUILD被触发(子镜像继承了父镜像 的dockerfile,父镜像有ONBUILD定义,那么这个子镜像继承过去了ONBUILD,ONBUILD会执行)

# 当有 dockerfile 之后,通过下面的命令生成镜像:
docker build -f /xxx/xxx_dockerfile(dockerfile 的路径) -t app
# --tag, -t: 设置新镜像的名字及标签(版本号),通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。tag 即应用的版本号
  • 例如:构建 centos 7 的自制镜像,且登录后自动跳转到 /root 目录下,且能用 vim
FROM centos:7

MAINTAINER sanmian <https://www.cnblogs.com/sanmian/>

RUN yum install -y(在安装时需要确认y/n,这里是为了让它顺利安装) vim

WORKDIR /root

CMD /bin/bash

标签:容器,Dockerfile,之路,目录,docker,镜像,Docker,dockerfile,ONBUILD
From: https://www.cnblogs.com/sanmian/p/17558893.html

相关文章

  • 微软宣布Win10准备热烈的迎接Docker
    在DockerCon2017大会上,Docker团队今天宣布了LinuxKit,这是一个安全、干净和便携式的Linux子系统container容器环境。LinuxKit允许工具构建自定义的Linux子系统,可以仅包含完全运行时平台的组件需要。所有的系统服务都是可替换的容器,可以删除不需要的一切。 因为LinuxKit......
  • 微软宣布Win10准备热烈的迎接Docker
    在DockerCon2017大会上,Docker团队今天宣布了LinuxKit,这是一个安全、干净和便携式的Linux子系统container容器环境。LinuxKit允许工具构建自定义的Linux子系统,可以仅包含完全运行时平台的组件需要。所有的系统服务都是可替换的容器,可以删除不需要的一切。 因为LinuxKit......
  • 微软宣布Win10准备热烈的迎接Docker
    在DockerCon2017大会上,Docker团队今天宣布了LinuxKit,这是一个安全、干净和便携式的Linux子系统container容器环境。LinuxKit允许工具构建自定义的Linux子系统,可以仅包含完全运行时平台的组件需要。所有的系统服务都是可替换的容器,可以删除不需要的一切。 因为LinuxKit......
  • Docker CLI docker container ls 常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......
  • Docker 学习之路之 Docker 容器数据卷
    数据卷是是宿主机的一个目录或文件当容器中的目录和数据卷目录绑定后,对方的修改会立即同步一个数据卷可以同时被多个容器同时挂载一个容器也可以挂载多个数据卷数据卷的作用容器数据的持久化外部机器和容器数据间接通信容器之间的间接通信配置数据卷启动时配置数据......
  • linux部署docker以及常用容器部署
    linux部署docker以及常用容器部署前言本文主要教大家linux安装部署docker以及常用容器部署1.docker部署1.1.依次运⾏以下命令添加yum源代码如下yumupdateyuminstallepel-release-yyumcleanallyumlist1.2.安装并运⾏Docker。代码如下yuminstalldocker-io-ysystemct......
  • redis docker 配置文件
    RedisDocker配置文件详解Redis是一个基于内存的开源数据库,用于存储和检索数据。Docker是一种轻量级容器化平台,可以快速部署和管理应用程序。通过将Redis与Docker结合使用,我们可以轻松地创建和管理Redis实例。在使用Docker部署Redis时,我们需要创建一个配置文件,用于定义Redis的行......
  • Docker中运行mysql并且数据目录存在本地
    Docker中运行mysql并且数据目录存在本地  Docker中运行mysql并且数据目录存在本地按https://github.com/NeuCharFramework/NCF/wiki/来弄win11,dockerv24.0.2,镜像加速配置: {"debug":false,"experimental":false,"features":{"buildkit":tr......
  • Docker部署Java应用[转]
    练习要求:在CentOSLinuxrelease7.7.1908(Core)中,先拉一个Centos镜像,然后在光秃秃的centos镜像基础上把项目环境搭建好,然后再提交到自己的docker仓库里。 操作环境:虚拟机中安装好的CentOSLinuxrelease7.7.1908(Core) 一、安装并启动Docker 1.更新yumyum-yu......
  • 拷贝文件到docker里面
    拷贝文件到Docker容器中在使用Docker时,我们常常需要将本地文件拷贝到正在运行的Docker容器中。这个过程可能涉及到从宿主机到容器的文件传输,以及在目标容器中进行文件操作。本文将为您介绍如何使用不同方法将文件拷贝到Docker容器中,并提供相关代码示例。1.使用dockercp命令Doc......