5.Dockerfile

简介: 5.Dockerfile

bootfs:包含bootloader (引导加载程序)和kernel (内核) rootfs: root文件系统,包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。 不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntu、centos等

Docker镜像原理

![[Pasted image 20230920093626.png]]

  • Docker镜像是由特殊的文件系统叠加而成
  • 最底端是bootfs,使用宿主机的bootfs
  • 所以再windows下不能安装一个linux镜像,因为宿主机的bootfs不同
  • 第二层是root文件系统rootfs,称为base image
  • 然后在往上可以叠加其他的镜像文件
  • 统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
  • 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。
  • 当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器

镜像制作

![[Pasted image 20230920093639.png]] 要想把自己在docker中部署的服务转给别人,需要把容器先转为镜像,再传给别人把镜像还原成容器,就可以实现了。 但是镜像是不可以直接发送的,需要再把镜像做成压缩文件,就可以传了。

  • 容器转为镜像docker commit 容器id 镜像名称:版本号docker save -o 压缩文件名称 镜像名称:版本号docker load -i 压缩文件名称

这个方法没有办法保存里面的数据,解压缩镜像后就成为了一个全新的镜像

Dockerfile

  • Dockerfile是一个文本文件,包含了一条条的指令
  • 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境
  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了
  • 对于运维人员:在部署时,可以实现应用的无缝移植

通过dockerfile构建镜像: docker build -t 镜像名称:版本 [dockerfile文件路径]

Dockerfile关键字

ENTRYPOINT是Dockerfile中的一个指令,用于指定容器启动时要执行的命令或可执行文件。它类似于CMD指令,但是ENTRYPOINT的参数不会被docker run命令行中的参数覆盖。

ENTRYPOINT指令的格式可以有两种形式:

  1. ENTRYPOINT ["executable", "param1", "param2"]:使用JSON数组的形式指定执行的可执行文件和参数。这种形式可以保留参数的原样性,不会被解释为字符串。
  2. ENTRYPOINT command param1 param2:使用Shell形式指定执行的命令和参数。这种形式会被解释为字符串。

当容器启动时,ENTRYPOINT指定的命令或可执行文件会作为容器的主进程运行。如果有多个ENTRYPOINT指令,只有最后一个会生效。

使用ENTRYPOINT指令的好处是可以确保容器始终运行指定的命令或可执行文件,而不会被覆盖或修改。这对于构建可复用的镜像和遵循最佳实践非常有用。

Dockerfile 案例

案例一:自定义centos7镜像

要求:默认登录路径为/user;可以使用vim

实现步骤

  1. 定义父镜像:FROM centos:7
  2. 定义作者信息:MAINTAINER itheima <itheima@itcastcn>
  3. 执行安装vim命令: RUN yum install -y vim
  4. 定义默认的工作目录: WORKDIR/usr
  5. 定义容器启动执行的命令:CMD/bin/bash最后还需要build命令用Dockerfile构建
  • docker build

案例二:发布springboot项目

  1. 定义父镜像:FROM java:8
  2. 定义作者信息:MAINTAINER itheima <itheima@itcastcn>
  3. 将jar包添加到容器:ADD springboot.jar app.jar
  4. 定义容器启动执行的命令:CMDjar -jar app.jar
  5. 通过dockerfile构建镜像: docker bulid -f dockerfile文件路径 -t 镜像名称:版本

使用 Dockerfile 定制镜像 · Docker -- 从入门到实践 (docker-practice.github.io)


相关文章
|
5天前
|
Ubuntu Shell Docker
Dockerfile
Dockerfile 可以通过以下步骤进行: 1. 了解 Dockerfile 的基本概念:Dockerfile 是用于构建 Docker 镜像的文本文件,它包含了构建 Docker 镜像所需的指令。了解 Dockerfile 的基本概念有助于更好地理解 Dockerfile 的作用和用途。
33 2
|
5月前
|
缓存 Shell Go
dockerfile介绍与使用
dockerfile介绍与使用
64 1
|
8月前
|
缓存 Shell C语言
Dockerfile完全指南
Dockerfile完全指南
165 2
|
9月前
|
Linux 应用服务中间件 开发工具
dockerfile
dockerfile
75 0
|
10月前
|
Java Shell Linux
41-Dockerfile-Dockerfile简介
41-Dockerfile-Dockerfile简介
|
10月前
|
Go 容器
一文了解 Dockerfile 鲜为人知的一面
Hello folks,今天给大家介绍一下如何在 Dockerfile 中进行 Go 代码编写及运用(备注:此处暂不关注所部署的容器大小及性能问题)。
71 0
|
10月前
|
缓存 Shell Go
DockerFile文件详解
DockerFile文件详解
161 0
|
12月前
|
应用服务中间件 Shell nginx
|
Ubuntu Shell 开发工具
DockerFile
DockerFile
62 0
|
运维 Shell Linux
Dockerfile 深入理解
Dockerfile 深入理解
187 0
Dockerfile 深入理解