2021-01-23

构建自己的docker镜像

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

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

 

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

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

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

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

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

 

  1.1.准备

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

 

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

 

  1.2 编写docker_jdk8文件

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

 

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

#依赖的镜像名称和版本号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_171ENV JRE_HOME $JAVA_HOME/jreENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATHENV PATH $JAVA_HOME/bin:$PATH

 

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

 

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

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

 

 

 

2.搭建私有仓库

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

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

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

  

  2.1 拉取私有仓库镜像

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

 

   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端口哦!!!

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

 

   2.4. 上传镜像

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

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

 

 

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

 

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

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

 

 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容器就可以访问了

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

  

  3.1 准备

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

 

  3.2 在pom.

  我们看看pom.

<??><project ="http://maven.apache.org/POM/4.0.0" ="http://www.w3.org/2001/   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.protagonist</groupId> <artifactId>dockerimg</artifactId> <version>0.0.1-SNAPSHOT</version> <name>dockerimg</name> <description>测试将项目打包成docer镜像</description> <properties>  <java.version>1.8</java.version>  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>  <spring-boot.version>2.3.7.RELEASE</spring-boot.version> </properties> <dependencies>  <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-web</artifactId>  </dependency>  <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-test</artifactId>   <scope>test</scope>   <exclusions>    <exclusion>     <groupId>org.junit.vintage</groupId>     <artifactId>junit-vintage-engine</artifactId>    </exclusion>   </exclusions>  </dependency> </dependencies> <dependencyManagement>  <dependencies>   <dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-dependencies</artifactId>    <version>${spring-boot.version}</version>    <type>pom</type>    <scope>import</scope>   </dependency>  </dependencies> </dependencyManagement> <build>  <!-- 这里我们定义一下项目打包后的项目名 -->  <finalName>testdocerImg</finalName>  <plugins>   <plugin>    <groupId>org.apache.maven.plugins</groupId>    <artifactId>maven-compiler-plugin</artifactId>    <version>3.8.1</version>    <configuration>     <source>1.8</source>     <target>1.8</target>     <encoding>UTF-8</encoding>    </configuration>   </plugin>   <plugin>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-maven-plugin</artifactId>    <version>2.3.7.RELEASE</version>    <configuration>     <mainClass>com.protagonist.dockerimg.DockerimgApplication</mainClass>    </configuration>    <executions>     <execution>      <id>repackage</id>      <goals>       <goal>repackage</goal>      </goals>     </execution>    </executions>   </plugin>   <!-- 注意:只有下面这个插件是我新增的,其他的都是自动生成的-->   <!-- docker的maven插件,官网:https://github.com/spotify/docker‐maven‐plugin -->   <plugin>    <groupId>com.spotify</groupId>    <artifactId>docker-maven-plugin</artifactId>    <version>0.4.13</version>    <configuration>     <!-- 打包成镜像的名字 -->     <imageName>106.52.104.190:5000/${project.artifactId}:${project.version}</imageName>     <!-- 依赖的镜像 -->     <baseImage>myjdk1.8</baseImage>     <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>     <resources>      <resource>       <targetPath>/</targetPath>       <directory>${project.build.directory}       </directory>       <include>${project.build.finalName}.jar</include>      </resource>     </resources>     <!-- 远程访问docker的端口2375 ,这个需要在docker中配置 -->     <dockerHost></dockerHost>    </configuration>   </plugin>  </plugins> </build></project>

   其实上面这个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私有仓库中传镜像;

  

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

  systemctl daemon-reload

  systemctl restart docker

  docker start registry

  

  3.4 打包并远程上传docker镜像

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

 

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

 

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

 

 

  3.5 启动镜像

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

  启动之后浏览器访问:

 









原文转载:http://www.shaoqun.com/a/512661.html

跨境电商:https://www.ikjzd.com/

olive:https://www.ikjzd.com/w/2025

宝付:https://www.ikjzd.com/w/539


今天玩一下怎么构建一个我们自己的docker镜像,然后我们试试将本地的springboot项目打包成一个镜像,然后发送到远程服务器的docker中,最后我们运行这个docker镜像成功访问;  提前须知:要知道docker的基本操作,怎么拉取镜像,启动容器;还有云服务器是centos71.手动构建一个jdk8的镜像  我们知道docker的每一个镜像其实就是一个单独的linux操作系统,只不过不同
bol:bol
e邮包:e邮包
亚马逊怎样查找差评订单号:亚马逊怎样查找差评订单号
重拳出击!亚马逊相关非法服务商被端!:重拳出击!亚马逊相关非法服务商被端!
澳洲热带雨林 与土著亲密接触 - :澳洲热带雨林 与土著亲密接触 -

No comments:

Post a Comment