1,下載安裝 docker toolbox java
下載地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/linux
docker toolbox 是一個工具集,它主要包含如下一些內容:web
Docker CLI 客戶端,用來運行docker引擎建立鏡像和容器 Docker Machine. 可讓你在windows的命令行中運行docker引擎命令 Docker Compose. 用來運行docker-compose命令 Kitematic. 這是Docker的GUI版本 Docker QuickStart shell. 這是一個已經配置好Docker的命令行環境 Oracle VM Virtualbox. 虛擬機
下載完成以後直接點擊安裝,安裝成功後,桌邊會出現三個圖標,入下圖所示:spring
點擊 Docker QuickStart 圖標來啓動 Docker Toolbox 終端。docker
用戶 | 密碼 | 進入方式 |
---|---|---|
docker | tcuser | ssh |
root | command:sudo -i (docker用戶下執行) |
配置中國版加速器shell
在當前用戶文檔下面有一個.docker文件夾中machine\machines\default下的config.json文件apache
修改配置文件"HostOptions"下子節點json
"RegistryMirror": [
"https://9pwp8psv.mirror.aliyuncs.com"
],
或在docker toolbox終端中執行windows
#先刪除默認建立的VM鏡像
docker-machine rm virtualbox default
#從新建立一個阿里加速器的鏡像
docker-machine create --engine-registry-mirror=https://9pwp8psv.mirror.aliyuncs.com -d virtualbox default
2,新建一個springboot項目tomcat
添加一個默認的controller
@RestController public class DefaultController { @RequestMapping("/") public String home() { return "Hello Docker World "; } }
啓動這個項目檢查是否在我docker狀況下正常訪問
3,修改pox.xml改成docker編譯
properties屬性節點加入:
<!--properties節點中設置docker鏡像的前綴「springboot」--> <docker.image.prefix>springio</docker.image.prefix>
build節點修改成
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- Docker maven plugin --> <plugin> <!-- https://mvnrepository.com/artifact/com.spotify/docker-maven-plugin --> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.2.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}.war</include> </resource> </resources> </configuration> </plugin> <!-- Docker maven plugin --> </plugins> </build>
4,添加Dockerfile
目錄結構
文件內容
FROM openjdk:8-jdk-alpine VOLUME /tmp ADD demo-docker-0.0.1-SNAPSHOT.war app.war RUN sh -c 'touch /app.war' RUN echo "Asia/Shanghai" > /etc/timezone ARG active="prod" ENV JAVA_OPTS="" ENV spring.profiles.active="dev" #ENV spring.profiles.active=${active} ENTRYPOINT ["sh", "-c","java -Dspring.profiles.active=prod $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.war"] #ENTRYPOINT ["java","-jar","/app.war"]
解釋下這個配置文件:
5,添加maven編輯命令進行編輯
mvn package docker:build
點擊execute開始執行編譯成docker image,正常狀況下,會看到下面的步驟信息
[INFO] Building image springio/demo-docker Step 1/6 : FROM openjdk:8-jdk-alpine ---> 2cfb1dc1f0c8 Step 2/6 : VOLUME /tmp ---> Using cache ---> 0641ab6474fc Step 3/6 : ADD demo-docker-0.0.1-SNAPSHOT.war app.war ---> c01da61fbe6d Step 4/6 : RUN sh -c 'touch /app.war' ---> Running in c8946506f292 Removing intermediate container c8946506f292 ---> 12383d2f8329 Step 5/6 : ENV JAVA_OPTS="" ---> Running in 07d5bebe9e00 Removing intermediate container 07d5bebe9e00 ---> e8f8f4242553 Step 6/6 : ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.war" ] ---> Running in 39ce4bf989ba Removing intermediate container 39ce4bf989ba ---> dca2a0984c5d ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null} Successfully built dca2a0984c5d Successfully tagged springio/demo-docker:latest [INFO] Built springio/demo-docker [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 14.386 s [INFO] Finished at: 2019-01-23T16:56:36+08:00 [INFO] Final Memory: 57M/470M [INFO] ------------------------------------------------------------------------ Process finished with exit code 0
6, 運行項目
啓用「Docker Quickstart Terminal」或直接從"Oracle VM VirtualBox"界面進入default虛擬機,不須要輸入密碼便可進入root環境
輸入下列命令查看已存在的image
docker images
獲得結果
輸入下面命令啓動項目
docker run -p 8080:8080 -t springio/demo-docker
-a, --attach=[] 登陸容器(以docker run -d啓動的容器)
-c, --cpu-shares=0 設置容器CPU權重,在CPU共享場景使用
--cap-add=[] 添加權限,權限清單詳見:http://linux.die.net/man/7/capabilities
--cap-drop=[] 刪除權限,權限清單詳見:http://linux.die.net/man/7/capabilities
--cidfile="" 運行容器後,在指定文件中寫入容器PID值,一種典型的監控系統用法
--cpuset="" 設置容器可使用哪些CPU,此參數能夠用來容器獨佔CPU
-d, --detach=false 指定容器運行於前臺仍是後臺
--device=[] 添加主機設備給容器,至關於設備直通
--dns=[] 指定容器的dns服務器
--dns-search=[] 指定容器的dns搜索域名,寫入到容器的/etc/resolv.conf文件
-e, --env=[] 指定環境變量,容器中可使用該環境變量
--entrypoint="" 覆蓋image的入口點
--env-file=[] 指定環境變量文件,文件格式爲每行一個環境變量
--expose=[] 指定容器暴露的端口,即修改鏡像的暴露端口
-h, --hostname="" 指定容器的主機名
-i, --interactive=false 打開STDIN,用於控制檯交互
--link=[] 指定容器間的關聯,使用其餘容器的IP、env等信息
--lxc-conf=[] 指定容器的配置文件,只有在指定--exec-driver=lxc時使用
-m, --memory="" 指定容器的內存上限
--name="" 指定容器名字,後續能夠經過名字進行容器管理,links特性須要使用名字
--net="bridge" 容器網絡設置,待詳述
-P, --publish-all=false 指定容器暴露的端口,待詳述
-p, --publish=[] 指定容器暴露的端口,待詳述
--privileged=false 指定容器是否爲特權容器,特權容器擁有全部的capabilities
--restart="" 指定容器中止後的重啓策略,待詳述
--rm=false 指定容器中止後自動刪除容器(不支持以docker run -d啓動的容器)
--sig-proxy=true 設置由代理接受並處理信號,可是SIGCHLD、SIGSTOP和SIGKILL不能被代理
-t, --tty=false 分配tty設備,該能夠支持終端登陸
-u, --user="" 指定容器的用戶
-v, --volume=[] 給容器掛載存儲卷,掛載到容器的某個目錄
--volumes-from=[] 給容器掛載其餘容器上的卷,掛載到容器的某個目錄
-w, --workdir="" 指定容器的工做目錄
啓動信息以下:
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.1.RELEASE) 2019-01-23 09:02:49.987 INFO 1 --- [ main] c.e.demodocker.DemoDockerApplication : Starting DemoDockerApplication v0.0.1-SNAPSHOT on 740b53e853e9 with PID 1 (/app.war started by root in /) 2019-01-23 09:02:50.001 INFO 1 --- [ main] c.e.demodocker.DemoDockerApplication : No active profile set, falling back to default profiles: default 2019-01-23 09:02:53.582 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2019-01-23 09:02:53.685 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2019-01-23 09:02:53.692 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/9.0.13 2019-01-23 09:02:53.722 INFO 1 --- [ main] o.a.catalina.core.AprLifecycleListener : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64/server:/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64:/usr/lib/jvm/java-1.8-openjdk/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib] 2019-01-23 09:02:54.560 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2019-01-23 09:02:54.561 INFO 1 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 4389 ms 2019-01-23 09:02:55.178 INFO 1 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2019-01-23 09:02:55.671 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2019-01-23 09:02:55.681 INFO 1 --- [ main] c.e.demodocker.DemoDockerApplication : Started DemoDockerApplication in 6.796 seconds (JVM running for 7.909)
使用docker ps查看已運行的容器進程
表格字段說明
CONTAINER_ID 表示容器ID
IMAGE 表示鏡像名稱
COMMAND 表示啓動容器時運行的命令
CREATED 表示容器的建立時間
STATUS 表示容器運行的狀態。UP表示運行中,EXITED表示已中止
PORTS 表示容器對外的端口號
NAMES 表示容器名稱,該名稱默認由Docker自動生成,也可以使用docker run 命令的 -name 選項自行指定
幾個docker命令
docker start [CONTAINER_ID] :啓動一個或多個已經被中止的容器
docker stop [CONTAINER_ID] :中止一個運行中的容器
docker restart [CONTAINER_ID]:重啓容器
7,測試:
訪問你虛擬就ip地址+啓動時指定的端口號訪問spring boot項目
能夠在虛擬機中經過 ifconfig查看
輸入ifconfig命令能夠看到default有三個網段的IP地址,分別爲:
docker0: 172.17.0.1,這個是docker的網橋。 eth0:10.0.2.15,這個網段在Ubuntu環境中是沒有的,暫不知道爲何會多這一個。 eth1:192.168.99.100,這個數宿主機的IP地址。
另外也能夠在本地cmd中,使用 docker-machine env 或 docker info 查看docker環境
Docker inspect [容器id] 命令可查看容器運行信息