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

Java技術棧發表於2020-11-12

上一篇:年輕人的第一個 Spring Boot 應用!

哈哈,標題我抄了雷總的,不重要哦,重要的是 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

下載 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 選單進入。

通過控制檯可以進行容器、映象的管理、設定等。

總之 Docker 的安裝和啟動都非常簡單,不同的系統環境都可以輕鬆完成。

四、第一個 Docker 應用

熟悉 Tomcat 的朋友都知道,Tomcat 安裝後 Webapp 下面會自帶一些 Web 專案。關於 Tomcat 系列教程可以關注公眾號Java技術棧搜尋閱讀。

Docker 也是如此,Docker 安裝完後也會自帶一些映象,可以在控制檯中看到,也可以使用docker images 命令檢視本地所有 Docker 映象。

如下圖所示,切換到 Images:

Docker 自帶了一個 docker tutorial 映象,這是一個學習 Docker 的嚮導映象,本身是一個 Web 應用的映象,怎麼把它啟動起來呢?

映象只是一個只讀的靜態檔案,不能執行,容器才是映象的執行例項,所以需要新增一個容器來執行。

客戶端執行

最簡單的方法是點選該映象右邊的執行按鈕:

在上面的對話方塊中填寫容器的必要資訊,如這裡容器的埠和對映本機的埠都是 80,最後點選執行按鈕。

這裡 Docker 容器中多了一個剛才新建的 docker-tutorial 容器,並且執行在 80 埠。

那麼我們來訪問一下這個 Docker 應用,通過該容器右側的開啟瀏覽器或者輸入 http://localhost/ 進行訪問:

恭喜你,已經執行成功了!

命令列執行

客戶端操作只是輔助,命令列才是精髓,學習 Docker 我們也要記住常用的命令,其實我們剛才新建容器、執行容器都是通過這條命令一次完成的:

docker run -d -p 80:80 docker/getting-started

這樣就等同於基於映象新建容器、再執行該容器。

簡單解釋下各個引數的意思:

也可以縮簡成:

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 個新特性,重新整理你的認知!!

2.終於靠開源專案弄到 IntelliJ IDEA 啟用碼了,真香!

3.我用 Java 8 寫了一段邏輯,同事直呼看不懂,你試試看。。

4.吊打 Tomcat ,Undertow 效能很炸!!

5.《Java開發手冊(嵩山版)》最新發布,速速下載!

覺得不錯,別忘了隨手點贊+轉發哦!

相關文章