Docker之Dockerfile构建镜像

🎉🎉欢迎来到我的CSDN主页!🎉🎉

🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚

🌟推荐给大家我的博客专栏《Docker之Dockerfile构建镜像》。🎯🎯

🎁如果感觉还不错的话请给我关注加三连吧!🎁🎁

前言

在上一期有关Docker的博客分享中我们学习到了Docker的一些数据卷和数据卷容器的一些基本的使用以及概念性的学习。本次的博客给大家带来的是有关Docker中的Dockerfile的学习。

一、什么是Dockerfile构建镜像

1. 基本概述

Dockerfile是一个文本文件,其中包含一组用于自动化Docker镜像构建的指令和配置。通过编写Dockerfile,用户可以定义镜像的内容、环境和运行时配置。构建过程基于这个Dockerfile文件,并通过Docker引擎执行一系列指令来生成最终的Docker镜像。

2. Dockerfile指令和它们的作用:

2.1 From :指定基础镜像,构建新镜像的起点。

bash 复制代码
FROM ubuntu:20.04

2.2 MAINTAINER: 标识镜像的维护者。

bash 复制代码
MAINTAINER Your Name <your.email@example.com>

2.3 RUN: 在镜像中执行命令,用于安装软件包、更新系统等。

bash 复制代码
RUN apt-get update && apt-get install -y nginx

2.4 COPY/ADD: 将文件或目录从构建上下文复制到镜像中。

bash 复制代码
COPY ./app /app

2.5 WORKDIR: 设置工作目录,后续的命令将在该目录下执行

bash 复制代码
WORKDIR /app

2.6 EXPOSE: 声明容器运行时要监听的端口。

bash 复制代码
EXPOSE 80

2.7 CMD: 提供容器默认的执行命令,可以被docker run时的参数覆盖。

bash 复制代码
CMD ["nginx", "-g", "daemon off;"]

2.8 ENTRYPOINT: 设置容器启动时执行的命令,不可被docker run时的参数覆盖。

bash 复制代码
ENTRYPOINT: 设置容器启动时执行的命令,不可被docker run时的参数覆盖。

简单示例

通过编写Dockerfile,用户可以定义从基础镜像到最终镜像的整个构建过程,确保应用程序在Docker容器中正确运行。构建镜像的命令通常是使用docker build,并在构建上下文中包含Dockerfile文件。例如:

bash 复制代码
docker build -t my_custom_image:tag .

上述命令将使用当前目录的Dockerfile构建一个名为my_custom_image的Docker镜像,并指定了一个标签tag

3. 基本结构

Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。
一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

|------------|-----------------------------------------------------------------------|
| 部分 | 命令 |
| 基础镜像信息 | FROM |
| 维护者信息 | MAINTAINER |
| 镜像操作指令 | RUN 、 ENV 、 COPY 、 ADD 、 EXPOSE 、 WORKDIR 、 ONBUILD 、 USER 、 VOLUME 等 |
| 容器启动时执行指 令 | CMD 、 ENTRYPOINT |
[Dockerfile的基本结构]

图解说明

二、示例使用及说明、

1. 构建镜像文件

接下来为大家讲解如何去根据需求构建一个自定义的镜像文件供自己使用,构建镜像时必须得有一个基础的镜像。我们这里使用的是Centtos(原本没有携带东西),我们输入指令

vim Dockerfile文件进行新建及编辑

bash 复制代码
vim Dockerfile

输入的内容如下

bash 复制代码
FROM centos

MAINTAINER 2081718134@qq.com

WORKDIR /test

COPY spring.jar /test

#1.指定基础镜像,并且必须是第一条指令
FROM centos:latest
#2.指明该镜像的作者和其电子邮件
MAINTAINER xx "xx@qq.com"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /usr/local/java
#4.一个复制命令,把jdk安装文件复制到镜像中,注意:jdk*.tar.gz使用的是相对路径
COPY spring.jar /test
输入完成之后按esc按键,输入;wq保存并且退出。接下来是我们进行构建镜像。

输入指令:docker build -t spring:v1 .

我们然后我们进行查看我们刚才构建的镜像文件。

输入指令:docker images

我们进入我们的镜像文件的容器中

输入命令:docker run -it spring:v1

