【Docker】什么是Dockerfile

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

🌳🌳【Docer篇整理】🌳🌳

=========================
篇一:docker核心概念与常用指令
篇二:镜像与docker数据卷
篇三:dockerfile
篇四:docker网络

1、认识DockerFile

Dockerfile是用来构建docker镜像的文件,是一个命令参数脚本。基本流程是:

  • 编写一个dockerFile文件

  • docker build 构建成为一个镜像

  • docker run 运行镜像、启动容器

  • docker push 发布镜像(DockerHub、阿里云镜像)

查看一下官方的镜像是怎么做的(在dockerhub搜centos为例):

【Docker】什么是Dockerfile
再点可以看到构建它的Dockerfile文件:注意FROM这里的scratch,99%的镜像都是从这个基础镜像过来的,然后加需要的软件和配置进行构建。

【Docker】什么是Dockerfile

很多官方镜像都像是基础包,很多功能都不具备,我们通常会自己构建满足自己需求和用途的镜像!

2、DockerFile的构建过程

  • 每个保留关键字(指令)都是必须大写字母

  • 执行从上到下顺序执行

  • # 表示注释

  • 每个指令都会创建提交一个新的镜像层,并提交

【Docker】什么是Dockerfile
dockerFile是面向开发的, 我们以后要发布项目, 做镜像, 就需要编写dockefile文件。步骤:

  • DockerFile: 构建文件, 定义了一切的步骤,源代码

  • DockerImages: 通过DockerFile构建生成的镜像, 最终发布和运行的产品!

  • Docker容器:容器就是镜像运行起来提供服务器

3、DockerFile常用指令

FROM            # 基础镜像,一切从这里开始构建
MAINTAINER      # 镜像是谁写的, 姓名+邮箱
RUN             # 镜像构建的时候需要运行的命令
ADD             # 步骤, tomcat镜像, 这个tomcat压缩包!添加内容
WORKDIR         # 镜像的工作目录
VOLUME          # 挂载的目录
EXPOSE          # 暴露端口配置(-p)
CMD             # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
ENTRYPOINT      # 指定这个容器启动的时候要运行的命令, 可以追加命令
ONBUILD         # 当构建一个被继承DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY            # 类似ADD, 将我们文件拷贝到镜像中
ENV             # 构建的时候设置环境变量!

【Docker】什么是Dockerfile

4、实战:构建自己的centos

dockerhub中的Centos镜像从scratch开始,里面没有vim、ifconfig等指令,是一个纯净的centos,下面构建我需要的定制的centos:

# 编写Dockerfile的文件
[root@9527 dockerfile] cat mydockerfile-centos 
FROM centos
MAINTAINER code-9527<9527@csdn.com>
 
ENV MYPATH /usr/local
WORKDIR $MYPATH     # 镜像的工作目录,以后启动进入容器后,就是这个目录
 
RUN yum -y install vim
RUN yum -y install net-tools
 
EXPOSE 80
 
CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash
 

构建镜像:

# 通过这个文件构建镜像
# 命令 docker build -f dockerfile文件路径 -t 镜像名:[tag] .
 
[root@9527 dockerfile] docker build -f mydockerfile-centos -t mycentos:0.1 .
step1... 
step2...
Successfully built d2d9f0ea8cb2
Successfully tagged mycentos:0.1

用这个镜像启动并进入容器,就可以执行vim、ifconfig等指令。

# 查看镜像本地进行的变更历史
docker history ImageId

【Docker】什么是Dockerfile

5、CMD和ENTRYPOINT的区别

结论:

CMD         # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
ENTRYPOINT      # 指定这个容器启动的时候要运行的命令, 可以追加命令

验证:

先看CMD:
# 1. 编写dockerfile文件
[root@9527 dockerfile] vim dockerfile-cmd-test 
FROM centos
CMD ["ls", "-a"]
 
# 2. 构建镜像
[root@9527 dockerfile] docker build -f dockerfile-cmd-test -t cmdtest .
 
# 3. run运行, 发现我们的ls -a 命令生效
[root@9527 dockerfile] docker run ebe6a52bb125
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
 
