Dockerfile语法和简单镜像构建

        Dockerfile是一个用于定义Docker镜像的文本文件,包含了一系列的指令和参数,用于指示Docker在构建镜像时应该执行哪些操作,例如基于哪个基础镜像、复制哪些文件到镜像中、运行哪些命令等。

        Dockerfile文件的内容主要有几个部分组成,包括基础镜像,创建者信息,镜像操作指令,容器启动指令等

        创建Dockerfile文件并通过docker bulid来构建镜像,是除了从镜像仓库拉取、解压保存镜像之外的另一种自定义构建镜像的方式。构建指令:docker build -t="image-name" <文件目录> --load

        

Dockerfile文件指令

#FROM
FROM指定基础镜像,这个文件需要在本地有,如果没有则在docker build后增加--load参数去docker官网进行拉取
Dockerfile文件中定义的镜像就以FROM的镜像为基础,可指定tag

#MAINTAINER
是备注,用以指定创建者信息

#COPY
将同目录下的文件复制到镜像中
也可以使用—chown=参数指定权限
格式为 filename <path>

#ADD
格式同COPY
区别是移动tar文件后会自动解压
docker官方推荐使用COPY

#RUN
说明镜像构建过程中需要运行的命令,每次执行都会增加一层
有shell模式和exec模式
shell模式: 直接使用linux命令即可
exec模式:通过方括号指定参数来实现,如
RUN ["/bin/bash","-c"," yum -y install xxx"]
/bin/bash表示解释器位置 -c代表指定后面是要执行的命令

#EXPOSE
声明端口,说明这个端口是容器映射出去的端口 可以指定多个
声明后,docker run -P会随机将宿主机端口映射到声明后的端口

#CMD
CMD在docker run命令执行时执行
有shell模式和exec模式
但会被docker run后自带的命令所覆盖
如果使用了ENTRYPOINT指令,作为其默认参数

#ENTERYPOINT
作用于CMD相同
有shell模式和exec模式
ENTERYPOINT 不会被docker run后自带的命令覆盖,如果使用了参数--entrypoint则可以覆盖

ENTERYPOINT与CMD混用:

ENTERYPOINT ["nginx","-c"]
CMD ["/nginx.conf"]

nginx是nginx的命令行工具
-c代表用xx文件执行该命令
/nginx.conf基于根目录下的nginx.conf运行,即该文件是默认文件
如果docker run指定了命令,就会覆盖掉CMD指定的文件,转而使用docker run指定的文件

#VOLUME
指定容器内的默认挂载点,使用后会默认把宿主机/var/lib/docker/volumes中挂载到容器中的挂载点,在docker run时可以通过-v手动指定宿主机挂载点
1.持久化存储,避免因为重启导致数据丢失
2.可以通过-v来更好管理存储,容器端固定而宿主机端不固定

#WORKDIR
指定命令的工作目录,需要提前创建好

#ENV
指定环境变量
格式为ENV key=value
例如ENV VERSION= 1.0,就可以使用$VERSION来引用

#USER
用以指定执行命令的用户和用户组

#ONBUILD
延迟执行创建的命令,在某次构建镜像时不会执行,但下次如果有新的dockerfile使用了本镜像进行镜像构建时,就会执行这条命令。

nginx镜像构建

