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的版本
建立images
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
- 建立資料夾
- 資料夾裡面的Dockerfile名稱一定要是Dockerfile(大小寫要一樣)
- 在終端機到資料夾目錄後,輸入
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
接著透過ls指令查看運行中的container
可以看到沒有,是因為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還是持續的在運行
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
使用結束後,
停止container
docker container stop [containerID]
列出所有container(不管有無運行)
docker container ls -a
清除container
docker container rm [containerID]
範例:
從開剛始到最後就可以看到container真的被清空了