Dockerfile

文章目录

基本概念

Docker为我们提供一个用于自定义构建镜像的一个配置文件。利用docker的build命令,指定dockerfile文件,就能按配置内容把容器构建出来。

  • 可以自定义镜像内容
  • 构建公共基础镜像
  • 开源程序快速部署

commit构建镜像

启动一个nginx容器,在里面把index.html改成自己的页面

bash 复制代码
docker run --rm -d -p 80:80 --name nginx_commit nginx

然后用commit命令打包成镜像

bash 复制代码
docker commit -a "lum1n0us" -m "MyNginx" nginx_commit mynginx:latest

-a 作者id

-m 描述信息

nginx_commit 当前容器的name

mynginx:latest 镜像名称:版本号

然后启动commit的镜像,发现页面已经被改成了自己的。

bash 复制代码
docker run --rm -d --name test -p 80:80 mynginx

常用指令

bash 复制代码
# 1.指定当前的基础镜像 
FROM openjdk:8

# 2.描述镜像作者、联系方式
MAINTAINER Lum1n0us<shyshy.x@qq.com>

# 3.镜像的标签信息
LABEL version='1.0'
LABEL description='hello world'

# 4.环境变量配置
ENV JAVA_ENV 
ENV APP_NAME test-dockerfile

# 5.在构建镜像时,需要执行的shell命令
RUN ls -la
RUN mkdir /www/test

# 6.将主机中的指定文件复制到容器的指定位置
#ADD /etc/hosts /etc/hosts
ADD ['/etc/hosts','/etc/hosts']

# 7.设置容器的工作目录,如果目录不存在,会自动创建
WORKDIR /app
RUN pwd

# 8.绑定数据卷
VOLUME ["/tmp"]

# 9.暴露容器启动后的端口
EXPOSE 8080/tcp

# 10.CMD和ENTRYPOINT选择其一即可,作用是镜像启动后,启动容器时默认执行的脚本
# CMD ping 127.0.0.1
CMD ["sh","-c","ping 127.0.0.1"]

拓展指令

ARG

将常量变为变量,给用户多一个选择。

bash 复制代码
ARG jdk=8
FROM openjdk:$jdk

这样默认openjdk的版本为8,在用户对这个dockerfile进行build时,可以用以下命令更改

bash 复制代码
docker build -t --build-arg jdk=11

USER

设置容器的用户,可以是用户名或pid,如果容器设置了以daemon用户去运行,那么RUN、CMD和ENTRYPOINT都会以这个用户去运行。需要保证该用户的权限足够。

bash 复制代码
RUN useradd wolfcode
USER wolfcode

ONBUILD

表示在构建镜像时做某操作,不对当前dockerfile生效,而是对以当前dockerfile镜像作为基础镜像的子镜像生效。

HEALTHCHECK

对容器的运行进行健康检查

bash 复制代码
# 健康检查,每各10s检查容器是否正常,每次不超过3s,如果失败,最多不超过3次
HEALTHCHECK --interval=10 --timeout=3 --retries=5 CMD ps -ef | grep java || exit 1

返回参数:

0:success =>健康

1:unsuccess => 不健康状态

SpringBoot项目镜像构建

dockerfile如下:

bash 复制代码
# 选择基础镜像及版本
FROM openjdk:8

# 将项目jar拷贝到容器中
ADD *.jar app.jar

# 设置环境变量
ENV APP_OPTS=""
ENV JVM_OPTS="-Duser.timezone=Asia/Shanghai -Xms128m -Xmx128m"

# 设置暴露端口
EXPOSE 8080

# 设置启动命令
ENTRYPOINT ["sh","-c","java $JVM_OPTS -jar /app.jar $APP_OPTS"]

保存后用以下命令来构建镜像

bash 复制代码
docker build -t springboot-docker:1.0.0 .
相关推荐
spider_xcxc44 分钟前
Docker 实战:容器化多服务应用,Dockerfile 与 Compose 配置全解析
docker·云原生·eureka·虚拟化·容器化
晚风吹长发2 小时前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
ShiXZ2132 小时前
Docker Compose 安装与配置指南
运维·docker·容器
BullSmall3 小时前
Anolis OS 8.10 Docker 部署 SonarQube 9.9 完整教程
运维·docker·容器
java_logo6 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris
生活爱好者!19 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
java_logo20 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
MC皮蛋侠客20 小时前
uv 系列(七):CI/CD、Docker 与私有索引——生产级交付
python·ci/cd·docker·uv
祁白_20 小时前
Ubuntu_Docker_零基础搭建与基础使用笔记
笔记·ubuntu·docker
用户233376852181 天前
Docker 端口"时通时不通"的排查实战
docker