java如何构建镜像_构建自己的docker镜像

本文介绍了如何使用Java构建Docker镜像,特别是针对SpringBoot项目。首先手动创建了一个基于CentOS的JDK8镜像,然后搭建私有仓库,将镜像推送到私有仓库。接着,配置SpringBoot项目,利用Maven的docker插件实现项目直接打包为Docker镜像,并上传到私有仓库。最后,详细说明了如何启动和访问这个Docker镜像。
摘要由CSDN通过智能技术生成

今天玩一下怎么构建一个我们自己的docker镜像,然后我们试试将本地的springboot项目打包成一个镜像,然后发送到远程服务器的docker中,最后我们运行这个docker镜像成功访问;

提前须知:要知道docker的基本操作,怎么拉取镜像,启动容器;还有云服务器是centos7

1.手动构建一个jdk8的镜像

我们知道docker的每一个镜像其实就是一个单独的linux操作系统,只不过不同的镜像里面装的软件不一样;

所以我们要怎么做一个自己的镜像呢?肯定不可能先去做一个linux操作系统的镜像吧,这也太坑爹了.....

解决方案是我们在做一个自己的镜像的时候,需要依赖一个linux镜像,就像一个类一样,你需要继承一个父类之后你就拥有了父类的所有功能,然后只需要专注于开发自己的功能就好;

所以自己做镜像的本质就是我们在linux镜像的基础上,我们给它安装一点东西,然后再打包成一个镜像,就行了,很容易;

1.1.准备

首先准备jdk8的安装包和一个文件名为docker_jdk8的文件,这个文件名可以随意

042e4b28c426c7b9ccb0afb922d7ae7a.png

然后docker拉取一个centos7的镜像:docker pull centos:7

2eb2055a5479bfedbcc61d6989f22912.png

1.2 编写docker_jdk8文件

这个docker_jdk8其实就是一个dockerfile的文件,主要是一些特殊的关键字+linux命令,关键字如下所示:

09c48f6e415282f7c8fba87aadaceae0.png

编写文件,注意安装包的名字和解压之后的名字

#依赖的镜像名称和版本号

FROM centos:7#指定镜像创建者信息,这里可以随意写

MAINTAINER java小新人

#切换工作目录,这里就是当你一进入容器所在的目录

WORKDIR/usr

#创建一个目录

RUN mkdir/usr/local/java

#把jdk压缩包添加到容器中并解压

ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/#配置java环境变量

ENV JAVA_HOME/usr/local/java/jdk1.8.0_171

ENV JRE_HOME $JAVA_HOME/jre

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

ENV PATH $JAVA_HOME/bin:$PATH

文件写完之后,使用命令打包镜像:docker build -f ./docker_jdk8 -t myjdk1.8:1.0 .    -f表示要执行的dockerfile文件路径,-t表示打包后的镜像名,冒号后面表示我们镜像的版本

274d8640f801ba26c7c04a760223a60f.png

查看镜像,可以看到我们自己的镜像已经做出来了;

可以使用命令:docker run -it myjdk1.8 /bin/bash    进入容器看看jdk是否配置成功(注意,使用这个命令进入容器的话,每一次都会创建一个新的容器,你可以先启动,然后使用docker exec -it 容器id /bin/bash进入容器)

918947b02aa95ce39a973ecca3e301e1.png

924b42d72f5153774f9d923949e80ec1.png

2.搭建私有仓库

我们创建了这么厉害的一个jdk8的镜像,我们不能一个人默默的使用,肯定需要我们的小伙伴也能用一下,快乐是要分享的嘛( ̄▽ ̄)ノ

而且总不能我们换了一台服务器都需要这样手动的构建这个镜像吧,这种重复的工作我们可是不想去干的;

所以我们需要弄一个私有仓库,将我们做出来的镜像丢到私有仓库中,然后小伙伴想用可以直接去拉取就行了;

2.1 拉取私有仓库镜像

私有仓库本质上也是一个docker镜像,我们使用命令:docker pull registry

7be62c115a84e9854606b08fc0338fa6.png

2.2.修改docker配置文件

使用命令:vim /etc/docker/daemon.json

这里配置的第一个是docker的源,提高下载速度;第二个就是配置私有仓库地址,填入你的ip,让docker信任你的私有仓库

注意,私有仓库的端口是5000端口,等下我们启动私有仓库容器的时候会用到这个端口的;

{"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"],"insecure-registries":["你的本机ip:5000"]

}

2.3 使用私有仓库

因为改了配置文件,首先我们需要重启docker:systemctl restart docker

然后启动私有仓库容器:docker run -id --name registry -p 5000:5000 registry

注意,绑定的5000端口哦!!!还有,可以使用-v /opt/registry:/var/lib/registry 参数进行目录挂载,私有仓库容器中镜像默认是放在/var/lib/registry中的,挂载了之后可以防止把容器删了里面的镜像就都没有了,我这里图方便就没有弄的这么麻烦,后续的删除私有仓库的操作也需要用到这个目录!

然后根据下面这个路径访问能看到这个就是成功了!

