day055-Dockerfile与常用指令

文章目录

  • 0. 老男孩思想-女性的第一需求
  • 1. Dockerfile
    • 1.1 Dockerfile的基本结构
    • 1.2 案例-制作小鸟飞飞镜像
      • 1.2.1 编写Dockerfile文件
      • 1.2.2 构建镜像
      • 1.2.3 启动容器
    • 1.3 Dockerfile常用指令
    • 1.4 面试题:Dockerfile中CMD和ENTRYPOINT的区别?
    • 1.5 案例-制作zrlog镜像
      • 1.5.1 编写Dockerfile文件
      • 1.5.2 生成镜像并启动容器
    • 1.6 案例-制作后端考试系统镜像
      • 1.6.1 编写Dockerfile文件和启动脚本
      • 1.6.2 制作镜像并启动容器
  • 2. 思维导图

0. 老男孩思想-女性的第一需求

女性永远的第一需求,就是做一个精致的女人。

在这里插入图片描述

1. Dockerfile

Dockerfile 是构建 Docker 镜像的核心配置文件,它通过一系列指令定义了如何自动化构建容器镜像。Docker 在构建镜像时会按照 Dockerfile 中的指令逐步执行,每一行指令都会生成一个新的镜像层(layer)。

1.1 Dockerfile的基本结构

  1. 基础镜像:指定构建镜像的初始镜像
  2. 元数据定义:添加镜像的元数据(如作者、版本、说明等)
  3. 构建过程指令:安装依赖、复制文件、端口暴露等
  4. 启动指令:定义容器启动时的默认命令,这是容器生命周期的起点

在这里插入图片描述

1.2 案例-制作小鸟飞飞镜像

1.2.1 编写Dockerfile文件

[root@docker01 /server/dockerfile/01-bird]# ll
总用量 104
-rw-r--r-- 1 root root 91622  715 09:21 bird.tar.gz
-rw-r--r-- 1 root root   237  717 11:09 default.conf
-rw-r--r-- 1 root root   450  717 11:13 Dockerfile
[root@docker01 /server/dockerfile/01-bird]# cat Dockerfile
# 如果本地有该镜像,会直接使用;若没有,会下载该镜像
FROM nginx:alpine 
LABEL author=skx desc="自定义小鸟飞飞镜像"# 容器创建代码目录
RUN mkdir -p /app/code/bird# 上传代码文件到容器;ADD可以自动解压tar.gz压缩包
ADD bird.tar.gz /app/code/bird
# 上传配置文件到容器
ADD default.conf /etc/nginx/conf.d/# 开启端口
EXPOSE 80 443# 入口指令
CMD ["nginx","-g","daemon off;"]

1.2.2 构建镜像

  • docker build -t 镜像名称 Dockerfile路径
    • -t:tag,指定构建的镜像名称
    • 后面需要指定Dockerfile文件路径
[root@docker01 /server/dockerfile/01-bird]# docker build -t web:bird .
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.Install the buildx component to build images with BuildKit:https://docs.docker.com/go/buildx/Sending build context to Docker daemon  96.26kB
Step 1/7 : FROM nginx:alpine---> 77656422f700
Step 2/7 : LABEL author=skx desc="自定义小鸟飞飞镜像"---> Running in f6a20089714f---> Removed intermediate container f6a20089714f---> bdb9f0ceead5
Step 3/7 : RUN mkdir -p /app/code/bird---> Running in 19c6f0992aca---> Removed intermediate container 19c6f0992aca---> 0cdbb83e054b
Step 4/7 : ADD bird.tar.gz /app/code/bird---> fb92ef13621a
Step 5/7 : ADD default.conf /etc/nginx/conf.d/---> b9bafb4882be
Step 6/7 : EXPOSE 80 443---> Running in aa49a8352257---> Removed intermediate container aa49a8352257---> c54940012cd8
Step 7/7 : CMD ["nginx","-g","daemon off;"]---> Running in 3fcfb8f96078---> Removed intermediate container 3fcfb8f96078---> 7c619a551ab3
Successfully built 7c619a551ab3
Successfully tagged web:bird
[root@docker01 /server/dockerfile/01-bird]# docker images |grep web
web          bird          7c619a551ab3   38 seconds ago   52.6MB

1.2.3 启动容器

