# Docker 入門與實戰 [TOC] ## 1.1 什麼是Docker 1. 基於Go語言實現的**雲端技術開源專案** 2. Docker引擎的基礎是Linux容器(LXC)技術。 3. 提供各種容器管理工具(如分派、版本管理等)。 4. 使用者操作Docker容器,就像操作<font color=red>**一個輕量級的虛擬機**。</font> 5. ## 1.2 為什麼要使用Docker 1. 伺服器搬移往往需要重新部署和設定調整。Docker提供把應用程式包在容器裡,搬移到其他伺服器可以直接啟動 2. Docker幾乎可以再任意的平台上運行,包括實體機、虛擬機、公有私有雲、個人電腦、伺服器等。 3. 和虛擬器比較:較快、所需資源需求少、類似git的簡單操作、透過dockerfile設定檔彈性高。 ## 2.1 基本概念 - 映像檔(Image) 可將它視為一個專屬於Docker引擎的**唯讀**模板,包含了檔案系統。 例如:一個Ubuntu映像檔(包含一個完整的Ubuntu環境)等。 - Docker容器(Container) 類似一個輕量級沙箱,Docker放用容器來運行和隔離應用, 容器是用Image所創造出來的Instance(執行實力),可以將其建立、開始、停止、刪除 可以把容器看作一個簡易版的Linux系統環境 - Docker Repository(倉庫) Docker集中存放Image的場所。 分為公開和私有兩種形式。 例如:Docker hub ## 2.2 安裝Docker ## 3.1 取得Image 取得最新的Ubuntu作業系統映像檔範例 ```shell= sudo docker pull ubuntu sudo docker pull ubuntu:14:04 #指定版本 ``` 下載後,利用該Image建立一個容器,在其中執行bash程式 ```shell= sudo docker run -t -i ubuntu /bin/bash root@fe7fc4bd8fc9:/# ``` ## 3.2 查看Image資訊 各欄 - 倉庫來源 - Image標籤資訊 - Image ID號 - 建立時間(SHA-1 Hash針對Image做checksum的唯一編碼)。 - Image size ```shell= sudo docker images # 查看有什麼Image(同一個有別名的都會列出來) sudo docker inspect [ID] # 查看完整資訊 => JSON ``` ## 3.3 搜尋Image ```shell= sudo docker search mysql # 搜尋具有mysql關鍵字的Image(搜尋玩就可以知道要載哪一個了?) ``` ## 3.4 刪除Image ```shell= sudo docker rmi [TIMAGE ID or Tag Name] ``` 查看**本機**上存在的Image ```shell= sudo docker ps -a ``` Image仍在使用無法刪除,強制刪除(使用-f參數)(暴力不推薦) ```shell= sudo docker rmi -f ubuntu ``` 先刪掉該Image相關的Container(好的作法) ```shell= sudo docker rm e81 # [Container ID的前幾碼] ``` ## 3.5 建立Image 啟動一個Image => 進行修改(比如新增一個test檔)=> commit建立新的Image ```shell= $ sudo docker run -ti ubuntu:14.04 /bin/bash root@a925cb40b3f0:/# touch test root@a925cb40b3f0:/# exit $ sudo docker commit -m "Added a new file" -a "author info" a925cb40b3f0 test $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE test latest a925cb40b3f0 4 seconds ago 225.4 MB ``` ## 3.6 儲存及載入Image 把本機Image另存為.tar檔 ```shell= sudo docker save -o ubuntu_14.04.tar ubuntu:14.04 ``` 載入 ```shell= sudo docker load < ubuntu_14.04.tar ``` 儲存載入並傳到雲端 ```shell= sudo docker save ubuntu:latest | ssh ubuntu@REMOTE-SERVER sudo docker load ``` ## 3.7 上傳映像檔 傳到Docker Hub 把本機的Image加新標籤在上傳 ```shell= sudo docker tag test:latest user/test:latest sudo docker push user/test:latest # push 之後會請你login ``` ## 4.1 建立Container ```shell= docker run --name createAContainerName -d -p 8080:80 myImageName:myImageTags # -d 是讓docker在後端運行 ``` ## push 上去dockerhub [參考資料](https://ithelp.ithome.com.tw/articles/10192824) ```shell= ```