乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      構(gòu)建自己的docker鏡像

       Coder編程 2021-05-16

        今天玩一下怎么構(gòu)建一個(gè)我們自己的docker鏡像,然后我們?cè)囋噷⒈镜氐膕pringboot項(xiàng)目打包成一個(gè)鏡像,然后發(fā)送到遠(yuǎn)程服務(wù)器的docker中,最后我們運(yùn)行這個(gè)docker鏡像成功訪問(wèn);

        提前須知:要知道docker的基本操作,怎么拉取鏡像,啟動(dòng)容器;還有云服務(wù)器是centos7

       

      1.手動(dòng)構(gòu)建一個(gè)jdk8的鏡像

        我們知道docker的每一個(gè)鏡像其實(shí)就是一個(gè)單獨(dú)的linux操作系統(tǒng),只不過(guò)不同的鏡像里面裝的軟件不一樣;

        所以我們要怎么做一個(gè)自己的鏡像呢?肯定不可能先去做一個(gè)linux操作系統(tǒng)的鏡像吧,這也太坑爹了.....

        解決方案是我們?cè)谧鲆粋€(gè)自己的鏡像的時(shí)候,需要依賴一個(gè)linux鏡像,就像一個(gè)類一樣,你需要繼承一個(gè)父類之后你就擁有了父類的所有功能,然后只需要專注于開(kāi)發(fā)自己的功能就好;

        所以自己做鏡像的本質(zhì)就是我們?cè)趌inux鏡像的基礎(chǔ)上,我們給它安裝一點(diǎn)東西,然后再打包成一個(gè)鏡像,就行了,很容易;

       

        1.1.準(zhǔn)備

        首先準(zhǔn)備jdk8的安裝包和一個(gè)文件名為docker_jdk8的文件,這個(gè)文件名可以隨意

       

        然后docker拉取一個(gè)centos7的鏡像:docker pull centos:7

       

        1.2 編寫(xiě)docker_jdk8文件

        這個(gè)docker_jdk8其實(shí)就是一個(gè)dockerfile的文件,主要是一些特殊的關(guān)鍵字+linux命令,關(guān)鍵字如下所示:

       

        編寫(xiě)文件,注意安裝包的名字和解壓之后的名字

      #依賴的鏡像名稱和版本號(hào)
      FROM centos:7
      
      #指定鏡像創(chuàng)建者信息,這里可以隨意寫(xiě)
      MAINTAINER java小新人
      
      #切換工作目錄,這里就是當(dāng)你一進(jìn)入容器所在的目錄
      WORKDIR /usr
      
      #創(chuàng)建一個(gè)目錄
      RUN mkdir /usr/local/java
      
      #把jdk壓縮包添加到容器中并解壓
      ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
      
      #配置java環(huán)境變量
      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

       

        文件寫(xiě)完之后,使用命令打包鏡像:docker build -f ./docker_jdk8 -t myjdk1.8:1.0 .     -f表示要執(zhí)行的dockerfile文件路徑,-t表示打包后的鏡像名,冒號(hào)后面表示我們鏡像的版本

       

        查看鏡像,可以看到我們自己的鏡像已經(jīng)做出來(lái)了;

        可以使用命令:docker run -it myjdk1.8 /bin/bash    進(jìn)入容器看看jdk是否配置成功(注意,使用這個(gè)命令進(jìn)入容器的話,每一次都會(huì)創(chuàng)建一個(gè)新的容器,你可以先啟動(dòng),然后使用docker exec -it 容器id /bin/bash進(jìn)入容器)

       

       

       

      2.搭建私有倉(cāng)庫(kù)

        我們創(chuàng)建了這么厲害的一個(gè)jdk8的鏡像,我們不能一個(gè)人默默的使用,肯定需要我們的小伙伴也能用一下,快樂(lè)是要分享的嘛( ̄▽ ̄)ノ

        而且總不能我們換了一臺(tái)服務(wù)器都需要這樣手動(dòng)的構(gòu)建這個(gè)鏡像吧,這種重復(fù)的工作我們可是不想去干的;

        所以我們需要弄一個(gè)私有倉(cāng)庫(kù),將我們做出來(lái)的鏡像丟到私有倉(cāng)庫(kù)中,然后小伙伴想用可以直接去拉取就行了;

        

        2.1 拉取私有倉(cāng)庫(kù)鏡像

        私有倉(cāng)庫(kù)本質(zhì)上也是一個(gè)docker鏡像,我們使用命令:docker pull registry

       

         2.2.修改docker配置文件

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

        這里配置的第一個(gè)是docker的源,提高下載速度;第二個(gè)就是配置私有倉(cāng)庫(kù)地址,填入你的ip,讓docker信任你的私有倉(cāng)庫(kù)

        注意,私有倉(cāng)庫(kù)的端口是5000端口,等下我們啟動(dòng)私有倉(cāng)庫(kù)容器的時(shí)候會(huì)用到這個(gè)端口的;

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

       

        2.3 使用私有倉(cāng)庫(kù)

        因?yàn)楦牧伺渲梦募紫任覀冃枰貑ocker:systemctl restart docker

        然后啟動(dòng)私有倉(cāng)庫(kù)容器:docker run -id --name registry -p 5000:5000 registry

        注意,綁定的5000端口哦!?。∵€有,可以使用-v /opt/registry:/var/lib/registry 參數(shù)進(jìn)行目錄掛載,私有倉(cāng)庫(kù)容器中鏡像默認(rèn)是放在/var/lib/registry中的,掛載了之后可以防止把容器刪了里面的鏡像就都沒(méi)有了,我這里圖方便就沒(méi)有弄的這么麻煩,后續(xù)的刪除私有倉(cāng)庫(kù)的操作也需要用到這個(gè)目錄!

        然后根據(jù)下面這個(gè)路徑訪問(wèn)能看到這個(gè)就是成功了!

       

         2.4. 上傳鏡像

        將前面我們做的jdk8的鏡像放到這個(gè)私有倉(cāng)庫(kù)里面;

        首先必須標(biāo)記一下我們的鏡像:docker tag myjdk1.8:1.0 106.52.104.190:5000/myjdk1.8:1.0    

       

       

        注意,后面的這個(gè)名字是你linux服務(wù)器的ip地址加上私有倉(cāng)庫(kù)的端口,標(biāo)記的作用,你可以看做可以更好區(qū)分私有倉(cāng)庫(kù)鏡像和從公有倉(cāng)庫(kù)拉取的鏡像,名字必須要是這樣的格式,后面的推送就是根據(jù)這個(gè)名字的ip和端口進(jìn)行推送到私有倉(cāng)庫(kù)的

       

        然后將這標(biāo)記的鏡像給推送到私有倉(cāng)庫(kù):docker push 106.52.104.190:5000/myjdk1.8:1.0   

        我們?nèi)绻”镜貍}(cāng)庫(kù)鏡像的話,只需要使用:docker pull 106.52.104.190:5000/myjdk1.8:1.0   注意要帶上ip和端口以及版本號(hào),由于是本次倉(cāng)庫(kù)拉取的,所以速度賊快~

        我們查看一下私有倉(cāng)庫(kù)中的鏡像:

       

       3.sprignboot項(xiàng)目配置docker

        服務(wù)器部署java項(xiàng)目的方式很多種:

        最開(kāi)始在服務(wù)器部署javaweb項(xiàng)目,首先安裝tomcat,配置環(huán)境變量,然后將我們的項(xiàng)目打成war包丟到tomcat中的webapp中,啟動(dòng)tomcat,就可以訪問(wèn)了

        后來(lái)使用了springboot之后,我們可以將springboot項(xiàng)目打包成一個(gè)jar包,然后使用nohup java -jar app.jar & 這種方式運(yùn)行一個(gè)項(xiàng)目,就可以訪問(wèn)了;

        然后用了docker之后,我們不需要手動(dòng)安裝tomcat了,可以直接使用tomcat鏡像,啟動(dòng)容器,然后將容器中tomcat的webapp目錄掛載到宿主機(jī)上的xxx目錄,我們只需要將項(xiàng)目war包丟到宿主機(jī)的xxx目錄,然后啟動(dòng)tomcat容器就可以訪問(wèn)了;(springboot項(xiàng)目可以打成jar包,然后使用jdk鏡像就行了)

        但是上面這種方式還是需要我們?nèi)ナ謩?dòng)打war包,丟到服務(wù)器上,很繁瑣,我們還可以進(jìn)行簡(jiǎn)化一下:在springboot項(xiàng)目中配置docker插件,我們只需要輸入打包命令,就可以將項(xiàng)目打包成一個(gè)docker鏡像,上傳到docker私有倉(cāng)庫(kù)中,其他人也可以在這個(gè)私有倉(cāng)庫(kù)中拉取這個(gè)鏡像啟動(dòng)容器;

        

        3.1 準(zhǔn)備

        首先,我們隨便創(chuàng)建一個(gè)springboot項(xiàng)目

       

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

        我們看看pom.xml文件,改的地方就兩個(gè),一個(gè)是finalName標(biāo)簽設(shè)置打包后的名字,另外就是增加了docker插件;

      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven./POM/4.0.0" xmlns:xsi="http://www./2001/XMLSchema-instance"
               xsi:schemaLocation="http://maven./POM/4.0.0 https://maven./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>測(cè)試將項(xiàng)目打包成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>
              <!-- 跳過(guò)測(cè)試,要么添加這一行,要么就是就使用我下面那個(gè)跳過(guò)單元測(cè)試的插件!?。?!原因:spring-boot-maven-plugin插件已經(jīng)集成了maven-surefire-plugin插件,會(huì)自動(dòng)運(yùn)行 junit test -->
              <skipTests>true</skipTests>
          </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>
              <!--    這里我們定義一下項(xiàng)目打包后的項(xiàng)目名    -->
              <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>
      
                  <!-- 注意:只有下面這一個(gè)插件是我新增的,其他的都是自動(dòng)生成的-->
                  <!-- 跳過(guò)單元測(cè)試 -->
      <!--            <plugin>-->
      <!--                <groupId>org.apache.maven.plugins</groupId>-->
      <!--                <artifactId>maven-surefire-plugin</artifactId>-->
      <!--                <configuration>-->
      <!--                    <skipTests>true</skipTests>-->
      <!--                </configuration>-->
      <!--            </plugin>-->
                  <!-- docker的maven插件,官網(wǎng):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:1.0</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>
                          <!-- 遠(yuǎn)程訪問(wèn)docker的端口2375 ,這個(gè)需要在docker中配置   -->
                          <dockerHost>http://106.52.104.190:2375</dockerHost>
                      </configuration>
                  </plugin>
              </plugins>
          </build>
      
      </project>

         其實(shí)上面這個(gè)docker插件的配置就是跟dockerfile文件一樣的效果;

       

        3.3 配置docker遠(yuǎn)程連接

        需要配置docker能夠支持遠(yuǎn)程連接:

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

        在ExecStart的后面添加  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock  這就表示允許任何人遠(yuǎn)程向你的docker私有倉(cāng)庫(kù)中傳鏡像;

        

        修改了之后還需要重新啟動(dòng)一下docker,重新啟動(dòng)私有倉(cāng)庫(kù)容器;

        systemctl daemon-reload

        systemctl restart docker

        docker start registry

        

        3.4 打包并遠(yuǎn)程上傳docker鏡像

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

       

        直到看到下圖這個(gè)就表示成功:

       

        打開(kāi)服務(wù)器查一下鏡像,可以看到我們的項(xiàng)目已經(jīng)被制作成了鏡像,并且已經(jīng)上傳過(guò)來(lái),而且還丟給私有倉(cāng)庫(kù)中一份了;

       

       

        3.5 啟動(dòng)鏡像

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

        可以查看docker容器啟動(dòng)日志:docker logs -f 容器id

        啟動(dòng)之后瀏覽器訪問(wèn):

         

      ps:2375端口打開(kāi)了之后,第二天我的服務(wù)器就被拉去挖礦了......我也是醉了╮(╯_╰)╭

       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多