[root@docker01 /server/dockerfile/01-bird]# docker images |grep web
web          bird          7c619a551ab3   6 minutes ago   52.6MB
web_nginx    1.29          77656422f700   3 weeks ago     52.5MB
[root@docker01 /server/dockerfile/01-bird]# docker run -d --name web_bird -p 80:80 web:bird
0ab75085d0e81e694b9bc94633e75b583d2556b23f29300cf305a6130720f212
[root@docker01 /server/dockerfile/01-bird]# docker ps
CONTAINER ID   IMAGE      COMMAND                   CREATED         STATUS         PORTS                                        NAMES
0ab75085d0e8   web:bird   "/docker-entrypoint.…"   3 seconds ago   Up 2 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   web_bird
  • 浏览器访问:

在这里插入图片描述

1.3 Dockerfile常用指令

指令说明
FROM指定基础镜像
LABEL指定容器的属性信息
ENV创建容器的环境变量
RUN创建镜像过程中执行的命令;
推荐多个命令结合成一个RUN命令
ADD把文件或目录复制到容器;
会自解压tar.gz压缩包;
支持多阶构建
COPY把文件或目录复制到容器;
没有自动解压功能;
支持多阶构建
WORKDIR指定容器的默认工作目录
VOLUME挂载数据卷
EXPOSE指定镜像对外暴露的端口
CMD指定容器的入口命令;
可在docker run时替换
ENTRYPOINT容器的入口命令;
无法被docker run时被替换;
docker run的命令仅被作为ENTRYPONIT命令的参数

1.4 面试题:Dockerfile中CMD和ENTRYPOINT的区别?

  • 相同点:都是容器启动命令
  • 不同点:
    • CMD指定的命令,可以被docker run指定的命令替换
    • ENTRYPOINT的命令不会被替换,docker run指定的命令会作为ENTRYPOINT命令的参数
  • 同时使用时,CMD的命令作为ENTRYPOINT的参数

1.5 案例-制作zrlog镜像

  • 基础镜像:tomcat+war包

1.5.1 编写Dockerfile文件

# 查看tomcat镜像
[root@docker01 /server/dockerfile/02-zrlog]# docker images |grep tomcat
tomcat                                    9.0-jdk8      56d6933de864   2 years ago     285MB
# Dockerfile文件
[root@docker01 /server/dockerfile/02-zrlog]# cat Dockerfile 
FROM tomcat:9.0-jdk8
LABEL author:skx app="zrlog,tomcat"# env
ENV WAR=ROOT.war
ENV WEBAPP=/usr/local/tomcat/webapps
# 复制zrlog
WORKDIR ${WEBAPP} 
ADD ${WAR} .
# 端口
EXPOSE 8080
CMD ["catalina.sh","run"]# 容器监控检查指令
#通过指定命令对容器中的服务进行检查
#用于检查容器运行中(服务运行)但是用户无法访问
HEALTHCHECK --interval=5s --timeout=20s --retries=2 \
CMD curl 127.0.0.1:8080
[root@docker01 /server/dockerfile/02-zrlog]# ll
总用量 10984
-rw-r--r-- 1 root root      438  717 20:05 Dockerfile
-rw-r--r-- 1 root root 11243048  522  2023 ROOT.war # 将zrlog.war改成ROOT.war

1.5.2 生成镜像并启动容器

[root@docker01 /server/dockerfile/02-zrlog]# docker build -t web:zrlog .
……
Successfully built 968858ee0784
Successfully tagged web:zrlog
[root@docker01 /server/dockerfile/02-zrlog]# docker images |grep zrlog
web                                       zrlog         968858ee0784   54 seconds ago   296MB
[root@docker01 /server/dockerfile/02-zrlog]# docker run -d --name web_zrlog -p 8080:8080 web:zrlog
2a0aae02d1d3efd10712c32745aae057c6a9cdd2cfef4dd502aff692b5f60185
[root@docker01 /server/dockerfile/02-zrlog]# docker ps |grep zrlog
2a0aae02d1d3   web:zrlog         "catalina.sh run"         24 seconds ago   Up 23 seconds (healthy)   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp    web_zrlog
  • 浏览器访问:

在这里插入图片描述

1.6 案例-制作后端考试系统镜像

  • 基础镜像:jdk+jar包

1.6.1 编写Dockerfile文件和启动脚本

