docker + springboot 初步使用

安裝:

win7 win8->http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/

其他安裝方式:https://www.runoob.com/docker/windows-docker-install.html

安裝比較簡單,雙擊運行,點下一步即可,可以勾選自己需要的組件:

docker toolbox 是一個工具集,它主要包含以下一些內容:

  • Docker CLI - 客戶端,用來運行 docker 引擎創建鏡像和容器。
  • Docker Machine - 可以讓你在 Windows 的命令行中運行 docker 引擎命令。
  • Docker Compose - 用來運行 docker-compose 命令。
  • Kitematic - 這是 Docker 的 GUI 版本。
  • Docker QuickStart shell - 這是一個已經配置好Docker的命令行環境。
  • Oracle VM Virtualbox - 虛擬機。

下載完成之後直接點擊安裝,安裝成功後,桌邊會出現三個圖標,入下圖所示:

點擊 Docker QuickStart 圖標來啓動 Docker Toolbox 終端。

如果系統顯示 User Account Control 窗口來運行 VirtualBox 修改你的電腦,選擇 Yes。

 如果提示:looks like something went wrong in step....

這裏提供一下解決方案:

https://blog.csdn.net/puss0/article/details/94437525(重啓)

https://www.cnblogs.com/ecology-lee/p/10017992.html(改爲絕對路徑)

 在命令行中輸入:

docker run hello-world
$ docker run hello-world
 Unable to find image 'hello-world:latest' locally
 Pulling repository hello-world
 91c95931e552: Download complete
 a8219747be10: Download complete
 Status: Downloaded newer image for hello-world:latest
 Hello from Docker.
 This message shows that your installation appears to be working correctly.

 To generate this message, Docker took the following steps:
  1. The Docker Engine CLI client contacted the Docker Engine daemon.
  2. The Docker Engine daemon pulled the "hello-world" image from the Docker Hub.
     (Assuming it was not already locally available.)
  3. The Docker Engine daemon created a new container from that image which runs the
     executable that produces the output you are currently reading.
  4. The Docker Engine daemon streamed that output to the Docker Engine CLI client, which sent it
     to your terminal.

 To try something more ambitious, you can run an Ubuntu container with:
  $ docker run -it ubuntu bash

 For more examples and ideas, visit:
  https://docs.docker.com/userguide/

會先去pull默認的hello-world鏡像,然後運行。

結合springboot使用:

在路徑下新建DockerFile

內容如下:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD castle-zuul-1.0.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

PS:第3行的“castle-zuul-1.0.0.jar”要按maven打包輸出的文件實際修改

參數說明:

FROM:
    Docker是基於鏡像的部署,幸運的是Docker官方和開發者們爲我們維護了許多高質量的Docker鏡像,而基於這些鏡像我們能做出符合自己需求的鏡像。此處的FROM意思爲我們即將要創建的鏡像的基礎鏡像的名字,這個名字可以是我們本地已有的鏡像,也可以是Docker Hub上的鏡像,如果是Docker Hub上的鏡像,此時docker daemon會爲我們自動下載該鏡像。還有一個要注意的點,如果是本地鏡像要加上版本(鏡像名:版本號),否則默認版本號爲latest。

VOLUME:

    Docker的運行相當於是操作系統的一個進程,但是該進程又與普通進程有些許不同,因爲該進程內部維護着的是我們的一個微服務的完整結構,而往往項目中需要運行的微服務都有記錄日誌或者其他寫出文件的功能。設想一下這樣的情況:我們的微服務現在正在運行,但是訪問量突然增大,開發人員又沒有關注到這一點,沒有進行水平擴展,這時候很有可能這個微服務就down了,而這個微服務一旦down了之後,出現的情況就是整個容器的status就變成了Exited,而此時如果將容器刪除,容器中的所有數據卷會跟隨容器一起刪除,因爲這些數據卷是臨時的。此處的映射路徑爲/usr/test。這是我們自定義的映射路徑,後續要演示記錄日誌的功能。當然也可以指定/tmp 其效果都是在主機的/var/lib/docker/volumes目錄下創建一個臨時文件,並鏈接到容器的鏈接路徑。而爲什麼鏈接到容器的/tmp目錄呢?因爲 Spring Boot 使用的內嵌 Tomcat 容器默認使用/tmp作爲工作目錄。當然此處的/tmp也可以變成你的日誌記錄文件夾,這樣就可以在本地實時查看日誌記錄了。

ADD:

    將我們自身的項目admin.jar作爲app.jar加入到容器中。

EXPORT:
    該命令用於聲明在運行時容器提供服務的端口。注意:這只是一個聲明,運行時並不會因爲該聲明就打開相應的端口。該指令的作用是幫助鏡像使用者理解該鏡像服務的守護端口;其次是當運行時使用隨機映射時(即run命令的-P參數),會自動映射EXPORT的端口。

ENTRYPOINT:
    該命令制定Docker容器啓動時執行的命令,可多次設置,但只有最後一條會生效。

    ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]這條命令中可能部分讀者會對   -Djava.security.egd=file:/dev/./urandom   這條命令有疑惑,這是因爲linux中和windows中取隨機數時的參考策略不同,linux默認的隨機數會被取完,導致返回-1.而制定/dev/./urandom這個取隨機數的策略時,當隨機數取完之後會返回僞隨機數,不至於影響業務。

修改pom.xml:

 

<!-- Docker maven plugin -->
			<plugin>
				<groupId>com.spotify</groupId>
				<artifactId>docker-maven-plugin</artifactId>
				<version>1.0.0</version>
				<configuration>
					<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
					<dockerDirectory>src/main/docker</dockerDirectory>
					<resources>
						<resource>
							<targetPath>/</targetPath>
							<directory>${project.build.directory}</directory>
							<include>${project.build.finalName}.jar</include>
						</resource>
					</resources>
				</configuration>
			</plugin>

當然,參數也得加:

<docker.image.prefix>test</docker.image.prefix>

其他參數沒得也加一下即可。

到文件目錄(pom.xml同級目錄)執行cmd:

mvn package -P dev-docker docker:build

打包完成:

查看鏡像(docker image ls,其他命令自行百度):

運行:

docker run caslte/castle-zuul

也可以通過IMAGE ID運行 :

 

啓動成功。

我這個是consul的一個模塊,可以在服務中心看到:

遇到的其他問題:

docker部署springboot微服務時ip問題及consul註冊問題

docker常規操作——啓動、停止、重啓容器實例

Docker中如何刪除image(鏡像)

consul中出現critical報錯

微服務Ribbon在docker中無法通過服務名(SERVICE-ID)映射到宿主機IP

springcloud 向consul註冊服務時,顯示Unhealthy Nodes(不健康的節點)解決方法之一

 

 

告辭!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章