我们可以输入指令:ls查看我们文件下所存在的文件

我们运行这个jar包文件,输入指令:java -jar spring.jar

无法运行的原因是因为我们使用的数基础镜像centos没有启动jar包的jdk,因此启动jar该需要我们下载所需的jdk文件。

2. 镜像运行

接下来我们需要去下载我们的jdk环境变量,我们输入指令:vim /etc/profile进行配置环境变量

配置jdk环境变量内容

bash 复制代码
#java environment
export JAVA_HOME=/javaxl/jdk1.8.0_151(jdk解压路径)
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

这是我们之前在centos中安装时的步骤,在Docker中不一样。

bash 复制代码
ADD jdk-8u221-linux-x64.tar.gz /test

ENV JAVA_HOME=/test/jdk1.8.0_221

ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV PATH=$JAVA_HOME/bin:$PATH

我们在我们的镜像配置文件中添加上述的内容在后面,但首先我们先要导入我们的jdk的压缩包和jre的压缩包。

我们对其镜像文件Dockerfile进行编辑

我们将镜像文件重新编译一遍

我们进入该镜像文件中进行查看文件

接下来是检查我们安装的jdk是否生效

接下下我们可以测试运行spring.jar包

我们接下来进行运行项目,我们运行时不是使用run因为我们是等容器打开后再运行因此使用的cmd命令。

bash 复制代码
CMD ["java -jar spring.jar"] 

我们在重新构建一个镜像文件

我们在运行这个文件

我们重新编辑一下我们的Dockerfile文件,重新构建一个镜像文件并且运行

3. 镜像优化

在我们的开发过程中jdk是我们必不可少的,但是在我们的运行项目中所需的是jre,因此接下来的操作就是将jdk修改为jre进行一系列的优化。下面我们首先修改Dockerfile文件内容,然后构建镜像文件

bash 复制代码
FROM centos

MAINTAINER 2081718134@qq.com

WORKDIR /test

COPY spring.jar /test

ADD jre-8u391-linux-x64.tar.gz /test

ENV JAVA_HOME=/test/jre1.8.0_391

ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV PATH=$JAVA_HOME/bin:$PATH

CMD java -jar spring.jar

我们接下来就是访问项目,首先清除掉所有的容器,然后创建对应的容器进行运行使用,最后再网页进行访问。

我们接下来的操作时将我们的镜像文件上传到我们的仓库之中,但是默认的仓库是docker.io/library/spring的官网仓库,需要我们去注册。但是我们可以使用阿里的仓库进行上传,上传快还方便。

网址:容器镜像服务 (aliyun.com)

我们选择个人版示例进行新建对其进行一系列的操作。我们进行一系列操作后的界面如下

我们使用前需要登陆我们的阿里账号

我我们直接执行该命令,然后在输入我们的之前设置的密码即可。

我们对其创建一个命名空间

我们新建完命名空间之后我们还要去新建一个仓库,用于我们上传镜像文件。

我们创建好仓库之后,镜像版本中没有任何东西,需要我们进行手动的推送上去。 推送的操作网页上有

给我们要上传的镜像取一个别名。

我对其要上传的镜像修改为我们阿里的仓库地址

上述图片是修改上传的网址路径,我们在查看我们的镜像。

我们在将其这个进行进行推送到我们的仓库中

我们可以在我们的仓库中查看我们的镜像

下载镜像输入指令

docker pull +镜像名+版本即可


🎉🎉本期的博客分享到此结束🎉🎉

📚📚各位老铁慢慢消化📚📚

🎯🎯下期博客博主会带来新货🎯🎯

🎁三连加关注,阅读不迷路 !🎁

相关推荐
雪域迷影2 小时前
PostgreSQL Docker Error – 5432: 地址已被占用
数据库·docker·postgresql
韩楚风3 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
莹雨潇潇3 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
陈苏同学3 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Ambition_LAO3 小时前
解决:进入 WSL(Windows Subsystem for Linux)以及将 PyCharm 2024 连接到 WSL
linux·pycharm
Pythonliu74 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我4 小时前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
追风赶月、4 小时前
【Linux】进程地址空间(初步了解)
linux
栎栎学编程4 小时前
Linux中环境变量
linux
挥剑决浮云 -4 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记