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 小时前
Docker简介
spring cloud·docker·eureka
矛取矛求2 小时前
Linux如何更优质调节系统性能
linux
内核程序员kevin3 小时前
在Linux环境下使用Docker打包和发布.NET程序并配合MySQL部署
linux·mysql·docker·.net
kayotin4 小时前
Wordpress博客配置2024
linux·mysql·docker
Ztiddler5 小时前
【Linux Shell命令-不定期更新】
linux·运维·服务器·ssh
小小不董5 小时前
Oracle OCP认证考试考点详解082系列16
linux·运维·服务器·数据库·oracle·dba
IPdodo全球网络5 小时前
如何利用静态住宅IP优化Facebook商城的网络稳定性与运营效率
运维·服务器
a1denzzz5 小时前
Linux系统的网络设置
linux·服务器·网络
运维&陈同学6 小时前
【模块一】kubernetes容器编排进阶实战之k8s基础概念
运维·docker·云原生·容器·kubernetes·云计算
ac.char6 小时前
在CentOS下安装RabbitMQ
linux·centos·rabbitmq