Docker(四) 通过DockerFile自定义镜像

简介: Docker(四) 通过DockerFile自定义镜像

一、概述



从应用的角度来看,DockerFile、Images和Container分别代表软件的三个不同阶段。


DockerFile:软件的原材料(镜像构建脚本),面向开发

Images:软件交付产品,交付标准

Container:软件的运行状态,设计部署与运维

640.png

DokcerFile-image-container关系图


二、dockerfile保留字



  1. FROM:指定当前镜像是基于哪个镜像,即指定父镜像(相当于java extends 指定父类),第一条指令必须为 FROM 指令。并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个 FROM 指令(每个镜像一次)。


FROM 或FROM :


FROM centos


  1. MAINTAINER:指定镜像维护者名称和邮箱

MAINTAINER javacfox<javacfox@sina.com>


  1. RUN:容器构建时需要运行的命令

RUN

RUN ["executable", "param1", "param2"]


RUN yum -y install vim


  1. EXPOSE:指定当前容器对外暴露的端口

EXPOSE[...]


EXPOSE 8080


  1. WORKDIR:指定终端默认登录目录,通常和ENV搭配使用,为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径

WORKDIR /path/to/workdir


WORKDIR /usr/local/tomcat


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

ENV


ENV MYPATH /usr/local/tomcat
WORKDIR $MYPATH


  1. ADD:将宿主机目录的文件复制到镜像中,自动URL处理和解压tar压缩包

ADD [宿主机目录或文件地址] [容器地址]


ADD tomcat.tar.gz  /usr/local/tomcat


  1. COPY:拷贝宿主机文件和目录到镜像中

COPY [宿主机目录或文件地址] [容器地址]


COPY /opt/docker/host.txt /usr/local/tomcat/container.txt


将主机的host.txt文件内容复制到容器中container.txt中 9. VOLUME:创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等


VOLUME [容器内路径]


VOLUME /usr/local/tomcat/webapps


  1. CMD:指定一个容器启动时要执行的命令(Dockerfile中可以有多条,但只有一条生效,且会被docker run之后的参数替换)

CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;

CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;

CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;

CMD /usr/local/tomcat/bin/startup.sh && tail -f -n 200 /usr/local/tomcat/logs/catalina.out


==注意==:指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令


  1. ENTRYPOINT:指定一个容器启动时要执行的命令(Docker run参数添加加到指令中,重新组合成新的指令)

ENTRYPOINT ["executable", "param1", "param2"]

ENTRYPOINT command param1 param2(shell中执行)


ENTRYPOINT /usr/local/tomcat/bin/startup.sh


  1. ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承时触发

ONBUILD [INSTRUCTION]


ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src


三、构建tomcat镜像



  1. 创建DockerFile,编写脚本


# 基于镜像centos
FROM centos
# 镜像维护者及其邮箱
MAINTAINER javacfox<javacfox@sina.com>
# 把jdk和tomcat添加并解压到容器/usr/local路径中
ADD jdk-1.8-linux.tar.gz /usr/local
ADD tomcat.tar.gz /usr/local
# 安装vim编辑器
RUN yum install vim
# 设置环境变量
ENV PATH /usr/local
# 设置登录目录
WORKDIR $PATH
# 配置jdk与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/tomcat
ENV CATALINA_BASE /usr/local/tomcat
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
# 暴漏端口
EXPOSE 8080
# 启动时运行tomcat
CMD /usr/local/tomcat/bin/startup.sh && tail -f -n 200 /usr/local/tomcat/logs/catalina.out


  1. 创建镜像
[root@localhost opt]# docker build -f /opt/DockerFile javacfox/mytomcat


  1. 创建容器并运行
[root@localhost ~]# docker run -d -p 8080:8080 --name tomcat01 javacfox/mytomcat
目录
相关文章
|
2天前
|
运维 Linux Docker
Docker详解(四)——Docker换源与镜像拉取
Docker详解(四)——Docker换源与镜像拉取
35 0
|
3天前
|
存储 Ubuntu Linux
[Docker] 镜像讲解
[Docker] 镜像讲解
|
6天前
|
运维 前端开发 Devops
云效产品使用报错问题之流水线打包docker镜像时报网络代理有问题如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
18天前
|
应用服务中间件 Docker 容器
docker 镜像常用命令
docker 镜像常用命令
39 0
|
18天前
|
关系型数据库 MySQL 数据库
docker自定义安装mysql 5.7
docker自定义安装mysql 5.7
24 0
|
18天前
|
Linux Shell 虚拟化
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
28 0
|
4月前
|
Linux Docker 容器
Docker Dockerfile 语法与指令
Docker Dockerfile 语法与指令
27 0
|
8月前
|
Linux Docker 容器
Docker Dockerfile 语法与指令
Docker Dockerfile 语法与指令
98 0
|
Java 应用服务中间件 Shell
【Docker】四 Dockerfile指令详解
需求 - 启动一个Nginx容器。 - 将Nginx容器的首⻚改为 `Welcome to my first docker class` 。 - 将容器保存下来。
157 0
|
存储 JSON 监控
纯干货!Docker Dockerfile指令大全(下)
什么是 Dockerfile? Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。使用docker build命令,用户可以创建基于基础镜像的自定义镜像。