寫給 FE 同學的 Docker 入門指南

2022-01-10 58無線技術
1. 什麼是 Docker ?

"什麼是 Docker ?",網上有非常多的答案。

比較多的回答都會提到 "Docker" 借鑑了 "貨櫃" 思想。是說,沒有貨櫃的年代,碼頭貨運的物品經常會相互影響,比如食品和有毒物品裝一起,會導致食品受汙染。而 "貨櫃" 可以很好地實現貨物間隔離。

其實我們也可以說是借鑑了 "房地產" 思想。早期的智人,都是山洞裡群居,現在大家肯定無法接受,因為毫無隱私可言。

所以,"Docker" 的本質也可以說是解決了應用服務的 "隱私" 問題,實現進程、內存、文件、網絡之間相互隔離。

不過,對於 FE 同學而言,可以簡單把 Docker 理解成一種虛擬機就可以啦,很多應用服務可以像桌面軟體那樣一鍵安裝,免部署和環境配置啦。

1.1. FE 同學為什麼需要使用 Docker ?

我覺得有這麼幾個點,對 FE 同學比較受益

對於 Full Stack 工程師。Docker 可以提供一種簡單輕便的伺服器編程環境,而且可以隨用隨刪、降低環境配置成本。

很多 FE 日常工作中需要跟 Nginx、MongoDB、MySQL 等伺服器應用打交道。用 Docker 可以很容易部署一個測試環境,學習和倒騰.

四叔說:不懂運維的攝影師不是個好前端。

1.2. Docker 的安裝

各個平臺的 Docker 安裝可以參考官方文檔 https://docs.docker.com/v17.12/docker-for-mac/install/

簡單說下Mac 下的安裝,主要有兩個文件

2. 用前端思維分析 Docker

與 Git 的相關資料類似,Docker 的很多資料和文檔都是講解大片大片的命令行,非常乏味枯燥。

但是問題來了,要是大家都用命令行,那還要前端工程師幹神馬?

所以,本文主要還是 GUI 工具來操作,體驗一下 Docker 的基本功能。

2.1. Docker GUI 工具

Docker 官方提供的 Kitematic-Mac , 其實是基於 Electron + React 開發的,具備基本的操作功能,但是體驗比較一般。

今天我們主要使用 jetBrains 家的 IDE 中的 Docker 插件,簡單而又非常實用。

2.2. 使用 jetBrains Docker Plugin 安裝 Node

首先,需要啟動 Docker

然後,使用 Docker Plugin 連接 Docker,安裝 Node

添加 "Node Image"

添加兩個 "Node Container"

實際上剛剛是這樣一個流程

這個流程很像 npm 安裝包的操作

從 "Registry" 上下載 "Node Image",官方的 "Registry" 就是 "Docker Hub"。跟 NPM 一樣,也可以使用第三方 "Registry" 或 鏡像

Node 的 Image 會在本地存儲一份緩存,以便重複利用。實際上 "yarn" 也是採用了類似的機制緩存安裝包。

使用 "Node Image" 創建了 2個 "Node Container",這兩個 "Container" 之間互相隔離互不影響

2.3. 理解 Docker 的三個基本概念

在 Docker 中有三個概念

Container - 容器

Image - 鏡像

Registry - 倉庫

可以像下面這張圖來類比

"Container" 就是實際運行的應用服務,使用 "Image" 來描述依賴,而 "Registry" 上有大量公開的 "Image" 可以使用。

真的很像 NPM。

"Container" 和 "Image" 的依賴像下面這樣

2.4. 理解 Docker 的 CS 架構

Docker 其實是一個 Client / Server 架構,常用的 Docker Client,就是 Docker CLI,通過命令行與 "Docker Daemon" 交互,對 "Container" 和 "Image" 進行操作。

因為 Docker 本身也提供了 RESTful API,所以也可以通過數據接口與 "Docker Daemon"操作,所以也可以按照接口實現不同的客戶端。

3. Docker 的常用操作

Docker 提供了大量的接口可以操作 "Image"、"Container",很多功能其實並不常用,我們還是結合 GUI 工具,來看一些常見操作。

3.1 Container 的操作3.1.1. 創建一個 Container

上面是創建一個容器的基本信息,最主要的當然是確定使用的 "Image"。

等效的命令是

docker run --name node1 node:latest

其他幾個比較重要的信息

Command : 決定 Container 啟動後運行的命令

Bind Ports : 用於綁定 Container 和宿主機器的埠映射。因為默認 Container 與外部是網絡隔離的,需要映射埠,外部才能訪問到 Container 中的服務

