docker学习笔记之Dockerfile

这篇具有很好参考价值的文章主要介绍了docker学习笔记之Dockerfile。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Dockerfile简介

1、Dockerfile介绍

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

2、Dockerfile基础知识

  • 每条保留字指令必须为大写字母,后面要跟随至少一个参数
  • 指令按照从上到下,顺序执行
  • #表示注释
  • 每条指令都会创建一个新的镜像层,并对镜像进行提交

二、Dockerfile常用命令

1、CMD指令

作用:用来定义容器运行时的默认命令,可以在使用docker run的时候覆盖掉CMD中定义的命令

用法:CMD ["命令1", "参数1", "参数2"]

示例:

  • CMD echo "Hello World"
  • CMD ["/usr/bin/wc","--help"]

注意:

  • 一个Dockerfile只有顺序向下的最后一个CMD生效
  • CMD运行结束后容器将终止,CMD可以被docker run后面的命令覆盖

2、FROM指令

作用:用来定义基础镜像

用法:FROM 镜像名:标签名

示例:FROM centos:7

注意:

  • 标签是可选的,如果不使用这两个值时,会使用latest版本的基础镜像
  • FROM命令是Dockerfile文件开篇第一个非注释行代码

案例1:结合CMD和FROM命令构建镜像

编写dockerfile文件,文件名为file1,内容如下:

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

通过docker build命令构建镜像:docker build -t redis:1.0 -f file1 .

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

查看构建出来的镜像: docker images

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维 

启动镜像: docker run redis:1.0

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维 

案例2:测试多个CMD命令是否覆盖

 编写dockerfile文件,文件名为file2,内容如下:

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

通过docker build命令构建镜像:docker build -t redis:2.0 -f file2 .

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

查看构建出来的镜像: docker images

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

启动镜像: docker run redis:2.0

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

 3、ENV指令

作用:设置环境变量

用法:ENV key=value

示例:

  • ENV JAVA_HOME=/usr/local/jdk1.8.0_333
  • ENV PATH=$JAVA_HOME/bin:$PATH

 注意:可以通过该指令一次设置多个环境变量,例如:ENV key=value  key=value   ......

4、WORKDIR指令

作用:设置当前的工作目录,类似于cd命令的作用。如果目录不存在,就会自动创建目录;如果目录的父目录不存在,同样也会自动创建目录。

用法:WORKDIR 目录

示例:WORKDIR /root/data

注意:

  • 通过 WORKDIR 命令设置工作目录后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。
  • 在使用 docker run 运行容器时,可以通过 -w 参数覆盖构建时所设置的工作目录。
  • 一个Dockerfile中WORKDIR可以出现多次如下:
    • WORKDIR /a  (这时工作目录为/a)
    • WORKDIR b  (这时工作目录为/a/b)
    • WORKDIR c  (这时工作目录为/a/b/c)

 案例3:在centos镜像中创建目录/a/b/c,并查看当前的路径

编写dockerfile,内容如下:

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

构建镜像:docker build -t centos:1.0 -f workdir_file .

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

启动容器:docker run centos:1.0

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

 5、RUN指令

作用:构建镜像时执行的命令。

用法:RUN指令的执行有两种方式:

  • 格式1:shell 形式
    • RUN 命令1 && 命令2
  • 格式2:exec 形式
    • RUN [“可执行文件”,“参数1”,“参数2”]

示例:

  • RUN echo 1 && echo 2 
  • RUN ["/bin/bash","-c","echo hello world"]

RUN和CMD的区别:

CMD 用于指定在容器启动时所要执行的命令,而 RUN 用于指定镜像构建时所要执行的命令

案例4:定义一个CONTENT变量,内容为:Hello CentOS,并在镜像的/app目录下创建一个fileDir目录,并在其中创建一个text.txt文件,将CONTENT变量的值输入到该文件中,在容器启动时打印test.txt中的内容

编写dockerfile文件,内容如下:

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

构建镜像:docker build -t centos:2.0 -f run_file .

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

启动容器:docker run centos:2.0

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

进入容器内,查看目录以及text.txt的内容:

  •  docker run -it centos:2.0 bash
  • cd /app/fileDir/
  • cat text.txt

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

6、ADD指令

作用:将本地文件添加到容器中,tar 类型的文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似于 wget。

用法:ADD 宿主机文件位置 容器中文件位置

示例:

  •  ADD /opt/apache-tomcat-8.5.27.tar.gz /opt
  •  ADD hom* /mydir/          # 添加所有以"hom"开头的文件
  •  ADD hom?.txt /mydir/      # ? 替代一个单字符,例如:"home.txt"
  •  ADD test relativeDir/     # 添加 "test" 到 `WORKDIR`/relativeDir/
  •  ADD test /absoluteDir/    # 添加 "test" 到 /absoluteDir/