[root@docker01 /server/dockerfile/03-exam]# docker images |grep jdk
tomcat                                    9.0-jdk8      56d6933de864   2 years ago      285MB
java                                      8u111-jdk     d23bdf5b1b1b   8 years ago      643MB
[root@docker01 /server/dockerfile/03-exam]# cat Dockerfile 
FROM java:8u111-jdk
LABEL author=skx desc="exam 后端"
ENV VER 3.9.0
ENV ENVIR prod
ENV CONF application-${ENVIR}.yml
ENV CODE xzs-${VER}.jar
ENV DIR /app/code/exam/
RUN mkdir -p ${DIR}
WORKDIR ${DIR}
ADD ${CONF} ${CODE} ./
ADD entry.sh /
EXPOSE 8000
# 脚本放在容器根目录下;有执行权限
CMD ["/entry.sh"]
[root@docker01 /server/dockerfile/03-exam]# chmod +x entry.sh 
[root@docker01 /server/dockerfile/03-exam]# cat entry.sh 
#!/bin/bash
##############################################################
# File Name:entry.sh
# Version:V1.0
# Author:SunKexu
# Organization:www.oldboyedu.com
# Desc:
##############################################################
java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=${ENVIR} ${CODE}

1.6.2 制作镜像并启动容器

[root@docker01 /server/dockerfile/03-exam]# docker build -t web:exam .
……
Successfully built 5570229b9466
Successfully tagged web:exam
[root@docker01 /server/dockerfile/03-exam]# docker images |grep exam
web                                       exam          5570229b9466   24 seconds ago   684MB
[root@docker01 /server/dockerfile/03-exam]# docker run -d --name web_exam -p 8000:8000 web:exam
b0249e77608a32c3225c3bbacc7a9d3c5f89ba226f8d3380c2e25d7f99bdb9c7
[root@docker01 /server/dockerfile/03-exam]# docker ps |grep exam
b0249e77608a   web:exam          "/entry.sh"               7 seconds ago    Up 6 seconds              0.0.0.0:8000->8000/tcp, :::8000->8000/tcp    web_exam
  • 浏览器访问

在这里插入图片描述

2. 思维导图

https://kdocs.cn/join/gpuxq6r?f=101\r\n邀请你加入共享群「老男孩教育Linux运维99期-孙克旭」一起进行文档协作

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 应用优雅停机与资源清理:深入理解关闭钩子

在开发和部署 Spring Boot 应用程序时,除了关注其启动和运行,理解如何实现**优雅停机(Graceful Shutdown)**也同样至关重要。优雅停机意味着在应用程序关闭时,能够有序地释放资源、完成正在进行的任务,并避…

淘宝扭蛋机小程序开发:重构电商娱乐化体验的新范式

在电商行业同质化竞争加剧的当下,消费者对购物体验的期待已从“功能满足”转向“情感共鸣”。淘宝扭蛋机小程序凭借“盲盒式随机奖励游戏化交互”的创新模式,成为撬动年轻用户消费力的新支点。其开发逻辑不仅是对传统电商的升级,更是对“娱乐…

YOLO演变史(一)

在YOLOV1发布后,作者并没有满足于此,而是持续对YOLO进行了改进。 YOLOV2:Better, Faster, Stronger YOLOv2(又称YOLO9000)发表于2017年CVPR,是YOLO系列的第二代版本。其论文标题“Better, Faster, Stronger…

专题:2025智能体研究报告|附70份报告PDF、原数据表汇总下载

原文链接:https://tecdat.cn/?p43035 智能体正在改写商业规则:某城商行的智能客服用公有云部署,把单笔交互成本从5.7元砍到1.2元,投诉率直降42%(《赛迪智库:2025全球智能体进展报告》P24)&…

Axios 完整功能介绍和完整示例演示

Axios 是一个基于 Promise 的现代化 HTTP 客户端库,用于浏览器和 Node.js 环境。它提供了简洁的 API 和强大的功能,是前端开发中最常用的网络请求工具之一。核心功能 浏览器 & Node.js 双平台支持 浏览器中使用 XMLHttpRequestNode.js 中使用 http 模…

math.h函数

