当前位置: 首页 > news >正文

Docker Dockerfile

1、概念介绍

Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

每条保留字指令都必须为大写字母且后面要跟随至少一个参数

指令按照从上到下,顺序执行

#表示注释

每条指令都会创建一个新的镜像层并对镜像进行提交

DockerFile 执行流程

docker从基础镜像运行一个容器

执行一条指令并对容器作出修改

执行类似docker commit的操作提交一个新的镜像层

docker再基于刚提交的镜像运行一个新容器

执行dockerfile中的下一条指令直到所有指令都执行完成


DockerFile 保留字

保留字

说明

FROM

基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from

MAINTAINER

镜像维护者的姓名和邮箱地址

RUN

容器构建时需要运行的命令

两种格式:shell格式、exec格式

RUN是在 docker build 时运行

EXPOSE

当前容器对外暴露的端口

WORKDIR

指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

USER

指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

ENV

用来在构建镜像过程中设置环境变量

ADD

将宿主机目录下的文件拷贝进镜像且会自动处理uRL和解压tar压缩包

COPY

类似ADD,拷贝文件和目录到镜像中。

将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置

VOLUME

容器数据卷,用于数据保存和持久化工作

CMD

启动容器启动后要做的事情。

Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换。

ENTRYPOINT

也是用来指定一个容器启动时要运行的命令

类似于cMD指令,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当作参数送给ENTRYPOINT指令指定的程序

ENTRYPOINT 命名

2、构建过程
自定义镜像

需求:Centos7镜像具备vim+ifconfig+jdk8

编写Dockerfile

FROM centos:7
MAINTAINER lemon<codelemon@163.com>ENV MYPATH /usr/local
WORKDIR $MYPATH# 安装Vim 编辑器
RUN yum -y install vim
# 安装 ifconfig 命令查看网络IP
RUN yum -y install net-tools
# 安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
# jdk软件包需要和Dockerfile在同一个包中
ADD jdk-8u351-linux-x64.tar.gz /usr/local/java/# 配置Java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_351
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATHCMD echo $MYPATH
CMD echo "success------------------ok"
CMD /bin/bash

构建:docker build -t centosjava8:1.5 .

虚悬镜像

仓库名、标签都是<none>的镜像,俗称dangling image

编写Dockerfile

from ubuntu
CMD echo 'action is success'

构建镜像:docker build .

# 查看虚悬镜像
docker image ls -f dangling=true# 删除所有的虚悬镜像
docker image prune
3、发布代码

使用Maven 的 package 命令 将工程打成jar包

将Jar包 打进镜像里面:编写Dockerfile(Jar需要和Dockerfile在同一目录下)

FROM java:8
MAINTAINER lemon<codelemon@163.com># 指定临时文件目录
VOLUME /tmp
# 更改jar包名称
ADD docker_boot-0.0.1-SNAPSHOT.jar lemon_docker.jar# 运行jar包
RUN bash -c 'touch /lemon_docker.jar'
ENTRYPOINT ["java","-jar","/lemon_docker.jar"]# 暴露6001端口作为服务
EXPOSE 6001

构建镜像:docker build -t lemon_docker:1.6 .

启动容器:docker run -d -p 6001:6001 镜像ID

测试访问:curl 127.0.0.1:6001/order/index

相关文章:

  • 【日常聊聊】开源软件影响力
  • Visual Studio 和Clion配置Cocos2d-x环境
  • 【实战】阿里智能编码助手通义灵码
  • Django的web框架Django Rest_Framework精讲(二)
  • Spring Boot RestTemplate请求证书问题
  • 2023年上-未来几年我要做什么
  • ACPF UI 框架设计与基础实现
  • 【Springboot】单元测试Junit5应用
  • 算法笔记刷题日记——3.简单入门模拟 3.1简单模拟
  • 合并分支rebase和merge的区别
  • 新手指南:Postman 旧版本(历史版本)下载
  • Unity类银河恶魔城学习记录1-12 PlayerComboAttack源代码 P39
  • js中原始类型和对象引用
  • 深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之行存(一)
  • canvas设置图形各种混合模式,类似photoshop效果
  • 自己简单写的 事件订阅机制
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • co.js - 让异步代码同步化
  • HomeBrew常规使用教程
  • LeetCode18.四数之和 JavaScript
  • maven工程打包jar以及java jar命令的classpath使用
  • supervisor 永不挂掉的进程 安装以及使用
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 两列自适应布局方案整理
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 数据科学 第 3 章 11 字符串处理
  • 我的面试准备过程--容器(更新中)
  • 小而合理的前端理论:rscss和rsjs
  • 一些css基础学习笔记
  • ​香农与信息论三大定律
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #includecmath
  • (安卓)跳转应用市场APP详情页的方式
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)jdk与jre的区别
  • .Family_物联网
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET命名规范和开发约定
  • .ui文件相关
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @RequestMapping-占位符映射
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [Android Pro] AndroidX重构和映射
  • [Android] 240204批量生成联系人,短信,通话记录的APK
  • [android] 切换界面的通用处理
  • [Android]如何调试Native memory crash issue
  • [C#基础]说说lock到底锁谁?
  • [C++打怪升级]--学习总目录