7、EXPOSE指令

作用:指定于外界交互的端口。

用法:EXPOSE 端口号

示例:EXPOSE 8080

注意:EXPOSE 并不会让容器的端口访问到主机。要使其可访问,需要在 docker run 运行容器时通过 -p 参数来发布这些端口。

8、COPY指令

作用:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源。

用法:COPY 宿主机路径 容器内路径

示例:COPY /opt/apache-tomcat-8.5.27.tar.gz /opt

9、ENTRYPOINT指令

作用:配置容器,使其可执行化。指定容器启动时要运行的命令,可以追加命令。

用法:

  • ​ ENTRYPOINT [“可执行文件”,“参数1”,“参数2”]
  • ​ ENTRYPOINT 命令 参数1 参数2(shell内部命令)

示例:ENTRYPOINT ["top", "-b"]

注意:

  • 通过 docker run 执行的命令不会覆盖 ENTRYPOINT,而 docker run 命令中指定的任何参数,都会被当做参数再次传递给 ENTRYPOINT 。
  • Dockerfile 中可以有多个ENTRYPOINT,但只有最后一个生效。
  • docker run命令的 --entrypoint选项可以覆盖ENTRYPOINT指令指定的程序
  • ENTRYPOINT主要用于启动父进程,后面跟的参数被当做子进程来启动

10、MAINTAINER指令

作用:指定维护者信息

用法:MAINTAINER 维护者信息

示例:

  • MAINTAINER tom
  • MAINTAINER tom<tom@qq.com>

注意:维护者信息可为名字,也可为邮箱,也可为名字加邮箱

11、LABEL指令

作用:用于为镜像添加元数据

用法:LABEL <key>=<value> <key>=<value> <key>=<value> ...

示例:LABEL version="1.0" description="这是一个Tomcat服务器"  

 12、USER指令

作用:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

用法:

  • USER user
  • USER user:group
  • USER uid
  • USER uid:gid
  • USER user:gid
  • USER uid:group

示例:USER tom

13、ONBUILD指令

作用:帮助其他容器生成,即指令后的命令不在此次镜像构建中运行,会在其他继承此镜像的镜像中运行

用法:ONBUILD 其他指令

示例:ONBUILD RUN mkdir mydir

注意:该指令,对于使用该Dockerfile构建的镜像并不会生效,只有当其他Dockerfile以当前镜像作为基础镜像时被触发。例如:Dockfile A 构建了镜像A,Dockfile B中设置FROM A,此时构建镜像B是会运行ONBUILD设置的指令

三、Dockerfile实战

(1)描述

准备jdk和tomcat的安装包,并在/usr/local目录下创建java目录存放JDK、创建tomcat目录存放Tomcat,然后在centos中配置Java环境,并对外暴露8080端口

(2)实现 

编写Dockerfile文件,内容如下:

# 指明构建的新镜像是来自于 centos:7 基础镜像
FROM centos:7
 
# 通过镜像标签声明了作者信息
LABEL maintainer="123tom.com"
 
# 设置工作目录
WORKDIR /usr/local
 
# 新镜像构建成功以后创建指定目录
RUN mkdir -p /usr/local/java && mkdir -p /usr/local/tomcat
 
# 拷贝文件到镜像中并解压
ADD jdk-8u161-linux-x64.tar.gz /usr/local/java
ADD apache-tomcat-8.5.78.tar.gz /usr/local/tomcat
 
# 暴露容器运行时的 8080 监听端口给外部
EXPOSE 8080
 
# 设置容器内 JAVA_HOME 环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_161/
ENV PATH $PATH:$JAVA_HOME/bin
 
# 启动容器时启动 tomcat
CMD ["/usr/local/tomcat/apache-tomcat-8.5.78/bin/catalina.sh", "run"]

构建镜像:docker build -t centos:4.0 -f learn_file_1 .

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

启动容器:docker run -d -p 8080:8080 --name=tomcat centos:4.0

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

验证是否成功:

方式一:通过curl访问

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

方式二:浏览器地址栏访问Tomcat 

docker学习笔记之Dockerfile,Docker,docker,开发语言,后端,容器,运维

 文章来源地址https://www.toymoban.com/news/detail-821038.html

