docker (八)-dockerfile制作镜像

一 dockerfile

dockerfile通常包含以下几个常用命令:

cpp 复制代码
FROM ubuntu:18.04
WORKDIR /app
COPY . .
RUN make .
CMD python app.py
EXPOSE 80

FROM 打包使用的基础镜像
WORKDIR 相当于cd命令,进入工作目录
COPY 将宿主机的文件复制到容器内
RUN 打包时执行的命令,相当于打包过程中在容器中执行shell脚本,通常用来安装应用程序所需要的依赖、设置权限、初始化配置文件等
CMD 运行镜像时执行的命令
EXPOSE指定容器在运行时监听的网络端口,它并不会公开端口,仅起到声明的作用,公开端口需要容器运行时使用-p参数指定。

二 制作自己的镜像

参考我们之前的配置,制作dockerfile文件

编写dockerfile文件

docker build . 打包

docker images 查看镜像id

三 image镜像与layer层

image文件由一系列层构建而成,dockerfile每一个命令都会生成一个层。每一层都是只读的。

例如前面我们制作镜像,就产生了4个层。

也可以使用 docker image history ruoyi-java:4.7.4 命令查看

创建容器时,会创建一个新的可写层,通常称为"容器层"。对正在运行的容器所做的所有更改(如写入新文件、修改现有文件和删除文件)都将写入容器层,而不会修改镜像。

四 多阶段构建

在构建基于 Java 的应用程序时,需要一个 JDK 将源代码编译为 Java 字节码。但是,在生产中不需要该 JDK。

多阶段构建可以将生成时依赖与运行时依赖分开,减小整个image文件大小。

ENTRYPOINT 和 CMD 的区别

dockerfile 应该至少包含一个ENTRYPOINT或CMD

ENTRYPOINT 指定容器启动时执行的默认程序,一般运行容器时不会被替换或覆盖。

除非使用--entrypoint进行指定。

bash 复制代码
docker run -it --entrypoint /bin/bash redis 

例如docker run -it --rm mysql:5.7 /bin/bash

如果镜像中ENTRYPOINT和CMD都存在,则CMD将作为ENTRYPOINT的参数使用。

相关推荐
极简网络科技13 分钟前
Docker、Wsl 打包迁移环境
运维·docker·容器
黑客老李18 分钟前
JavaSec | SpringAOP 链学习分析
java·运维·服务器·开发语言·学习·apache·memcached
杨浦老苏18 分钟前
轻量级Docker管理工具Docker Switchboard
运维·docker·群晖
江湖有缘21 分钟前
【Docker管理工具】部署Docker可视化管理面板Dpanel
运维·docker·容器
一加一等于二33 分钟前
docker部署postgresql17,并且安装插件
docker·postgresql
RussellFans1 小时前
Linux 文本三剑客(grep, awk, sed)
linux·运维·服务器
猴哥聊项目管理2 小时前
什么是DevOps智能平台的核心功能?
运维·项目管理·制造·devops·软件·项目管理软件·软件分享
Chuncheng's blog2 小时前
CentOS 7如何编译安装升级gcc至7.5版本?
linux·运维·c++·centos
猫咪老师19952 小时前
多系统一键打包docker compose下所有镜像并且使用
java·docker·容器
aitav02 小时前
⚡️ Linux Docker 基本命令参数详解
linux·运维·docker