Docker 系列:打包新镜像到阿里云镜像仓库

Stella981
• 阅读 905

一、.Jib -- Java 应用构建容器镜像

1.Jib介绍

Jib 是 Google 开发的可以直接构建 Java 应用的 Docker 和 OCI 镜像的类库,以 Maven 和 Gradle 插件形式提供。

通过 Jib,Java 开发者可以使用他们熟悉的 Java 工具来构建容器。Jib 是一个快速而简单的容器镜像构建工具,它负责处理将应用程序打包到容器镜像中所需的所有步骤。它不需要你编写 Dockerfile 或安装 Docker,而且可以直接集成到 Maven 和 Gradle中 —— 只需要将插件添加到构建中,就可以立即将 Java 应用程序容器化

2.以springboot项目为例 ,在gradle中使用Jib

修改build.gradle文件

#加入jibapply plugin: "com.google.cloud.tools.jib" plugins {      id 'com.google.cloud.tools.jib' version '1.1.2'} group = 'com.example.zoe'version = '0.0.4' ext {    set('registryUrl',"registry.cn-hangzhou.aliyuncs.com")    set('registryNamespace', "仓库名称")    set('registryUsername',"用户名")    set('registryPassword',"密码")}  jib {    from {        image = "java:8"    }    to {        image = "${registryUrl}/${registryNamespace}/${project.getName()}"        tags = ["latest","${project.version}".toString() ]        auth {            username = "${registryUsername}"            password = "${registryPassword}"        }    }    container {        /**         * 设置jvm的启动参数         * user.timezone - 解决Java程序的时区问题         */        jvmFlags = ['-Duser.timezone=Asia/Shanghai']    }}

3.修改版本version,双击Jib就可以打包上传至镜像仓库  或者gradle jib

Docker 系列:打包新镜像到阿里云镜像仓库

等待运行100%完成

Docker 系列:打包新镜像到阿里云镜像仓库

阿里云仓库中可以看到刚刚提交的版本0.0.4

Docker 系列:打包新镜像到阿里云镜像仓库

二、Dockerfile--创建一个nginx镜像传至阿里云仓库

1.简介:

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明

2.环境 :linux环境, docker   创建一个nginx镜像

3.步骤

步骤1:在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容:

FROM nginxRUN echo '这是nginx镜像' > /usr/share/nginx/html/index.html

(构建好的镜像内会有一个 /usr/share/nginx/html/index.html 文件)

Docker 系列:打包新镜像到阿里云镜像仓库

Dockerfile中FROM 和 RUN 指令的作用

FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。

RUN:用于执行后面跟着的命令行命令。有以下俩种格式:

shell 格式:

RUN <命令行命令># <命令行命令> 等同于,在终端操作的 shell 命令。

exec 格式:

RUN ["可执行文件", "参数1", "参数2"]# 例如:# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大

FROM centosRUN yum install wgetRUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"RUN tar -xvf redis.tar.gz以上执行会创建 3 层镜像。可简化为以下格式:FROM centosRUN yum install wget \    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \    && tar -xvf redis.tar.gz

如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像

步骤2:开始构建镜像

在 Dockerfile 文件的存放目录下,执行构建动作。

以下示例,通过目录下的 Dockerfile 构建一个 nginx:test(镜像名称:镜像标签). :最后的 . 代表本次执行的上下文路径

 docker build -t nginx:test .

Docker 系列:打包新镜像到阿里云镜像仓库

构建成功

步骤三:查看镜像

Docker 系列:打包新镜像到阿里云镜像仓库

步骤四:docker 运行上述镜像

Docker 系列:打包新镜像到阿里云镜像仓库

更多详细请参考docker 官方网站,或者菜鸟教程 

最近才意识到:学习新东西最快的途径是官方资源  ,全面且系统  知道的晚了些 ,错过了好多学习的机会

三、Dockerfile--打包前端项目至阿里云仓库

环境:windows环境,Vue项目

1.Dockerfile 文件来定制一个镜像

文件:Dockerfile,放置在前端项目的根目录下,内容如下:

FROM docker.io/library/nginx:latest #基于nginx的镜像LABEL MAINTAINER="zoe" #可以不需要LABEL NAME="XX系统" # 覆盖default配置COPY nginx.conf /etc/nginx/conf.d/default.conf # 复制配置文件COPY dist/ /usr/share/nginx/html  #复制项目文件到nginx的html目录下 EXPOSE 80  #暴露80端口

此操作的目的是:封装了一个新的nginx镜像,并将当前的前端项目build成功之后复制到nginx对应得目录下,并且暴露80端口

(请只字不差的阅读,有时候离成功就差一点点,多一点耐心,大家都是这样经历过来的,你并不孤单)

2.文件nginx.conf,位置在前端项目的根目录下

server {    listen 80;    server_name  localhost;    root /usr/share/nginx/html;    location / {        add_header Cache-Control no-store;        try_files $uri $uri/ /index.html;    }}

3.build.sh 文件 用来快速打包成镜像,运行的时候必须有docker环境 ,windows需要安装Docker Desktop 

#!/usr/bin/env sh #======================# 打包构建自动化部署代码#====================== version=$1echo "构建版本为:" $version #yarn install#yarn build#npm installnpm run build#docker build -t 镜像仓库地址:版本号 . 如下,注最后的.不能丢  版本号要每次更新docker build -t registry.cn-hangzhou.aliyuncs.com/zoe/zoe:版本号 .docker push registry.cn-hangzhou.aliyuncs.com/zoe/zoe:1.0.8

4.上述三个文件的位置:

Docker 系列:打包新镜像到阿里云镜像仓库

Dockefile,nginx.conf,build.sh 如上图都在项目的根目录下 修改build.sh里面的版本号之后 ,在docker desktop启动时运行build.sh

正常是提示打包百分比  100%之后就已经成功将镜像发送至阿里云镜像仓库

关注

如果有问题,请在下方评论

想获得更多的学习知识请关注微信公众号:西北码农或扫下方二维码


Docker 系列:打包新镜像到阿里云镜像仓库

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这