# 4.此时想追加一个命令 -l 变成 ls -al,报错:
[root@9527 dockerfile] docker run ebe6a52bb125 -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown.
[root@9527 dockerfile] docker run ebe6a52bb125 ls -l

cmd的情况下 -l替换了CMD[“ls”, “-a”]命令, -l不是命令,所以报错了

再看ENTRYPOINT:
# 1. 编写dockerfile文件
[root@9527 dockerfile] vim dockerfile-entrypoint-test 
FROM centos
ENTRYPOINT ["ls", "-a"]
 
# 2. 构建文件
[root@9527 dockerfile] docker build -f dockerfile-entrypoint-test -t entrypoint-test .
 
# 3. run运行 发现我们的ls -a 命令同样生效
[root@9527 dockerfile] docker run entrypoint-test
.
..
.dockerenv
bin
dev
etc
home
lib
 
# 4. 我们的追加命令, 是直接拼接到ENTRYPOINT命令的后面的!
[root@9527 dockerfile] docker run entrypoint-test -l
total 56
drwxr-xr-x  1 root root 4096 Aug 13 07:52 .
drwxr-xr-x  1 root root 4096 Aug 13 07:52 ..
...

ENTRYPOINT下,docker run时追加命令, 是直接拼接到ENTRYPOINT命令的后面的。

6、DockerFile制作tomcat镜像

准备镜像文件 tomcat压缩包,jdk的压缩包

【Docker】什么是Dockerfile
编写Dockerfile文件,官方命名Dockerfile, build会自动寻找这个文件,就不需要-f指定了

[root@9527 tomcat] cat Dockerfile 
FROM centos
MAINTAINER code-9527<9527@csdn.com>
 
COPY readme.txt /usr/local/readme.txt
 
ADD jdk-8u73-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.37.tar.gz /usr/local/
 
RUN yum -y install vim
 
ENV MYPATH /usr/local
WORKDIR $MYPATH
 
ENV JAVA_HOME /usr/local/jdk1.8.0_73
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.37
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.37
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
 
EXPOSE 8080
 
CMD /usr/local/apache-tomcat-9.0.37/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.37/bin/logs/catalina.out
 

构建镜像:

# 不用-f
docker build -t diytomcat .

启动容器:

docker run -d -p 3344:8080 --name tomcat1 
-v /home/9527/build/tomcat/test:/usr/local/apache-tomcat-9.0.37/webapps/test 
-v /home/9527/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.37/logs 
diytomcat

此时,访问localhost:3344即可。且这里做了数据卷挂载,在本地目录编辑项目就可发布,不用进入容器。

在本地test目录编写/WEB-INF/web.xml和index.jsp查看效果:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        
</web-app>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hello. world</title>
</head>
<body>
Hello World!<br/>
<%
System.out.println("-----my test web logs------");
%>
</body>
</html>

此时访问localhost:3344/test即可访问到index.jsp,查看目录tomcatlogs/catalina.out日志:

【Docker】什么是Dockerfile

7、发布镜像到DockerHub

注册dockerhub:https://hub.docker.com/

【Docker】什么是Dockerfile

登录

docker login -u liuligang9527

【Docker】什么是Dockerfile

提交自己的镜像:

# push我们的服务器上镜像
[root@9527Z ~] docker push diytomcat
The push refers to repository [docker.io/library/diytomcat]
2eaca873a720: Preparing 
1b38cc4085a8: Preparing 
088ebb58d264: Preparing 
c06785a2723d: Preparing 
291f6e44771a: Preparing 
denied: requested access to the resource is denied  # 拒绝
 
# push镜像的问题?
The push refers to repository [docker.io/1314520007/diytomcat]
An image does not exist locally with the tag: 1314520007/diytomcat
 
# 解决,增加一个新tag
docker tag diytomcat 1314520007/tomcat:1.0
Tip:
clear  等价于 Clrt+L

8、发布镜像到阿里云

登录阿里云、进入容器镜像服务

【Docker】什么是Dockerfile

创建命名空间

【Docker】什么是Dockerfile
创建镜像仓库

【Docker】什么是Dockerfile
点击仓库名称,可以看到仓库地址以及登录指令

【Docker】什么是Dockerfile

