使用docker容器化部署SpringBoot項(xiàng)目

環(huán)境

安裝docker聚蝶、docker-compose的宿主機(jī),開啟docker遠(yuǎn)程訪問藻治,開放遠(yuǎn)程訪問端口

構(gòu)建一個(gè)SpringDemo

Controller

@RestController
public class UserController {

  @GetMapping("/login")
  public String login() {
    return "docker login success!!";
  }

}

Main

@SpringBootApplication
public class DockerApplication {

  public static void main(String[] args) {
    SpringApplication.run(DockerApplication.class, args);
  }
}

log4j2日志配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration monitorInterval="30" status="info">
    <!--定義appender-->
    <appenders>
        <!--輸出控制臺(tái)-->
        <Console follow="true" name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </Console>

        <!--append=false每次運(yùn)行程序會(huì)自動(dòng)清空碘勉,適合臨時(shí)測(cè)試用-->
        <RollingFile append="false" fileName="/home/logs/test.log"
                     filePattern="/home/logs/reduceinfo/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"
                     name="RollingFileInfo">
            <Filters>
                <!--控制臺(tái)只輸出level及以上級(jí)別的信息(onMatch),其他的直接拒絕(onMismatch)-->
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="100 MB"/>
                <TimeBasedTriggeringPolicy/>
            </Policies>
        </RollingFile>
        <!-- 指定存儲(chǔ)ERROR以上的日志桩卵,每次大小超過size會(huì)自動(dòng)存入按年份-月份建立的文件夾下面并進(jìn)行壓縮-->
        <RollingFile fileName="/home/logs/error.log"
                     filePattern="/home/logs/reduceerror/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"
                     name="RollingFileError">
            <DefaultRolloverStrategy max="20"/>
            <Filters>
                <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
                <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <!-- DefaultRolloverStrategy屬性如不設(shè)置验靡,則默認(rèn)為最多同一文件夾下7個(gè)文件,這里設(shè)置了20 -->
            <Policies>
                <SizeBasedTriggeringPolicy size="100 MB"/>
                <TimeBasedTriggeringPolicy/>
            </Policies>
        </RollingFile>

    </appenders>
    <!--定義logger-->
    <loggers>
        <!--過濾掉spring和hibernate級(jí)別在WARN下的信息-->
        <logger level="WARN" name="org.springframework">
        </logger>
        <logger level="WARN" name="org.mybatis">
        </logger>
        <root level="DEBUG">
            <appender-ref ref="Console"/>
            <appender-ref ref="RollingFileInfo"/>
            <appender-ref ref="RollingFileError"/>
        </root>
    </loggers>

</configuration>

application.yml

server:
  port: 8080

添加docker-maven插件依賴

<plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>1.1.1</version>
        <configuration>
          <!--鏡像名稱-->
          <imageName>${project.artifactId}:${project.version}</imageName>
          <!--安裝了docker的主機(jī)雏节,并且打開了api remote接口設(shè)置-->
          <dockerHost>http://192.168.10.114:2375</dockerHost>
          <!--指定 Dockerfile 的位置-->
          <dockerDirectory>${project.basedir}</dockerDirectory>
          <resources>
            <resource>
              <!--jar包位置-->
              <targetPath>/</targetPath>
              <directory>${project.build.directory}</directory>
              <!--默認(rèn)是${project.artifactId}-${project.version}-->
              <include>${project.build.finalName}.jar</include>
            </resource>
          </resources>
        </configuration>
      </plugin>

