Docker镜像构建&优化及上传

这篇具有很好参考价值的文章主要介绍了Docker镜像构建&优化及上传。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

Dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使
Dockerfile 去构建镜像好比使用 pom 去构建 maven 项目一样,有异曲同工之妙
Docker镜像构建&优化及上传,docker,linux,运维,容器,安全

一.Dockerfile镜像构建

1.Dockerfile基本结构

Dockerfile 是一个包含一组指令的文本文件,用于告诉 Docker 如何构建一个镜像

Dockerfile一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令 

  1. 基础镜像指令 (FROM): 指定构建过程中使用的基础镜像。

    FROM centos:latest
  2. 维护者信息指令 (MAINTAINER) [已过时]: 指定镜像的作者和联系方式。现在更推荐使用标签方式,例如

    MAINTAINER Your Name <your-email@example.com>
  3. 工作目录指令 (WORKDIR): 设置后续指令的工作目录。

    WORKDIR /app
  4. 复制文件指令 (COPY): 将本地文件复制到镜像中的指定路径。

    COPY . /app
  5. 添加文件指令 (ADD): 类似于 COPY,但支持更多功能,例如远程文件、URL 自动解压缩等。

    ADD https://example.com/file.tar.gz /app/
    
  6. 运行命令指令 (RUN): 在镜像中执行命令,通常用于安装软件包、设置环境等。

    RUN apt-get update && apt-get install -y python3
    
  7. 暴露端口指令 (EXPOSE): 声明容器将在运行时监听的端口。

    EXPOSE 80
  8. 环境变量指令 (ENV): 设置环境变量,用于配置容器的运行时行为。

    ENV DATABASE_URL="mysql://user:password@localhost/db"
  9. 容器启动命令指令 (CMD or ENTRYPOINT): 定义容器启动时执行的默认命令。

    CMD ["python", "app.py"]

    或者使用 ENTRYPOINT

    ENTRYPOINT ["python", "app.py"]
  10. 标签指令 (LABEL): 添加元数据标签到镜像,例如版本信息、作者、描述等。

    LABEL version="1.0" \ description="My custom image" \ maintainer="your-email@example.com"

2.基础镜像构建

1.编写基础镜像文件

首先创建一个工作目录文件夹并进入

mkdir software
cd software

 在当前目录下编写dockerfile文件(注:名字不能更改,当前操作为编写并创建dockerfile文件)

vim dockerfile

将以下基础信息编写到dockerfile中

From centos
MAINTAINER 2187@qq.com
WORKDIR /test
COPY spring.jar /test

命令详解:From为基础镜像,MAINTAINER为联系者信息,后面的2187...可自行更改,WORKDIR为工作目录,COPY spring.jar /test是将当前目录下的spring.jar(已开发完的项目模块)复制到镜像中 

2.根据当前路径的Dockerfile文件构建镜像

docker build -t spring:v1 .

解析:

docker build 镜像构建

-t spring 为当前镜像命名(spring)

v1 版本号

. 当前路径

当出现Building Finished时说明构建成功了 

Docker镜像构建&优化及上传,docker,linux,运维,容器,安全

创建并运行新的容器

docker run -it 容器名:版本号

示例

docker run -it spring:v1

3.构建携带JDK镜像

将jdk上传到当前工作目录

Docker镜像构建&优化及上传,docker,linux,运维,容器,安全

 将以下命令替换Dockerfile文件的内容

From centos
MAINTAINER 2187@qq.com
WORKDIR /test
COPY spring.jar /test
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

 然后重新执行命令构建镜像

docker build -t spring:v2 .

 创建并运行容器

docker run -it spring:v2

 验证jdk是否安装成功,在当前容器中执行以下命令

echo $JAVA_HOME

出现jdk路径时说明安装成功

Docker镜像构建&优化及上传,docker,linux,运维,容器,安全

 4.构建一个创建后自动运行项目的镜像

和上面的操作一样,将Dockerfile文件进行更改,构建镜像然后创建运行容器,当容器运行后,容器中的项目也会跟着运行,不过这里需要注意的是spring.jar为当前项目,根据实际情况替换为自己的项目,