mkdir wsdockerfile
#centos8已经停更了,下载软件需要另外的源,这个文件清华镜像站和centos官网都能找到
cp Centos-vault-8.5.2111.repo wsdockerfile/
cd wsdockerfile/
#删除并替换/etc/yum.repos.d/的源文件
#下载nginx并开放80端口
#用ENTRYPOINT使docker启动时自动启动nginx
cat > dockerfile << EOF
FROM centos 
MAINTAINER ws
RUN rm -rf /etc/yum.repos.d/*
COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/
RUN yum install -y nginx
COPY index.html /usr/share/nginx/html/
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
EOF

echo 123 > index.html

docker build -t="ws/nginx:v1" . #开始构建
#[+] Building 130.1s (10/10) FINISHED                                       docker:default
# => [internal] load build definition from dockerfile                                 0.0s
# => => transferring dockerfile: 270B                                                 0.0s
# => [internal] load .dockerignore                                                    0.0s
# => => transferring context: 2B                                                      0.0s
# => [internal] load metadata for docker.io/library/centos:latest                     0.0s
# => [1/5] FROM docker.io/library/centos                                              0.0s
# => [internal] load build context                                                    0.0s
# => => transferring context: 77B                                                     0.0s
# => CACHED [2/5] RUN rm -rf /etc/yum.repos.d/*                                       0.0s
# => CACHED [3/5] COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/                   0.0s
# => [4/5] RUN yum install -y nginx                                                 129.6s
# => [5/5] COPY index.html /usr/share/nginx/html/                                     0.0s
# => exporting to image                                                               0.4s
# => => exporting layers                                                              0.4s
# => => writing image sha256:075aaa08f6799ed252578b0c82645e41c61a818584e6e183053a6ce  0.0s
# => => naming to docker.io/ws/nginx:v1                                               0.0s
docker images | grep ws/nginx
#ws/nginx                  v1        075aaa08f679   51 seconds ago   342MB
docker run -d -p 80 --name wshttp ws/nginx:v1
#1f57b4d4b5a8d73fa5488b792099c08fe15cb1bbfdc71d166c1430f5be9e15d4
docker ps
#CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                                     NAMES
#1f57b4d4b5a8   ws/nginx:v1   "/usr/sbin/nginx -g …"   19 seconds ago   Up 18 seconds   0.0.0.0:32768->80/tcp, :::32768->80/tcp   wshttp

tomcat8镜像构建

tomcat版本tomcat-8.5.97 官网能下载到 jdk版本jdk-8u45

mkdir wsdockerfile2
cp jdk-8u45-linux-x64.rpm apache-tomcat-8.5.97.tar.gz Centos-vault-8.5.2111.repo wsdockerfile2
cd wsdockerfile2
#ADD传送jdk包和tomcat包并解压
#rpm包安装jdk-8u45
#ENTRYPOINT安装tomcat,开始后查看日志
echo "
FROM centos
MAINTAINER ws
RUN rm -rf /etc/yum.repos.d/*
COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/
ADD jdk-8u45-linux-x64.rpm /usr/local/ #\\
ADD apache-tomcat-8.5.97.tar.gz /usr/local/
RUN cd /usr/local && rpm -ivh jdk-8u45-linux-x64.rpm
RUN mv /usr/local/apache-tomcat-8.5.97 /usr/local/tomcat8
ENTRYPOINT /usr/local/tomcat8/bin/startup.sh && tail -F /usr/local/tomcat8/logs/catalina.out
EXPOSE 8080
" > dockerfile

docker build -t="tomcat8" . --load
#

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/292812.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pyparamvalidate 项目背景和需求分析

目录 一、前置说明1、总体目录2、本节目标 二、项目背景三、需求分析三、后置说明1、要点小结2、下节预告 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、本节目标 阐述 pyparamvalidate 项目背景和需求分析。 二、项目背景…

设计模式学习

面向对象有两个思维模型&#xff1a; 底层思维&#xff1a;向下&#xff0c;如何把握机器底层从微观理解对象构造&#xff0c;封装、继承、多态抽象思维&#xff1a;向上&#xff0c;如何将我们周围世界抽象为程序代码&#xff0c;包括面向对象、组件封装、设计模式、架构模式…

React Hook 原理,及如何使用Hook

一、 Hook使用规则 只在最顶层使用Hook 不要在循环&#xff0c;条件或嵌套函数中调用Hook&#xff1b; 只在组件函数和自定义hook中调用Hook Q1 &#xff1a; 为什么 hook 不能 在循环&#xff0c;条件或嵌套函数中调用Hook &#xff1f; A1&#xff1a; 因为这跟React的…

搜索二维矩阵 II(LeetCode 240)

1.问题描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10…

灸哥问答:数据结构对软件开发的作用

在软件开发的浩瀚海洋中&#xff0c;数据结构如同一座坚固的灯塔&#xff0c;为开发者指明方向&#xff0c;确保他们在构建复杂系统时不会迷失。数据结构不仅仅是编程的基础&#xff0c;更是高效、稳定、可扩展软件的核心。 一、提升算法效率 数据结构与算法紧密相连&#xf…

Zabbix自定义监控内容实验(带自动报警)

实验前准备 zabbix服务端&#xff1a;192.168.188.17 zabbix客户端&#xff1a;192.168.188.11 部署zabbix服务端&#xff08;192.168.188.17&#xff09; zabbix-server 内存至少2G&#xff0c;推荐4G (1) 关闭防火墙 systemctl stop firewalld setenforce 0 (2)获取zabbix下…

Unity 使用 Plastic 同步后,正常工程出现错误

class Newtonsoft.Json.Linq.JToken e CS0433:类型"JToken"同时存在于"Newtonsoft.Json.Net20,Version3.5.0.0,Cultureneutral,,PublicKeyToken30ad4fe6b2a6aeed"和"Newtonsoft.Json, Version12.0.0.0,Cultureneutral,PublicKeyToken30ad4fe6b2a6aeed…

消息中间件 —— ActiveMQ 使用及原理详解

目录 一. 前言 二. JMS 规范 2.1. 基本概念 2.2. JMS 体系结构 三. ActiveMQ 使用 3.1. ActiveMQ Classic 和 ActiveMQ Artemis 3.2. Queue 模式&#xff08;P2P&#xff09; 3.3. Topic 模式&#xff08;Pub/Sub&#xff09; 3.4. 持久订阅 3.5. 消息传递的可靠性 …

Django 快速整合 Swagger:实用步骤和最佳实践

Django &#xff0c;作为 Python 编写的一个优秀的开源 Web 应用框架&#xff0c;特别适用于快速开发的团队。对于很多场景来说&#xff0c;我们需要一份 API 文档&#xff0c;好处实在太多了&#xff1a; 提高开发效率&#xff1a;开发者可以基于 API 文档 快速学习和尝试 AP…

【bug】【VSCode】远程终端TERMINAL打不开

【bug】【VSCode】远程终端TERMINAL打不开 可能的原因现象分析解决 可能的原因 昨天晚上vscode在打开多个TERMINAL的情况下&#xff0c;挂了一晚上&#xff0c;今早上来看的时候全都lost connections…。然后关闭再打开就出现了如上现象。 早上一来到实验室就要debug… 现象…

出个花活:出街&秀场丨当维乐VELO遇上英伦时尚之都

到底是谁还没有看过我们维乐坐垫今年的新花活呀&#xff0c;身边好多从前不爱运动的朋友&#xff0c;如今也沉迷上了公路车。我相信原因一定是由于对产品设计有着更高的要求&#xff0c;对于审美有着越来越高的追求&#xff0c;也是因为此大多数朋友最终都选择了维乐专业坐垫&a…

学而时习之---状态模式

在软件系统中&#xff0c;有些对象也像水一样具有多种状态&#xff0c; 这些状态在某些情况下能够相互转换&#xff0c; 而且对象在不同的状态下具有不同的行为。 为了更好地对这些具有多种状态的对象进行设计。 使用一种被称为状态模式的设计模式。 状态模式用于解决系统中复…

AJAX(二)jQuery

一、jQuery中的AJAX BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务 我们将该链接引入get.html文件里面&#xff1a; service.js: //1.引入express const expressrequire(express); //2.创建应用对象 const appexpress(); //3.创建路由规则 //request是对请求报文的封…

yolov5旋转目标检测-遥感图像检测-无人机旋转目标检测(附代码和原理)

目前&#xff0c;无人机技术的快速发展带来了遥感图像处理领域的革命性改变。然而&#xff0c;由于无人机在飞行时可能会出现旋转的情况&#xff0c;因此对于旋转目标的检测也成为了一个重要的问题。针对这个问题&#xff0c;yolov5可以提供一种高效的解决方案。 以下是介绍的分…

编写.NET的Dockerfile文件构建镜像

创建一个WebApi项目&#xff0c;并且创建一个Dockerfile空文件&#xff0c;添加以下代码&#xff0c;7.0代表的你项目使用的SDK的版本&#xff0c;构建的时候也需要选择好指定的镜像tag FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443F…

适合 C++ 新手学习的开源项目——在 GitHub 学编程

作者&#xff1a;HelloGitHub-小鱼干 俗话说&#xff1a;万事开头难&#xff0c;学习编程也是一样。在 HelloGitHub 的群里&#xff0c;经常遇到有小伙伴询问编程语言如何入门方面的问题&#xff0c;如&#xff1a; 我要学习某一门编程语言&#xff0c;有什么开源项目可以推荐…

电源板设计方案怎么写 (评审文件)

1. 首先是大致的图形模块化说明。 1. 大致的框图 2. 统计项目需要的功率和需求 此表格数据是假的&#xff0c;只是为了展示 电源种类是&#xff1a; 板子需要供电需要的电压和对应电压最大的电流。 电源时序是&#xff1a; 板子…

canvas设置文字阴影

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

六、基于Flask、Flasgger、marshmallow的开发调试

基于Flask、Flasgger、marshmallow的开发调试 问题描述调试方法一调试方法二调试方法三 问题描述 现在有一个传入传出为json格式文件的&#xff0c;Flask-restful开发的程序&#xff0c;需要解决如何调试的问题。 #!/usr/bin/python3 # -*- coding: utf-8 -*- # Project :…

MacOS - 苹果电脑程序还能正常启动,但图标消失不见了~

问题描述 网上有一些解决方案说是 killall Finder 命令&#xff0c;重置 Docker 等等&#xff0c;但是发现还是不行&#xff0c;于是必杀技…… 解决方案 方案一、删除该 App&#xff0c;重装即可方案二、如果懒得重装&#xff0c;可以在 Finder 中找到对应的应用程序&#xf…