Bind Mounts : Container 中的讀寫層無法實現持久化,有點類似前端裡面的 SessionStorage, 想要持久化,要麼映射到宿主的文件系統,要麼需要映射到 卷(這是另外一個重要概念)

3.1.2. 埠映射

上面的操作實現了

host:8080 => container:80

這樣通過宿主機的 8080 埠即可訪問到容器中的服務

3.1.3. Container 的其他操作

其中,我們經常需要使用 Exec 進入容器進行交互操作。

3.2 Image 的操作

我們主要是通過 Docker Hub 或其他 Registry 來下載 Image, 當然,我們也可以製作自己的 Image 發布到 Registry 中。不過自己製作 Image 超出了本文的分享範圍。簡單列一下幾個 GUI工具上的常見操作

4 Docker 實戰演示

使用 ghost 搭建一個博客

參考 ghost docker 的配置說明,https://hub.docker.com/_/ghost/

將埠映射為 8080 上, ghost docker 默認是 2368

第一步:pull 鏡像

第二步:選擇鏡像

第三步:創建容器

訪問 http://localhost:8080/

當然,如果你會命令行就更好啦,其實只需要一句(😂)

docker run -p 8080:2368 --name ghost ghost:latest

5. 參考

《Docker — 從入門到實踐》 - https://docker_practice.gitee.io/

《docker-cheat-sheet》 - https://github.com/wsargent/docker-cheat-sheet/tree/master/zh-cn

《Docker開發指南》(Using Docker Developing and Deploying Software with Containers)- 英 Adrian Mouat 著 - 人民郵電出版社

《Docker Engine API文檔》 - https://docs.docker.com/engine/api/v1.39/#