在运行创建新的容器时记得要将容器名进行更改防止重名

From centos
MAINTAINER 2187@qq.com
WORKDIR /test
COPY spring.jar /test
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
CMD  java -jar spring.jar

二.镜像优化

优化思路:

1.在上面的构建镜像时可以看到,每一个模块都需要去携带JDK,但是由于jdk的空间占用量过于庞大,当我们的模块数量变多时,对于我们的服务器资源消耗也是巨大的,所以我们采取另一种方案,对于JDK而言,我们更多的是能利用到它是在代码编写方面,但是在服务器中我们并不需要对其进行一个代码编写,而我们运行项目时可以只需要用到JRE,JRE相对于JDK空间占用量就小很多了,可以很好地节省我们的服务器资源

2.替换更加实用且更简洁的镜像文件(将centos替换成jeanblanchard/alpine-glibc)

1.构建携带JRE版本镜像

 1.将jre压缩包上传到当前目录

Docker镜像构建&优化及上传,docker,linux,运维,容器,安全

2.替换Dockerfile文件 

From jeanblanchard/alpine-glibc
MAINTAINER 2187@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

3. 执行命令构建镜像

docker build -t spring:v6 .

2.对比所有镜像

Docker镜像构建&优化及上传,docker,linux,运维,容器,安全

对比所有镜像,明显不同版本的所需容量不同,可以节省很多服务器资源 

三.镜像上传

以实际实施情况为例,当我们需要给客户安装镜像时,有时我们会采用镜像仓库的方式去对客户进行安装,那么我们就需要将我们提前准备好的镜像上传到仓库中

这里以阿里云为例

 容器镜像服务 (aliyun.com)https://cr.console.aliyun.com/cn-heyuan/instance/credentials

根据链接 进入到阿里云镜像服务,因为隐私原因,所以使用个人版进行演示

注意:提前设置一个固定密码

我们进入到访问凭证中,复制当前命令到虚拟机中进行一个登录

Docker镜像构建&优化及上传,docker,linux,运维,容器,安全

执行命令后填写密码,当出现Loin Succeed说明登录成功

Docker镜像构建&优化及上传,docker,linux,运维,容器,安全 然后重新回到阿里云创建命名空间

Docker镜像构建&优化及上传,docker,linux,运维,容器,安全

然后去根据命名空间创建我们的仓库 

Docker镜像构建&优化及上传,docker,linux,运维,容器,安全

创建仓库时我们可以选择不同的仓库例如github、本地仓库等等,这里我们选择本地仓库

Docker镜像构建&优化及上传,docker,linux,运维,容器,安全 根据官方为我们提供的方法为我们原本存在的镜像取一个别名并创建

Docker镜像构建&优化及上传,docker,linux,运维,容器,安全

 我们输入命令 docker images 查看我们所有镜像的images_id

Docker镜像构建&优化及上传,docker,linux,运维,容器,安全

将我们所需要上传的镜像id对下面的命令镜像替换,版本号默认输入v1(注意要把中括号一起替换掉)

docker tag [ImageId] registry.cn-heyuan.aliyuncs.com/medical_yu/outpatient:[镜像版本号]

执行完成后我们可以继续查看我们的镜像,就会新生成一个以阿里云规则命名的镜像

Docker镜像构建&优化及上传,docker,linux,运维,容器,安全

然后执行命令准备开始进行推送

docker push 镜像名:版本号

示例

docker push registry.cn-heyuan.aliyuncs.com/medical_yu/outpatient:v1

 点击阿里云镜像版本,可以看到我们推送的镜像Docker镜像构建&优化及上传,docker,linux,运维,容器,安全

镜像拉取

docker pull镜像名:版本号文章来源地址https://www.toymoban.com/news/detail-801369.html

