一、.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文件

#加入jib
apply 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

等待运行100%完成

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

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

1.简介:

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

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

3.步骤

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

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

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

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 centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN 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 官方网站,或者菜鸟教程 

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

三、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=$1
echo "构建版本为:" $version

#yarn install
#yarn build
#npm install
npm 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.上述三个文件的位置:

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

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

 

关注

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

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


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