一、引言
上章回顧:跟小編玩轉Docker到天亮 —— Docker容器入門上手實戰體驗
本章學習內容:掌握製作自定義鏡像並且遠程上傳倉庫
上一章節我們講訴了docker容器的安裝和基本命令的使用,並且實戰下載Nginx鏡像並且啓動操作,那今天小編來講怎麼製作一個自己的鏡像文件,如果你是新來小夥伴也沒有關係,剛開始小編學習docker時候也沒有去了解docker的一些概念,而是直接把項目製作成鏡像文件並且運行起來,之後纔去系統的學習的。
二、創建docker鏡像方法
製作鏡像的方式常見的來說一般就兩種:
第一種:使用docker commit 命令製作鏡像
使用這種方式需要一個前提,前提你得有一個基礎鏡像,然後運行這個鏡像並且進入容器內容。然後在容器內部安裝軟件、或者一些其他操作,最後使用commit命令來構建一個新的鏡像。
第二種:使用Dockerfile製作鏡像
這種方式就是本章的重點之重了,通過創建一個Dockerfile文件,在文件中寫入一些特定的構建指令,最後使用build命令來得到一個鏡像。就好比如你在項目的根目錄下創建一個Dockerfile文件,然後在Dockerfile文件中編寫了你要把自己項目所生成的jar包放入docker鏡像中去,並且指定容器啓動時啓動這個jar包,最後生成了一個鏡像運行成容器,這樣你的項目也就運行在容器當中了。
理解了嗎? 還不理解? 如果還不理解不要緊,跟着小編步驟往下操作,自己動手操作一遍,小編相信你會理解的。
本章是以第二種方式爲例
三、搭建項目環境
小編是Java出社會,那麼就以java爲例啦,道理都是一樣的。
直接使用IDEA快速構建一個SpringBoot項目,最後運行啓動效果下圖。
噼裏啪啦的寫了如下代碼,只是做個容器部署測試啦,別那麼認真哈哈哈哈哈。
package com.example.springboot02.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Auther: IT賤男
* @Date: 2018/11/27 11:06
* @Description: docker容器部署測試
*/
@RestController
public class HelloWorldController {
@RequestMapping("/index")
public String index() {
return "hello docker";
}
}
四、開始製作鏡像文件
項目有了,代碼有了,運行效果有了,那我們接下來就是把剛剛新建的項目製作成一個鏡像並且運行成容器,最後能訪問即可。
第一步:在項目的根目錄下創建一個名字叫的Dockerfile文件
第二步:編輯dockerfile文件,那寫什麼內容呢?
1、運行一個java程序,是需要java JDK對不對?
2、還要所編寫的代碼,這裏小編是使用的Springboot,最後打包成jar包
3、最後啓動這個jar包
我們要把以上三個步驟寫入Dockerfile文件當中,這樣docker才知道我們要幹什麼。
# 首先我們需要依賴一個JDK
FROM hub.c.163.com/library/java:8-alpine
# 使用IDEA工具最後生成的jar包都在targer目錄下,最後爲了方便重命名爲app.jar
ADD target/*.jar app.jar
# 這個就代表我們容器啓動之後需要執行的命令
ENTRYPOINT ["java","-jar","/app.jar"]
小編在詳細的解釋一下:
FROM 這個關鍵字表示我們需要依賴什麼鏡像,這裏小編引用的是網易鏡像中心的一個JDK版本是8-alpine,詳細信息地址在這:https://c.163yun.com/hub#/library/repository/version?repoId=2999 , 需要引用什麼後面就寫所對應的鏡像
ADD 這個關鍵字是實在的就是添加文件,就是要把所需要的文件添加到鏡像當中
ENTRYPOINT 容器啓動之後所要執行的命令,也就是啓動我們的jar包,以前我們是不是在命令窗口是不是這麼寫的,"java -jar app.jar"
這裏呢小編就粗略的提到了Dockerfile常用的構建指令,之後會有專門的一篇文章來講訴Dockerfile有哪些指令,並且講訴有什麼區別。
第三步:相關東西都準備好了,那接下來就是真正來構建一個鏡像文件,首先我們cd到項目的根目錄下,然後使用build命令
docker build -t jiannan/spirngboot-hello . // build就是構建鏡像所使用的命令
這裏-t選項就是指定鏡像的名字,最後面還有一個".",代表當前目錄,所以說我們一開始需要進入項目的根目錄下。
最後我們使用images命令來查看,就能看到我們剛剛所製作的鏡像文件。
五、啓動鏡像文件
啓動鏡像就很簡單啦,上一章節也所有講到啦,-d 代表後臺啓動,-p 映射端口 8081是本機端口,8080 是映射到容器內部端口。 製作一個自己的鏡像就是這麼簡單~~~
六、上傳遠程倉庫
本來小編是打算上傳到網易鏡像中心,但發現在創建倉庫時看到這麼一個提示,所以只好放棄選擇了docker。
第一步:首先你要去官網創建一個自己到賬號,並且登陸上去:https://hub.docker.com/,然後創建一個自己到倉庫。
第二步:使用docker login 來登陸,這裏小編之前登陸過了所以記住了憑證,第一次登陸時需要輸入剛剛註冊的用戶名和密碼,然後登陸顯示了Succeeded即可
第三步:使用docker push來推送到遠程倉庫,但小編髮現錯誤了,信息如下:
這個是因爲我是用kaneboy這個用戶名登陸的,但是我的鏡像名字是叫:jiannan/spirngboot-hell,所以就導致提示
requested access to the resource is denied,解決辦法如下,換個名字就行啦,最後上傳這個kaneboy開頭的鏡像。
上傳成功提示如圖,在docker後臺也能看到對應的鏡像文件,這個時候你的其他小夥伴就可以下載使用啦!
這個時候有些小夥伴就要想了,把鏡像文件上傳到第三方倉庫去是不是不太安全,畢竟公司一些核心項目等等之類的。
啊對,所以呢? 我們可以在公司內網的服務器上搭建一個私人倉庫,然後把鏡像放到公司內網的倉庫即可。
那怎麼實現呢? 小編下章再講~~~~
本章對有幫助的小夥伴記得點贊+關注,蟹蟹蟹蟹蟹蟹蟹蟹蟹蟹蟹蟹蟹蟹蟹蟹蟹蟹蟹蟹蟹蟹~~