到了这里,关于Docker镜像构建&优化及上传的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手动构建自己的docker容器镜像实战

    之前的实战中,我们实战中,我们使用的镜像都是镜像仓库已有的镜像。 已有的镜像都是别人已经开发好上传的。今天我们一起来看看如何构建自己的镜像并上传到镜像仓库中。 🏠个人主页:我是沐风晓月 🧑个人简介:大家好,我是沐风晓月,阿里云社区博客专家😉😉

    2023年04月10日
    浏览(38)
  • Docker入门流程(创建容器到构建镜像)

    平时我们经常会遇到在自己电脑上运行的代码,在别人的电脑上运行就出现莫名其妙的问题,这种大多是因为代码”水土不服“,不同电脑的软件版本和依赖库不同,Docker的使用可以很好地解决这个问题。简单来说,Docker可以把 代码和代码运行的环境 一把打包,构建一个容

    2024年02月08日
    浏览(45)
  • Docker(二)镜像详解、镜像构建、镜像优化

    共享宿主机的kernel base镜像提供的是最小的Linux发行版(base镜像:不同发行版的/文件系统) 同一docker主机支持运行多种Linux发行版 采用分层结构的最大好处是:共享资源 镜像通过分层,如果本地已经有了,不管这一层属于哪个镜像,因为每一层都有独立的标识(都是唯一的

    2024年02月05日
    浏览(37)
  • Docker构建jar包镜像并运行容器

    Docker需要提前安装,不懂的参考: Centos7操作Docker_JohnGene的博客-CSDN博客_centos7 操作docker 安装Docker安装Docker官方源:yum-config-manager –add-repo http://download.docker.com/linux/centos/docker-ce.repo更新源:yum makecache fast安装:yum install docker-ce启动并设为开机自启:systemctl enable docker #设为开机

    2024年02月09日
    浏览(63)
  • 【运维知识大神篇】运维人必学的Docker教程1(Docker安装部署+Docker镜像管理+容器管理常用命令+搭建docker的本地yum源+windows系统安装docker环境)

    本篇文章开始给大家介绍Docker,这个是我非常喜欢的一个服务,介绍给大家,希望大家也能喜欢! 目录 何为容器 Docker环境安装部署 一、yum安装(CentOS7.9) 二、rpm包安装(CentOS) 三、卸载docker环境 四、安装指定的docker版本 五、Ubuntu安装docker环境 六、使用deb安装docker 七、

    2024年01月18日
    浏览(110)
  • 【Docker】镜像的构建与上传下载阿里云

    🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Docker实战》。🎯🎯 👉点击这里,就可以查看我的主页啦!👇👇 Java方文山的个人主页 🎁如果感觉还不错的话请给我点赞吧!🎁🎁 💖期待你的加入,一起

    2024年01月18日
    浏览(52)
  • Docker进阶:容器数据卷与Dockerfile构建镜像(发布)

    💖The Begin💖点点关注,收藏不迷路💖 1、完成数据持久化和共享数据,docker容器中的数据,同步到本地。 2、重要数据back_up 特点: 实时生效、数据卷可在容器之间共享和重用数据、数据卷中的更改不会包含在镜像更新中、数据卷的生命周期会一直延续到没有容器使用它为止

    2024年02月09日
    浏览(55)
  • 项目打包docker镜像 | 上传nexus | jenkins一键构建

      Docker部署项目是指使用Docker容器化技术将应用程序及其依赖项打包成一个独立的、可移植的运行环境,并在各种操作系统和平台上进行部署和运行。   使用Docker的主要原因是解决了应用程序在不同环境中部署和运行的问题。传统上,应用程序在部署时需要考虑操作系统

    2024年02月09日
    浏览(49)
  • Docker基础入门:容器数据卷与Dockerfile构建镜像(发布)

    💖The Begin💖点点关注,收藏不迷路💖 1、完成数据持久化和共享数据,docker容器中的数据,同步到本地。 2、重要数据back_up 特点: 实时生效、数据卷可在容器之间共享和重用数据、数据卷中的更改不会包含在镜像更新中、数据卷的生命周期会一直延续到没有容器使用它为止

    2024年02月10日
    浏览(55)
  • Docker 仓库与注册表: 构建可靠的容器镜像生态系统

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月17日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包