年輕人的第一個 Docker 應用,大大提高生產力!
阿新 • • 發佈:2020-11-12
上一篇:[年輕人的第一個 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/)
覺得不錯,別忘了隨手點贊+轉發哦!