1. 程式人生 > >年輕人的第一個 Docker 應用,大大提高生產力!

年輕人的第一個 Docker 應用,大大提高生產力!

上一篇:[年輕人的第一個 Spring Boot 應用!](https://mp.weixin.qq.com/s/YNhoFtcvGuoY24fVQCPdmg) 哈哈,標題我抄了雷總的,不重要哦,重要的是 Docker 真的很年輕,雖然現在才不到 8 歲,但卻是個冉冉升起的巨星,火得一塌糊塗。 這幾年 Docker 實在太火了,Docker 是幹嘛的?做 Java 的怎麼能不知道 Docker?所以,本篇棧長帶大家來做第一個 Docker 應用,你就有個基本認識了。 可能有些人覺得 Docker 和自己沒多大關係,自己寫好程式碼就行了,Docker 那是運維用的東西,看完這篇,我想改變你的想法。 ## 一、什麼是 Docker? Docker 是現在最主流的開源容器,遵循 Apache 2.0 協議,使用 GO 語言進行開發,始於 2013 年,現已加入 Linux 基金會。 Docker 的核心思想是:"Build once, Run anywhere",即:一次構建,處處執行,這裡可以是一個作業系統、一個 Web 應用,或者一個數據庫服務等。 我們可以將 Docker 理解為一個輕量級的沙盒,Docker 容器完全使用沙盒機制,每個容器內都有其獨立執行的環境和元件,容器之間是相互隔離互不影響的,也可以進行容器間的通訊。 Docker 支援所有主流的作業系統,如:Linux/Mac/Windows,所有主流的雲服務也支援 Docker,所以,我們可以將應用及依賴、環境資訊等打包到一個 Docker 容器中,可以很輕鬆的實現應用釋出、遷移等。 Docker 官網: > https://www.docker.com/ Docker 程式碼託管: > https://github.com/docker ## 二、安裝 Docker Docker 有社群版、企業版。社群版是開源免費的,企業版是收費的,當然也會有更牛逼的特性和服務,一般的應用社群版的足夠了。 Docker 的安裝十分簡單,棧長這裡以 Mac 和 Docker 社群版為例作為安裝演示。 開啟 Docker 開始頁: > https://www.docker.com/get-started ![](https://img2020.cnblogs.com/other/1218593/202011/1218593-20201112135512916-2042397600.png) 下載 Mac 版 Docker 安裝包直接安裝即可。 安裝完後使用 `docker -v` 命令進行可以檢視 Docker 版本: ``` $ docker -v Docker version 19.03.13, build 4484c46d9d、 ``` 使用 `docker version` 還可以看到完整版本資訊: ``` docker version Client: Docker Engine - Community Cloud integration 0.1.18 Version: 19.03.13 API version: 1.40 Go version: go1.13.15 Git commit: 4484c46d9d Built: Wed Sep 16 16:58:31 2020 OS/Arch: darwin/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.13 API version: 1.40 (minimum version 1.12) Go version: go1.13.15 Git commit: 4484c46d9d Built: Wed Sep 16 17:07:04 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: v1.3.7 GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683 ``` 看到 Docker 版本資訊表示安裝成功了。 ## 三、啟動 Docker Mac 版本的 Docker 只要點選應用圖示進入就自動啟動了,也可以設定開機自動啟動。 Mac 版 Docker 官方就自帶了控制檯客戶端,通過 `Dashboard` 選單進入。 ![](https://img2020.cnblogs.com/other/1218593/202011/1218593-20201112135514327-1783278529.png) 通過控制檯可以進行容器、映象的管理、設定等。 總之 Docker 的安裝和啟動都非常簡單,不同的系統環境都可以輕鬆完成。 ## 四、第一個 Docker 應用 熟悉 Tomcat 的朋友都知道,Tomcat 安裝後 Webapp 下面會自帶一些 Web 專案。關於 Tomcat 系列教程可以關注公眾號Java技術棧搜尋閱讀。 Docker 也是如此,Docker 安裝完後也會自帶一些映象,可以在控制檯中看到,也可以使用`docker images` 命令檢視本地所有 Docker 映象。 如下圖所示,切換到 Images: ![](https://img2020.cnblogs.com/other/1218593/202011/1218593-20201112135515128-1635642441.png)Docker 自帶了一個 docker tutorial 映象,這是一個學習 Docker 的嚮導映象,本身是一個 Web 應用的映象,怎麼把它啟動起來呢? 映象只是一個只讀的靜態檔案,不能執行,容器才是映象的執行例項,所以需要新增一個容器來執行。 #### 客戶端執行 最簡單的方法是點選該映象右邊的執行按鈕: ![](https://img2020.cnblogs.com/other/1218593/202011/1218593-20201112135515715-2037943107.png) 在上面的對話方塊中填寫容器的必要資訊,如這裡容器的埠和對映本機的埠都是 80,最後點選執行按鈕。 ![](https://img2020.cnblogs.com/other/1218593/202011/1218593-20201112135516179-1610282830.png) 這裡 Docker 容器中多了一個剛才新建的 docker-tutorial 容器,並且執行在 80 埠。 那麼我們來訪問一下這個 Docker 應用,通過該容器右側的開啟瀏覽器或者輸入 `http://localhost/` 進行訪問: ![](https://img2020.cnblogs.com/other/1218593/202011/1218593-20201112135517215-380191397.png) 恭喜你,已經執行成功了! #### 命令列執行 客戶端操作只是輔助,命令列才是精髓,學習 Docker 我們也要記住常用的命令,其實我們剛才新建容器、執行容器都是通過這條命令一次完成的: > docker run -d -p 80:80 docker/getting-started 這樣就等同於基於映象新建容器、再執行該容器。 簡單解釋下各個引數的意思: ![](https://img2020.cnblogs.com/other/1218593/202011/1218593-20201112135517672-1138170042.png) 也可以縮簡成: > docker run -dp 80:80 docker/getting-started 所以還是以這個映象為例,先在客戶端停掉該容器,然後再用命令來啟動下: ``` $ docker run -dp 80:80 docker101tutorial 9df38488adcc2a53dad65691854ffc603e1fb3e25954183b83200809805b0d93 ``` 啟動成功會輸出該容器的 ID. 通過 `docker ps` 命令可以檢視所有正在執行中的容器: ``` $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9df38488adcc docker101tutorial "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp hopeful_gauss ``` 可以看到,我們的 docker101tutorial 容器又執行起來了,也可以正常訪問。 另外,通過 `docker ps -a` 命令可以檢視所有容器。 ## 四、結語 本文棧長簡單介紹了下 Docker 的基本概念,Docker 的安裝和啟動,以及第一個 Docker 應用的執行。 有了 Docker 映象,我們就能在任何安裝有 Docker 的機器上執行,不用再重複配置環境安裝依賴等,是不是很爽? Docker 公共倉庫中還有許多官方提供好的映象,如:Nginx、MySQL、Redis 等,都可以直接就能拿來用,所以,別再說 Docker 只是運維用的東西,和 Java 開發沒多大關係,用好它,我們開發效率槓槓的,也能提高我們的技術水平。 好了,第一個年輕人的 Docker 應用就到這裡了,後續棧長還會帶來更多 Docker 實用性的教程,比如 Spring Boot 的部署以及與 IDEA 的整合使用等,關注公眾號Java技術棧第一時間推送。 覺得不錯,在看、分享轉發一下,寫文章不易,需要你們的鼓勵,感謝各位老鐵們! > 版權申明:本文系公眾號 "Java技術棧" 原創,原創實屬不易,轉載、引用本文內容請註明出處,禁止抄襲、洗稿,請自重,尊重他人勞動成果和智慧財產權。 **近期熱文推薦:** 1.[Java 15 正式釋出, 14 個新特性,重新整理你的認知!!](http://www.javastack.cn/article/2020/java15-released/) 2.[終於靠開源專案弄到 IntelliJ IDEA 啟用碼了,真香!](http://www.javastack.cn/article/2020/intellij-idea-by-open-source-project/) 3.[我用 Java 8 寫了一段邏輯,同事直呼看不懂,你試試看。。](http://www.javastack.cn/article/2020/java-8-optional-map-do-you-know/) 4.[吊打 Tomcat ,Undertow 效能很炸!!](http://www.javastack.cn/article/2020/undertow-introduce-with-spring-boot/) 5.[《Java開發手冊(嵩山版)》最新發布,速速下載!](http://www.javastack.cn/article/2020/alibaba-release-java-develop-rules-songshan/) 覺得不錯,別忘了隨手點贊+轉發哦!