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的参数使用。

相关推荐
SilentCodeY几秒前
iptables 防 Docker 绕过:DOCKER-USER 链限制 Nacos 8848 仅 localhost 可访问
docker·容器·iptables
LetsonH24 分钟前
服务器配置(开机自启+XRDP远程)
运维·服务器
Getgit1 小时前
Linux系统的特点有哪些
java·linux·运维·网络·sql
壮哥_icon1 小时前
Ubuntu 虚拟机中编译 Android 源码完整指南(含分卷合并、虚拟内存配置、复制粘贴设置及依赖库安装)
linux·运维·ubuntu
Maggie_ssss_supp1 小时前
Linux-Percona XtraDB Cluster (PXC)集群部署实战
linux·运维·服务器
十月南城2 小时前
压测方法论——目标、场景、指标与容量评估的闭环
运维·web安全·ci/cd·微服务·云计算
吃花椒的冰冰2 小时前
ubuntu自动检测断网重联
运维·服务器
刘哥测评技术zcwz6262 小时前
希音shein自养号测评怎么做,有哪些技术要求
运维·服务器·网络
“αβ”3 小时前
TCP相关实验
运维·服务器·网络·c++·网络协议·tcp/ip·udp
etp_3 小时前
连击非第一击无伤害
运维·nginx