math.c函数作用 1. 基本三角函数(参数为弧度) sin(double x):计算正弦值。cos(double x):计算余弦值。tan(double x):计算正切值。asin(double x):反正弦(返回值范围:[-π/2, π/2]&…

在Next.js里玩转pdf预览

1.背景在项目开发中,pdf预览是一个很常见的业务。各大公司为了保护自己的知识产权,也会对pdf预览进行限制,比如:不允许下载、打印,不允许提取文字等等。要想在实现预览功能的基础上还要附加这些限制,有很多…

算法竞赛备赛——【图论】求最短路径——Floyd算法

floyd算法 基于动态规划 应用:求多源最短路 时间复杂度:n^3 dijkstra:不能解决负边权 floyd:能解决负边权 不能解决负边权回路问题 求最短路径:dijkstra bfs floyd 思路 1.让任意两点之间的距离变短:引入…

双指针(滑动窗口)相关算法题

双指针算法有时候也叫尺取法或者滑动窗口,是⼀种优化暴力枚举策略的手段:当我们发现在两层 for 循环的暴力枚举过程中,两个指针是可以不回退的,此时我们就可以利用两个指针不回退的性质来优化时间复杂度。因为双指针算法中&#x…

ScratchCard刮刮卡交互元素的实现

效果展示 刮刮卡是⼀种常见的网页交互元素,通过模拟物理世界的刮涂层来揭示下方的内容。这种效果主要依赖于HTML5的 元素来实现。以下是⼀个基于TypeScript的刮刮卡实现示例,包括配置项、初始化方法和核心的刮开逻辑。下面是展示的效果部分刮开效果&…

【Python LeetCode 专题】热题 100,重在思路

哈希1. 两数之和49. 字母异位词分组128. 最长连续序列双指针283. 移动零11. 盛最多水的容器15. 三数之和42. 接雨水滑动窗口3. 无重复字符的最长子串438. 找到字符串中所有字母异位词子串560. 和为 K 的子数组239. 滑动窗口最大值普通数组53. 最大子数组和56. 合并区间189. 轮转…

openEuler 22.03 LTS Rootless Docker 安装指南

openEuler 22.03 LTS Rootless Docker 安装指南 1.创建普通用户(用于无根模式) sudo useradd -m docker-user sudo passwd docker-user # 设置密码 sudo usermod --add-subuids 100000-165535 docker-user sudo usermod --add-subgids 100000-165535 do…

CMake指令:常见内置命令行工具( CMake -E )

目录 1.简介 2.核心作用 3.常用命令介绍 3.1.文件操作命令 3.2.系统命令执行 3.3.校验与哈希 3.4.流程控制与等待 3.5.路径与文件处理 3.6.归档与压缩 3.7.网络与下载 3.8.实用工具 4.使用示例 5.与 shell 命令的对比 6.在 CMake 脚本中使用 7.总结 相关链接 1…

YOLO融合CAF-YOLO中的ACFM模块

YOLOv11v10v8使用教程: YOLOv11入门到入土使用教程 YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 《CAF-YOLO: A Robust Framework for Multi-Scale Lesion Detection in Biomedical Imagery》 一、 模块介绍 论文链接:https://arxiv.org…

Webpack 项目构建优化详解

1. 相关面试题 1.1. 做过哪些Webpack打包构建优化? 代码分割:使用 Webpack 的 SplitChunksPlugin 进行代码分割,将第三方库、公共代码与业务代码分离,提高缓存利用率和加载速度。 Tree Shaking:通过配置 mode: production 或使用 TerserPlugin,移除未引用的代码,减少…

【深度学习基础】张量与Tensor的区别?从标量到深度学习的多维世界

目录引言一、张量(Tensor)的定义与特性1. 数学中的张量2. 深度学习中的Tensor二、标量(Scalar)是什么?三、深度学习中的其他核心量1. 向量(Vector)2. 矩阵(Matrix)3. 高阶…

设计模式一: 模板方法模式 (Template Method Pattern)

模板方法模式是一种行为设计模式,它通过定义一个算法的骨架,而将一些步骤延迟到子类中实现。Template Method 使得子类可以不改变(复用)一个算法结构 即可重定义(override 重写)该算法的某些特定步骤。基本…

Linux驱动学习day24(UART子系统)

一、UART硬件理论1.1 作用及功能UART:通用异步收发传输器,简称串口。功能:移植u-boot、内核时,主要使用串口查看打印信息。外接各种模块,比如蓝牙GPS模块。使用UART的时候,要注意1. 波特率 2. 格式&#xf…

NFS共享服务器

目录 任务要求 思路总结 1.NFS共享服务 服务端 (ip 192.168.48.128) 客户端 (ip 192.168.48.130) 2.配置autofs自动挂载 任务要求 1.NFS服务器,可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中看来,那个远程主机的目…

FreeRTOS学习笔记之队列

小编正在学习嵌入式软件,目前建立了一个交流群,可以留下你的评论,我拉你进群一、简介队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间消息传递,队列中可以存储有限的、大小固定…