Featured image of post Docker筆記(1)-基本

Docker筆記(1)-基本

認識Docker,名詞以及基本使用container還有images

Docker基本

參考來源:

https://hahow.in/courses/5df27f1fa5ee510022a08500/

https://blog.csdn.net/qq_21197507/article/details/115071715

https://github.com/twtrubiks/docker-tutorial

什麼是Docker

docker是一種容器化技術,問題的起源在於在多個APP在同一台主機的同一個系統上運行,只要有問題發生,所有APP會受影響,所有演變成了使用多個主機來完成(傳統模式),但這樣耗費量還是很大,所以就出現了虛擬機(VM模式),就可以達到保護功能,同時用一個主機就可以完成,但這些虛擬機在系統資源(VM、OS)的耗費量還是非常大,所以出現了Docker(容器模式),使用軟體的虛擬的空間來完成。

Docker三大功用

  • 簡化部署流程

在部署運行環境時,常常要進行環境安安裝,或是安裝指令,耗時又常常出錯,Docker可以把這些用指令變成程式部署包

  • 跨平台部署

無論在什麼系統下使用Docker的部署包都可以運行

  • 建立乾淨測試環境

將測試資料、資料庫安裝、安裝指令打包成資料庫部署包

當有了城市以及資料庫部署包之後,就可以快速運行全新的環境,也可以做安靜的安裝跟清空,不用擔心有殘留檔案的問題

名詞解釋

  • 鏡像(image)

    映像檔,可以把它想成是以前我們在玩 VM 的 Guest OS( 安裝在虛擬機上的作業系統 )。

    Image 是唯讀( R\O )

  • 容器(container) Docker利用容器技術,獨立運行一個或者一組應用, 通過鏡像來創建的 啟動,停止,刪除,基本命令! 就目前可以把這個容器理解為一個建議的linux系統

  • 倉庫(repository) 存放鏡像(image)的地方,可以把它想成類似 GitHub,裡面存放了非常多的 Image ,可在 Docker Hub 中查看。

安裝Docker

直接到官網無腦安裝docker-desktop(也可以安裝Docker ToolBox):

https://www.docker.com/products/docker-desktop

確認安裝

docker --version
docker-compose --version

終端機結果

➜  ~ docker --version
docker-compose --version
Docker version 20.10.12, build e91ed57
docker-compose version 1.29.2, build 5becea4c

在右上角的設定可以調整分配的資源(Docker Desktop):

其實MAC、WINDOWS安裝這些軟體都是為了在Linux底下運行,因為Docker的底層是Linux,如圖:

建立與使用Docker Images

首先要註冊Docker hub帳號,完成之後可以到首頁上方的搜尋案件搜尋hello-world

可以看到下面相關指令:

docker hello-word

先到遠端(Docker hub)下載hello-world檔案

docker pull hello-world
docker run hello-world

這個docker run等同於docker container runˊ指令

可以透過

docker images

查看本地有哪些image

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    18e5af790473   4 months ago   9.14kB

Docker hub雲端下載

透過pull指令可以指定版本號「tag」,只要是透過

docker pull [名稱]]:[版本號]

範例如下:

到https://hub.docker.com/r/uopsdod/course-image-first/tags可以看到有很多版本號,

下載最新的話依照網址的指示

docker pull uopsdod/course-image-first:latest

在查看目前有哪些images,tag就會顯示images的版本

tag
tag

建立images

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
  1. 建立資料夾
  2. 資料夾裡面的Dockerfile名稱一定要是Dockerfile(大小寫要一樣)
  3. 在終端機到資料夾目錄後,輸入
docker bulid -t [帳號名稱]/[images名稱] .

其中.的意思就是到目錄搜尋Dockerfile的檔案

上傳images

透過以下指令登入或登出:

docker login
docker logout

接著

docker push [帳號名稱]/[images名稱] 

即可上傳

刪除images

指令

Docker rmi [帳號名稱]/[images名稱] 

如果跳出訊息是有container在使用的話,就先移除container

docker rmi [container編號]

如果想要強制刪除(連同contaier)

docker rmi -f [帳號名稱]/[images名稱] 

可以透過docker images查看

Docker基本指令

查看目前所有container

Docker container ls

先抓取一個image下來

docker pull alpine
➜  ~ clear
➜  ~ docker container ls
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
➜  ~ docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
9b3977197b4f: Pull complete
Digest: sha256:21a3deaa0d32a8057914f36584b5288d2e5ecc984380bc0118285c70fa8c9300
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

接著啟用container運行剛剛抓的alpine image

docker container run --name [container] [images]

範例:

docker container run --name test01 alpine

或是加上 ls / 可以顯示出可以使用的指令

docker container run --name test01 alpine ls/ 

成功後可以到docker desktop看到in use

docker desktop畫面
docker desktop畫面

接著透過ls指令查看運行中的container

containerls

可以看到沒有,是因為container的運作機制是,當沒有程序一直運作,他會自動停止,所以要透過

Interactive mode

使用-it建造Interactive mode,讓程序持續運作某一個程序

docker run -it --name [container] [images] /[需要的指令]
docker run -it --name test02 /bin/sh

看到#代表成功進去container,可以再透過ls查看哪些可用的Linux指令, 在使用exit離開

結果
結果

Interactive mode 在exit時,也會因為沒有事情做而運行關閉,所以要讓他在背景運行,就使用-d 像是daemon服務

Container背景運行 -d

tail可以幫我們持續追蹤某個docker file的log,印到console上面

docker run -d --name [container] [images] tail -f [/運行目的地]
docker run -d --name test03 alpine tail -f /dev/null

在使用ls指令就可以看到剛剛啟用的container還在運行,

也可以透過指令進入container

docker exec -it [containerID] /bin/sh

接著不論在裡面做什麼事情,exit後container還是持續的在運行

背景運行
背景運行

docker desktop畫面
docker desktop畫面

port指令

首先下載nginx這個websever的images

docker pull nginx:latest

port mapping -p

-p的意思就是port mapping

-p [VM linux port]:[對應container的port]

所以這邊寫成:

docker run -d -p 8081:80 --name nginxtest  nginx

再透過ls指令可以看到port已經建立了

可以透過

echo $(docker-machine ip)

接著到瀏覽器輸入http://localhost:8081

welcome
welcome

使用結束後,

停止container

docker container stop [containerID]

列出所有container(不管有無運行)

docker container ls -a

清除container

docker container rm [containerID]

範例:

範例
範例

從開剛始到最後就可以看到container真的被清空了

comments powered by Disqus