Docker是使用Dokerfile文件來編譯本身的鏡像的。html
Dockerfile主要有以下的指令。java
FROM指令指明瞭當前鏡像繼承的基鏡像。編譯當前鏡像時會自動下載基鏡像,如:git
FROM ubuntu
MAINTAINER指令指明瞭當前鏡像的做者,如:github
MAINTAINER wyf
RUN指令能夠在當前鏡像上執行Linux命令並造成一個新的層。RUN是編譯時(build)的動做。 示例可有以下兩種格式,CMD和ENTRYPOINT也是如此:spring
RUN /bin/bash -c "echo helloworld"
或docker
RUN ["/bin/bash", "-c", "echo hello"]
CMD指令指明瞭啓動鏡像容器時的默認行爲。一個Dockerfile裏只能有一個CMD指令。CMD指令裏設定的命令能夠在運行鏡像時使用參數覆蓋。CMD是運行時(run)的動做,如: CMD echo "this is a test" 可被docker run-d image_name echo"this is not a test"覆蓋。ubuntu
EXPOSE指明瞭鏡像運行時的容器必需監聽指定的端口,如:bash
EXPOSE 8080
ENV指令可用來設置環境變量,如:app
ENV myName=wyf
或tcp
ENV myName wyf
ADD指令是從當前工做目錄複製文件到鏡像目錄中去,如:
ADD test.txt /mydir/
ENTRYPOINT指令可以讓容器像一個可執行程序同樣運行,這樣鏡像運行時能夠像軟件同樣接收參數執行。ENTRYPOINT是運行時(run)的動做,如:
ENTRYPOINT ["/bin/echo"]
咱們能夠向鏡像傳遞參數運行:
docker run -d image_name "this is not a test" \
咱們使用源碼的ch10docker來做爲演示用的Spring Boot項目,這個項目很簡單,只修改了入口類,代碼以下:
/** * @author yuhao.wang */ @Controller public class SwaggerController { @GetMapping("/") public String swaggerUi() { return "redirect:/swagger-ui.html"; } }
在CentOS 7.1上的/home/app目錄下放入咱們編譯好的jar包,如spring-boot-student-banner-0.0.1-SNAPSHOT.jar,在同級目錄下新建一個Dokcerfile文件,如:
[root@localhost app]# ls Dokcerfile spring-boot-student-banner-0.0.1-SNAPSHOT.jar [root@localhost app]#
Dockerfile文件內容以下:
FROM java:8 MAINTAINER wyh ADD spring-boot-student-banner-0.0.1-SNAPSHOT.jar app.jar EXPOSE 80 ENTRYPOINT ["java","-jar","/app.jar"]
代碼解釋:
在/home/app目錄下執行下面命令,執行編譯鏡像:
docker build -t wisely/rabbitmqdemo .
其中,wisely/rabbitmqdemo爲鏡像名稱,咱們設置wisely做爲前綴,這也是Docker鏡像的一種命名習慣。 注意,最後還有一個「.」,這是用來指明Dockerfile路徑的,「.」表示Dockerfile在當前路徑下。 編譯的過程以下所示:
[root@localhost app]# docker build -t wisely/rabbitmqdemo . Sending build context to Docker daemon 18.09 MB Step 1 : FROM java:8 Trying to pull repository docker.io/library/java ... 8: Pulling from docker.io/library/java 5040bd298390: Pull complete fce5728aad85: Pull complete 76610ec20bf5: Pull complete 60170fec2151: Pull complete e98f73de8f0d: Pull complete 11f7af24ed9c: Pull complete 49e2d6393f32: Pull complete bb9cdec9c7f3: Pull complete Digest: sha256:34959eed5df6bfe74a17fbf459ed29505d51a48d5cb4a39f215b613c65b8023b ---> d23bdf5b1b1b Step 2 : MAINTAINER wyh ---> Running in 0b3f96b31980 ---> 4c7c4c54a5e5 Removing intermediate container 0b3f96b31980 Step 3 : ADD spring-boot-student-banner-0.0.1-SNAPSHOT.jar app.jar ---> 4193c2e8f6c9 Removing intermediate container 0fe2f499d5af Step 4 : EXPOSE 80 ---> Running in 855a2fc6ad27 ---> 059bbcc036af Removing intermediate container 855a2fc6ad27 Step 5 : ENTRYPOINT java -jar /app.jar ---> Running in ba217b0e2951 ---> cc2264154e35 Removing intermediate container ba217b0e2951 Successfully built cc2264154e35
這時咱們查看本地鏡像,如:
[root@localhost app]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE wisely/rabbitmqdemo latest cc2264154e35 2 minutes ago 661.2 MB docker.io/java 8 d23bdf5b1b1b 12 months ago 643.1 MB [root@localhost app]#
這裏咱們能夠看到rabbitmqdemo和java兩個鏡像。
經過下面命令運行:
docker run -d --name appdemo -p 80:80 wisely/rabbitmqdemo
查看咱們當前的容器狀態,以下所示:
[root@localhost app]# docker run -d --name appdemo -p 80:80 wisely/rabbitmqdemo 9da20077be1c672acbcdad0b582c45794305698e1d165c0d6376d3771232692b [root@localhost app]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9da20077be1c wisely/rabbitmqdemo "java -jar /app.jar" 19 seconds ago Up 17 seconds 0.0.0.0:80->80/tcp appdemo [root@localhost app]#
當前的CentOS系統的ip爲192.168.35.128,訪問http://192.168.35.128 ,咱們能夠看到如圖所示頁面。
https://github.com/wyh-spring-ecosystem-student/spring-boot-student/tree/releases
spring-boot-student-banner 工程