当前位置: 首页 > news >正文

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.lryc.cn/news/591363.html

相关文章:

  • PyCharm 高效入门指南(引言 + 核心模块详解)
  • 【C# in .NET】16. 探秘类成员-索引器:通过索引访问对象
  • 关于接口测试的HTTP基础【接口测试】
  • 解读一个大学专业——信号与图像处理
  • 一种融合人工智能与图像处理的发票OCR技术,将人力从繁琐的票据处理中解放
  • 小红书获取关键词列表API接口详解
  • 在 Windows 上使用 Docker 运行 Elastic Open Crawler
  • Java爬虫与正则表达式——用正则来爬取数据
  • 利用deepspeed在Trainer下面微调大模型Qwen2.5-3B
  • 切比雪夫不等式的理解以及推导【超详细笔记】
  • 【Linux手册】缓冲区:深入浅出,从核心概念到实现逻辑
  • 2025年6月GESP(C++一级):假期阅读
  • 多线程--sem_wait(sem)特殊用法
  • 【原创】【图像算法】高精密电子仪器组装异常检测
  • 24、鸿蒙Harmony Next开发:不依赖UI组件的全局自定义弹出框 (openCustomDialog)
  • java之json转excel生成
  • AppTrace:重新定义免填邀请码,解锁用户裂变新高度
  • IMU噪声模型
  • JxBrowser 7.43.5 版本发布啦!
  • ubuntu 开启ssh踩坑之旅
  • 加速度传感器方向校准方法
  • 原生前端JavaScript/CSS与现代框架(Vue、React)的联系、区别与运行环境(精简版)
  • 关于用git上传远程库的一些常见命令使用和常见问题:
  • Python爬虫入门到实战(2)-selenium驱动浏览器
  • 静态住宅IP和节点有什么区别?哪种更适合你的需求?
  • Redis完全指南:从基础到实战(含缓存问题、布隆过滤器、持久化及Spring Boot集成)
  • redis速记
  • 【WPF】WPF 自定义控件之依赖属性
  • springboot打包二次压缩Excel导致损坏
  • 【Linux基础知识系列】第五十四篇 - 网络协议基础:TCP/IP