編寫DokerFile

  • Spingboot項(xiàng)目的日志保存在/home/logs下胜嗓,docker容器啟動(dòng)后需要將容器內(nèi)的日志掛載出來,方便在宿主機(jī)查看容器內(nèi)日志矾屯。
  • $JAVA_OPTS是在docker-compose.yml中指定的環(huán)境變量兼蕊,變量值就是JVM優(yōu)化后的參數(shù);目的就是在容器啟動(dòng)后優(yōu)化JVM件蚕。
  • SpringBoot項(xiàng)目的訪問端口是8080孙技,容器啟動(dòng)后需要將該端口映射出來。
  • 容器啟動(dòng)后需要指定時(shí)區(qū)排作,防止容器內(nèi)時(shí)區(qū)不在東八區(qū)牵啦,這一點(diǎn)非常重要。
FROM openjdk:8-jdk-alpine
VOLUME /home/logs
RUN mkdir -p /home/logs
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
COPY *.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["sh","-c","java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom  -Duser.timezone=GMT+08 -jar /app.jar"]

編寫docker-compose.yml

  • images:鏡像名妄痪,當(dāng)然你可也可以根據(jù)dockerfile來構(gòu)建哈雏,我這里使用maven插件已經(jīng)將工程打包成鏡像,所以就用打包好的鏡像咯
  • environment:著這里指定JAVA_OPTS環(huán)境變量衫生,值就是JVM參數(shù)
  • volumes:將容器內(nèi)的logs目錄掛載到宿主機(jī)的logs目錄
version: '3'
services:
  springappserver:
    container_name: springappserver
    images: example-dockerk8s:1.0-SNAPSHOT
    ports:
      - "8080:8080"
    volumes:
      - "/home/logs:/home/logs"
    environment:
      - JAVA_OPTS=-Xmx256m -Xms256m

打包鏡像上傳到宿主機(jī)

打包項(xiàng)目

2019-08-11-18-46-20.png

制作鏡像并上傳到宿主機(jī)

1.使用docker插件制作鏡像并上傳宿主機(jī)

2019-08-11-18-47-30.png

2.宿主機(jī)查看上傳的鏡像

2019-08-11-18-49-29.png

啟動(dòng)容器

將docker-compose.yml上傳到宿主機(jī)/home
使用docker-compose up --d啟動(dòng)容器
使用docker ps查看啟動(dòng)的容器

2019-08-11-18-53-42.png
2019-08-11-18-55-18.png

訪問項(xiàng)目

2019-08-11-18-58-08.png

宿主機(jī)查看容器內(nèi)日志

2019-08-11-19-10-59.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末裳瘪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子罪针,更是在濱河造成了極大的恐慌彭羹,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泪酱,死亡現(xiàn)場(chǎng)離奇詭異派殷,居然都是意外死亡还最,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門毡惜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拓轻,“玉大人,你說我怎么就攤上這事经伙》霾妫” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵橱乱,是天一觀的道長(zhǎng)辜梳。 經(jīng)常有香客問我粱甫,道長(zhǎng)泳叠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任茶宵,我火速辦了婚禮危纫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乌庶。我一直安慰自己种蝶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布瞒大。 她就那樣靜靜地躺著螃征,像睡著了一般。 火紅的嫁衣襯著肌膚如雪透敌。 梳的紋絲不亂的頭發(fā)上盯滚,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音酗电,去河邊找鬼魄藕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛撵术,可吹牛的內(nèi)容都是我干的背率。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嫩与,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼寝姿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起划滋,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤饵筑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后古毛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翻翩,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡都许,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嫂冻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胶征。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖桨仿,靈堂內(nèi)的尸體忽然破棺而出睛低,到底是詐尸還是另有隱情,我是刑警寧澤服傍,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布钱雷,位于F島的核電站,受9級(jí)特大地震影響吹零,放射性物質(zhì)發(fā)生泄漏罩抗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一灿椅、第九天 我趴在偏房一處隱蔽的房頂上張望套蒂。 院中可真熱鬧,春花似錦茫蛹、人聲如沸操刀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)骨坑。三九已至,卻和暖如春柬采,著一層夾襖步出監(jiān)牢的瞬間欢唾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工警没, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匈辱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓杀迹,卻偏偏與公主長(zhǎng)得像亡脸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子树酪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容