1defbe15ce9d891c4952808295df1f1b.png

2.4. 上传镜像

将前面我们做的jdk8的镜像放到这个私有仓库里面;

首先必须标记一下我们的镜像:docker tag myjdk1.8:1.0 106.52.104.190:5000/myjdk1.8:1.0

b9d92978034c3e0cd31a6379843f40b3.png

注意,后面的这个名字是你linux服务器的ip地址加上私有仓库的端口,标记的作用,你可以看做可以更好区分私有仓库镜像和从公有仓库拉取的镜像,名字必须要是这样的格式,后面的推送就是根据这个名字的ip和端口进行推送到私有仓库的

86e26ab83e85de1cf5b0f68cf089de5d.png

然后将这标记的镜像给推送到私有仓库:docker push 106.52.104.190:5000/myjdk1.8:1.0

我们如果要拉取本地仓库镜像的话,只需要使用:docker pull 106.52.104.190:5000/myjdk1.8:1.0   注意要带上ip和端口以及版本号,由于是本次仓库拉取的,所以速度贼快~

我们查看一下私有仓库中的镜像:

05b9831df2662e952c84baaf18e93d4d.png

3.sprignboot项目配置docker

服务器部署java项目的方式很多种:

最开始在服务器部署javaweb项目,首先安装tomcat,配置环境变量,然后将我们的项目打成war包丢到tomcat中的webapp中,启动tomcat,就可以访问了

后来使用了springboot之后,我们可以将springboot项目打包成一个jar包,然后使用nohup java -jar app.jar & 这种方式运行一个项目,就可以访问了;

然后用了docker之后,我们不需要手动安装tomcat了,可以直接使用tomcat镜像,启动容器,然后将容器中tomcat的webapp目录挂载到宿主机上的xxx目录,我们只需要将项目war包丢到宿主机的xxx目录,然后启动tomcat容器就可以访问了;(springboot项目可以打成jar包,然后使用jdk镜像就行了)

但是上面这种方式还是需要我们去手动打war包,丢到服务器上,很繁琐,我们还可以进行简化一下:在springboot项目中配置docker插件,我们只需要输入打包命令,就可以将项目打包成一个docker镜像,上传到docker私有仓库中,其他人也可以在这个私有仓库中拉取这个镜像启动容器;

3.1 准备

首先,我们随便创建一个springboot项目

2cf1c8c5bc7dc71b2126fc46d0ec6380.png

3.2 在pom.xml文件中配置docker插件

我们看看pom.xml文件,改的地方就两个,一个是finalName标签设置打包后的名字,另外就是增加了docker插件;

4.0.0

com.protagonist

dockerimg

0.0.1-SNAPSHOT

dockerimg

测试将项目打包成docer镜像

1.8

UTF-8

UTF-8

2.3.7.RELEASE

true

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

org.junit.vintage

junit-vintage-engine

org.springframework.boot

spring-boot-dependencies

${spring-boot.version}

pom

import

testdocerimg

org.apache.maven.plugins

maven-compiler-plugin

3.8.1

1.8

1.8

UTF-8

org.springframework.boot

spring-boot-maven-plugin

2.3.7.RELEASE

com.protagonist.dockerimg.DockerimgApplication

repackage

repackage

com.spotify

docker-maven-plugin

0.4.13

106.52.104.190:5000/${project.artifactId}:${project.version}

myjdk1.8:1.0

["java", "-jar", "/${project.build.finalName}.jar"]

/

${project.build.directory}

${project.build.finalName}.jar

http://106.52.104.190:2375

其实上面这个docker插件的配置就是跟dockerfile文件一样的效果;

3.3 配置docker远程连接

需要配置docker能够支持远程连接:

使用命令:vim /lib/systemd/system/docker.service

在ExecStart的后面添加  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock  这就表示允许任何人远程向你的docker私有仓库中传镜像;

26116e8fa743e1780d6c53051e34c027.png

修改了之后还需要重新启动一下docker,重新启动私有仓库容器;

systemctl daemon-reload

systemctl restart docker

docker start registry

3.4 打包并远程上传docker镜像

使用命令:mvn clean package docker:build -DpushImage

799931abe7bfada22526236392ad5482.png

直到看到下图这个就表示成功:

f007e2f6d604e0d8c7d847a3eb81c167.png

打开服务器查一下镜像,可以看到我们的项目已经被制作成了镜像,并且已经上传过来,而且还丢给私有仓库中一份了;

bd14c45dc48f4a83be70e61cb3aeb02d.png

0fab5ea7be5897ec59c2ada6a1f95a86.png

3.5 启动镜像

使用命令:docker run -di --name dockerimg -p 8081:8081 106.52.104.190:5000/dockerimg:0.0.1-SNAPSHOT

可以查看docker容器启动日志:docker logs -f 容器id

启动之后浏览器访问:

5d7af0176f5f4d32f28ce5b0bbdfe340.png

ps:2375端口打开了之后,第二天我的服务器就被拉去挖矿了......我也是醉了╮(╯_╰)╭

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值