到了这里,关于docker学习笔记之Dockerfile的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker 笔记6:高级篇 DockerFile解析

    目录  1.是什么?   2.构建三步骤 3.DockerFile构建过程解析 3.1 Dockerfile内容基础知识 3.2Docker执行Dockerfile的大致流程   总结 4.DockerFile常用保留字指令 5.案例:自定义镜像  5.1 要求: Centos7镜像具备vim+ifconfig+jdk8  5.2编写 5.3 准备编写Dockerfile文件  大写字母D 5.3构建 5.4再体会下

    2024年02月10日
    浏览(27)
  • 【Docker】dockerfile学习

    Dockerfile是一个包含用于组合映像的命令的文本文档。 可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。 在 Linux 和 Centos 中运行代码是会 print 到控制台的 Dockerfile 一般分为四部分: 基础镜像信息 维护者信息 镜像操作指令 容器启动时执行指令

    2024年02月20日
    浏览(31)
  • docker学习:dockerfile和docker-compose

    以下内容,部分来自gpt生成,里面的描述可能会出现问题,但代码部分,我都会进行测试。 对于一个docker,例如python,我们需要其在构建成容器时,就有np。有以下两种方法: pull python,并run后,在里面pip install numpy,随后对这个容器进行打包保存 在pull python时,就将pip ins

    2024年02月08日
    浏览(39)
  • Docker容器学习:Dockerfile制作Web应用系统nginx镜像

    目录 编写Dockerfile 1.文件内容需求: 2.编写Dockerfile: 3.开始构建镜像  4.现在我们运行一个容器,查看我们的网页是否可访问 推送镜像到私有仓库 1.把要上传的镜像打上合适的标签 2.登录harbor仓库 3.上传镜像 1.文件内容需求: 基于centos基础镜像。 指定作者信息。 安装nginx服

    2024年02月11日
    浏览(62)
  • Docker学习入门(二):常用软件安装、掌握Docker迁移与备份、运用Dockerfile编写创建容器的脚本、搭建与使用docker私有仓库;

    Docker的学习目标: 4.掌握Tomcat Nginx等软件的常用的安装 5.掌握Docker迁移与备份相关命令 6.能够运用Dockerfile编写创建容器的脚本 7.能够搭建与使用docker私有仓库 8.学习总结 1.MYSQL的部署     (1)拉取mysql镜像          docker pull centos/mysql-57-centos7               (2)创建容

    2024年02月21日
    浏览(45)
  • 使用Docker Dockerfile构建php LNMP集成开发环境,并运行Thinkphp5

    系统:MAC、Windows10 Docker版本:Docker version 23.0.5 Docker Desktop:Dockerdesktop官方地址 这篇主要介绍如何在Mac、Windows10使用docker搭建LNMP集成开发环境。下面我会写Dockerfile编译安装Nginx+php基础环境。mysql、redis基于官方Docker hub,分别构建我们自己的镜像。  code目录存放工程代码,会映

    2024年02月15日
    浏览(52)
  • 【go语言开发】go项目打包成Docker镜像,包括Dockerfile命令介绍、goctl工具生成

    本文主要介绍如何将go项目打包成镜像,首先介绍Dockerfile常用命令介绍,然后介绍使用工具goctl用于生成Dockerfile,还可以根据需求自定义指令内容,最后讲解如何将go-blog项目打包成镜像,以及如何运行等 参考文档: docker日常使用,编写dockerfile等 dockerfile编写 开发完项目之后

    2024年01月20日
    浏览(44)
  • dockerfile避坑笔记(VMWare下使用Ubuntu在Ubuntu20.04基础镜像下docker打包多个go项目)

    docker是一种方便跨平台迁移应用的程序,通过docker可以实现在同一类操作系统中,如Ubuntu和RedHat两个linux操作系统中,实现程序的跨平台部署。比如我在Ubuntu中打包了一个go项目的docker镜像(镜像为二进制文件,相当于windows中的exe文件),这个镜像可以直接在另一台Ubuntu上运

    2024年02月05日
    浏览(60)
  • 【Docker】Docker 仓库管理和Docker Dockerfile

    作者简介: 辭七七,目前大二,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 仓库(Repository)是集中存放镜像的地方。以下介绍一下 Docker Hub。当然不止 docker hub,只是远程的服务商不一样,

    2024年02月05日
    浏览(35)
  • docker/Dockerfile/docker compose

    https://mirror.tuna.tsinghua.edu.cn/help/docker-ce/ 在x86环境下,由容器统一管理开发及运行环境。 Docker https://mirror.tuna.tsinghua.edu.cn/help/docker-ce/ sudo dockerd 手动启动docker sudo service docker start 后台启动docker sudo dockerd 显示启动docker,看日志中的docker /var/log/docker.log sudo apt-key adv --keyserver key

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包