$ docker login --username=liuligang registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/code-9527/9527:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/code-9527/9527:[镜像版本号]

推送成功:

【Docker】什么是Dockerfile【Docker】什么是Dockerfile

最后是Docker所有流程小结:

【Docker】什么是Dockerfile

【Docker】什么是Dockerfile文章来源地址https://www.toymoban.com/news/detail-440504.html

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

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

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

相关文章

  • [Docker]五.Docker中Dockerfile详解

    Dockerfile 就是用来构建 docker 镜像的构建文件 新建一个名为 Dockerfile 文件,并在文件内添加以下内容:         要构建并实现上面的镜像, 以前的办法: 下载一个centos镜像,通过镜像启动容器,进入容器,然后下载net-tools软件,然后cd 到wwwroot目录,执行/bin/bash,然后退出容器,把这个容器

    2024年02月06日
    浏览(43)
  • 【Docker】docker入门之dockerfile编写

    嗨喽,大家好。本篇文章主要记录博主在学习docker以及编写dockerfile的过程,记录使用docker过程中遇到的问题。 Docker 是一种开源的容器化平台,用于构建、部署和运行应用程序。它提供了一种轻量级、灵活和可移植的方式来打包应用程序及其依赖项,并创建一个独立、隔离的

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

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

    2024年02月05日
    浏览(41)
  • 【docker笔记】DockerFile

    镜像不是一个单一的文件,而是有多层构成。 容器其实是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。 如果删除了容器,也就是删除了其最上面的读写层,文件改动也就丢失了。 Docker使用存储驱动管理镜像像每层内容及可读可写

    2024年02月02日
    浏览(84)
  • Docker(五)DockerFile详解

     前言 :         学习之前需要了解docker相关概念,移步 Docker官网          此处不再赘述虚拟化技术和docker VS 虚拟机 的一些内容,有条件的建议直接移步 度娘         笔记全程操作在华为云务器,CentOS7系统。需要自行准备操作环境。 Dockerfile是用来构建Docker镜像的文本

    2024年02月05日
    浏览(42)
  • Docker容器 - DockerFile详解

    目录 DockerFile 一、是什么 二、构建步骤 DockerFile构建过程 一、DockerFile基础 二、Docker执行DockerFile的流程 三、总结 DockerFile常用保留字 零、参考Tomcat的DockerFile 一、FROM 二、MAINTAINER 三、RUN 1.shell 2.exec 四、EXPOSE 五、WORKDIR 六、USER 七、ENV 八、ADD 九、COPY 十、VOLUME 十一、CMD 1.举个

    2024年02月15日
    浏览(54)
  • 【docker】dockerfile构建镜像

    Dockerfile 是一个文本文件,文件中包含了一条条的指令(instruction),用于构建镜像。每一条指定构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建。 1、dockerfile是 自定义镜像 的一套规则 2、dockerfile由多条指令构成,dockerfile的每一条指令都会对应于do

    2024年02月05日
    浏览(60)
  • 【Docker】Dockerfile介绍

    Dockerfile是一个文本文件,其中包含了一系列的指令,用于构建Docker镜像。这些指令可以用来自动化镜像的构建过程,并创建自定义镜像。 以下是一些常用的Dockerfile指令及其功能: FROM:指定基础镜像。这是Dockerfile中的第一条指令,用于告诉Docker从哪个镜像开始构建新的镜像

    2024年02月10日
    浏览(32)
  • 【Docker】 08-Dockerfile

    Dockerfile可以认为是Docker镜像的描述文件,是由一系列命令和参数构成的教程,主要作用是用来构建docker镜像的构建文件。 保留字 作用 FROM 当前镜像是基于哪个镜像的 第一个指令必须是FROM MAINTAINER 镜像维护者的姓名和邮箱地址 RUN 构建镜像时需要运行的指令 EXPOSE 当前容器对

    2024年02月10日
    浏览(29)
  • Docker Dockerfile

    什么是Dockerfile? Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 使用Dockerfile定制镜像 仅讲解如何运行Dockerfile 文件来定制一个镜像 1、定制一个nginx镜像(构建好的镜像内会有一个/usr/share/nginx/html/index.html文件) 在一个空目录下

    2024年02月06日
    浏览(20)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包