相關焦點

  • Docker極簡入門
    二、Docker容器的安裝與入門1.Docker的安裝過程很簡單,本次試驗是在CentOS7.4中進行的,因此不存在內核版本及系統平臺不支持的情況。[root@ChatDevOps ~]# docker start dfd4fe17d6cedfd4fe17d6ce[root@ChatDevOps ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESdfd4fe17d6ce httpd "/bin/bash" 4 hours ago Up
  • Docker 數據持久化Volume
    有如下幾種方式來使用 data volume:(1)使用 「-v 容器內目錄」 形式docker run -d -v /data centos /bin/bash使用 docker inspect 命令可以看出,Docker 將本地一個 _data 目錄 mount 為容器內的 data目錄了:"Mounts": [
  • docker日常使用指南
    這一些坑,大部分情況下都能通過docker這個工具幫我們方便的解決。因此學習docker是比較有價值的,同時,docker的使用也非常的簡單,核心的命令比較少。本文對自己使用中用到的一些方式進行總結,一些理解可能不完全正確,更詳細的可以去看官方文檔。1.基礎知識1.1 docker是什麼docker是一種容器技術,是一種沙盒技術。
  • Docker 最初的2小時(Docker從入門到入門)
    一個典型的運行流程如下:1. client用pull命令從倉庫把image拉到Docker hostdocker pull的格式是:docker pull[選項] [Docker Registry地址]  <倉庫名>:<標籤名>默認地址是 DockerHub。
  • Docker入門為什麼可以這麼簡單?
    這篇我來講講Docker入門的相關概念和常用的命令,跟大家一起入門Docker!Docker一、Docker相關術語一般從零學習一門技術(語言),都是從HelloWorld開始的,但這次我偏不。 docker-common docker-selinux docker-engine安裝Docker需要的依賴軟體包:// 安裝Docker需要的依賴軟體包:yum install -y yum-utils device-mapper-persistent-data lvm2設置stable鏡像倉庫(
  • Docker環境配置指南!
    今天就梳理下,如何入門Docker。一、本地環境安裝docker工具ubutun安裝這裡以阿里雲ECS(ubutun)下安裝docker為例。命令行安裝:sudo apt install docker.io驗證:docker infoMac安裝下載MAC版本的docker:
  • 宋寶華:Docker 最初的2小時(Docker從入門到入門)
    -aG docker $USER為了裝逼需要,我們在docker hub網頁註冊一個用戶名,我註冊的用戶名是21cnbao。client與docker host上面的docker daemon通信。當然docker client和host可以運行於一臺機器(我們做實驗的時候是一臺),默認的docker倉庫是Docker Hub。
  • CoreOS實踐指南(七):Docker容器管理服務
    【編者按】在「漫步雲端:CoreOS實踐指南」系列的前幾篇文章中,ThoughtWorks的軟體工程師林帆主要介紹了CoreOS及其相關組件和使用。說到CoreOS,不得不提Docker。當Docker還名不見經傳的時候,CoreOS創始人Alex就憑著敏銳直覺,預見了這個項目的價值,將Docker做為了這個系統支持的第一套應用程式隔離方案。
  • docker容器dockerfile詳解
    0.0s => => naming to dockerhub.com/nginx:v2dockerfile格式1、注釋一個標準的dockerfile,注釋是必須的。#這dockerfile目前支持以下兩個解析器指令:•syntax•escape2.1syntax此功能僅在使用BuildKit[4]後端時可用,在使用經典構建器後端時會被忽略。
  • docker exec 失敗問題排查之旅
    這篇文章學習的重點:kubelet,docker-shim,dockerd,containerd,containerd-shim,runc 直接的關係排查方法:如何使用 docker,containerd-ctr,docker-runc 連接容器問題描述今天,在值班排查線上問題的過程中
  • 【擁抱容器】:Docker 與 K8s 的入門課實戰系列課程總結
    不管你是想要複習,還是因故未能參加,還是中途缺席課程的,都可以戳以往的文章回顧學習哦~:👇👇👇【活動回顧】容器實戰:Docker 基礎入門講座實錄 | 擁抱容器:Docker 集群入門與實戰(上)講座實錄 | 擁抱容器:Docker 集群入門與實戰(下)【活動回顧】擁抱容器:Python web開發及其與
  • Dockerfile使用入門
    使用Dockerfile生成鏡像,並掛載數據卷編寫Dockerfile 注意:命令單詞全部大寫
  • Docker —— 從入門到實踐
    在線閱讀:https://www.gitbook.io/book/yeasy/docker_practice。維護本書的Github項目: https://github.com/yeasy/docker_practice。 歡迎大家參與。本書發布時,Docker的最新版本為1.20。
  • 【Docker】超詳細基礎教程-上篇
    start docker# 設置開機自動啟動systemctl enable docker# 測試docker run hello-worldDocker官方的中央倉庫: 這個倉庫是鏡像最全的,但是下載速度較慢。
  • Docker 入門到實戰教程(六)Docker數據卷
    file2.2 掛載數據卷兩種掛載方式:docker run --name 容器名 -it --mount source=卷名,target=容器內絕對路徑(掛載點) 鏡像名docker2.2.1 -mountdocker run -d -P --name test-web -mount source=my-vol,target=/webapp training/webapp python app.py2.2.2 -v掛載docker run -d -P --name test-web
  • Docker 入門到實戰教程(五)構建Docker鏡像
    認證信息上會被保存(保存於$HOME/.docker/config.json文件),以便之後使用。退出登錄可以使用docker logout命令。docker commit提交前,先退出容器:2.2 提交更改提交時要通過容器名或容器ID指定所要提交的容器,並要指定一個目標倉庫和鏡像名。docker commit提交時比較輕量,只會提交創建容器的鏡像與容器當前狀態之間有差異的部分。
  • docker 門外初體驗——docker 安裝(一)
    二、安裝三、驗證四、總結前言重寫對docker的學習記錄,最主要的原因之一,花了大量的時間進行學習,形成一個從0至1的認識,但是工作中卻沒見有實際應用,導致所學的知識存活率很低,也為了豐富自身的技術體系一、docker是什麼?Docker 是一個開源的應用容器引擎。
  • 雲計算核心技術Docker教程:Docker Compose yml常用配置指令簡介
    Docker Compose 默認使用文件名 docker-compose.yml,例如以下就是一個docker-compose.yml文件示例:version:指定本 yml 依從的 compose 哪個版本制定的services:用於定義不同的應用服務,上例中分別定義了兩個服務
  • Docker 快速入門之 Dockerfile
    ├── 222746e5vh38d7ey3leyps.jpg│   ├── 88x31.png│   ├── archlinux-splash.png│   ├── bdshare.css│   ├── Best-Linux-Markdown-Editors.png│   ├── core.js│   ├── docker-icon.jpg
  • 【長篇博文】Docker學習筆記與深度學習環境的搭建和部署(二)
    官網地址:http://www.docker.com支持的系統:Mac, Windows功能特性:1.3、Lazydocker + 僅介紹Lazydocker 是開源,是終端 UI 的形式。,執行如下命令即可: docker pull rancher/rancher注意:等價概念docker pull rancher/rancher==docker.io/rancher/rancher:latest