2019年5月12日 星期日

Docker 教學-1 架構及指令


Docker 教學1 -轉貼IT邦教學筆記參考

Containers as a Service ( CaaS ) - 容器如同服務
Docker
是一個開源專案,出現於 2013 年初,最初是 Dotcloud 公司內部的 Side-Project
它基於 Google 公司推出的 Go 語言實作。( Dotcloud 公司後來改名為 Docker
Agenda
  • 基本介紹 - 映像檔、容器、倉庫
  • 指令說明 - 安裝、指令
  • Dockerfile 說明
  • 進階應用 - docker compose
  • 進階應用 - docker machine
  • 實際案例
基本介紹
什麼是容器技術Container 應用程式為中心的虛擬化
Docker 歷史
1982Unix系統內建的chroot機制
LXC
利用controler groups namespaces的功能, 提供應用軟體一個獨立的作業系統環境
2013 Linux
之父Linus Torvalds 發布Linux核心3.8 支援Container技術
2013 dotCloud
公司將內部專案Docker開源釋出程式碼
Containers(容器) vs Virtual Machines(虛擬主機)
Docker 三個基本概念

映像檔(Image
  • Docker 映像檔就是一個唯讀的模板。
  • 映像檔可以用來建立 Docker 容器。
容器(Container
  • 容器是從映像檔建立的執行實例。
  • Docker 利用容器來執行應用。
  • 可以被啟動、開始、停止、刪除。
  • 每個容器都是相互隔離的、保證安全的平台。
倉庫(Repository
  • 倉庫是集中存放映像檔檔案的場所。
  • 每個倉庫中又包含了多個映像檔。
  • 每個映像檔有不同的標籤(tag)。
  • 倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。




Docker指令說明 - 安裝、指令
docker --help




安裝Docker


Image 映像檔 常用指令
指令
說明
範例
search
搜尋
docker search centos
pull
下載
docker pull centos
images
列表
docker images
run
執行
docker run -ti centos /bin/bash
rmi [Image ID]
刪除
docker rmi 615cb40d5d19
build
建立
docker build -t member:1 .
login
登入
docker login docker.okborn.com
push
上傳
docker push


Search 搜尋 Centos 映像檔

docker search contos







欄位說明:
NAME:映像檔名稱
DESCRIPTION
:映像檔描述
STARS
:越多代表越多人使用
OFFICIAL
:官方Image
AUTOMATED
:自動化

顯示目前本機的 Images 列表
docker iamges







欄位說明:
EPOSITORY:倉庫位置和映像檔名稱
TAG
:映像檔標籤(通常是定義版本號)
IMAGE ID
:映像檔ID(唯一碼)
CREATED
:創建日期
SIZE
:映像檔大小


啟動容器
docker run -ti centos /bin/bash














run : 參數說明 or docker run --help 常用:
-i
:則讓容器的標準輸入保持打開
-t
:讓Docker分配一個虛擬終端(pseudo-tty)並綁定到容器的標準輸入上
-d
:背景執行
-e
:設定環境變數(AAA=BBB)
-p
Port 對應(host port:container port)
-v
:資料對應(host folder:container folder)
--name
:設定容器名稱


** 在執行RUN 映像檔時,如果沒有下載會先下載在執行 **









rmi : 刪除映像檔前要先移除所有Container
build :
使用build 指令時要先切換到Dockerfile 目錄下面
Container 容器 常用指令
指令
說明
範例
run
新建或啟動
docker run -d centos
start [Contain ID]
啟動
docker start a469b9226fc8
stop [Contain ID]
停止
docker stop a469b9226fc8
rm [Contain ID]
刪除
docker rm a4
ps -a
列表
docker ps -a
logs [Contain ID]
查看容器內的資訊
docker logs -f a4
exec [Contain ID]
進入容器(開新console)
docker exec -ti a4 /bin/bash
attach
進入容器(退出停止容器)
dockr attach a4
inspect
查看
docker inspect a4


範例:
啟動一個 Container 並且執行 ping google.com
docker run centos ping google.com
請動一個 Container 執行上面的動作,並背景執行








使用 查看 Container 指令
docker ps
docker ps -a
ps : 參數說明 or docker ps --help 常用:
-a
:顯示全部的容器





CONTAINER ID:容器ID
IMAGE
:映像檔名稱
COMMAND
:執行指令
CREATED
:創建時間
STATUS
:容器狀態
POSTS
:開啟的Port
NAMES
:容器名稱
顯示容器的 log
docker logs -f 8a
logs : 參數說明 or docker logs --help 常用:
-f
:不會跳出,會一直列印最新的log資訊












進入容器(可以看到容器資料結構)
docker exec -ti 8a /bin/bash
exec : 參數說明 or docker exec --help 常用:
-i
:則讓容器的標準輸入保持打開
-t
:讓Docker分配一個虛擬終端(pseudo-tty)並綁定到容器的標準輸入上
-e
:設定環境變數(AAA=BBB)





查看容器資訊
docker inspect 8a
















開啟容器到關閉容器
docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
db0e9dbb150596a3a89db056d0ecb765c54c3c2fb5d428e3b35fc20b55813862
docker logs -f db
docker ps -a
docker stop db
docker ps -a




















Registry 倉庫 常用指令
指令
說明
範例
commit
容器存檔
docker commit db aaa:v1
pull
下載
docker pull docker.okborn.com/okborn:base
tag
標籤
docker tag aaa docker.okborn.com/aaa
push
上傳
docker push docker.okborn.com/member:1
login
登入
docker login docker.okborn.com
export
匯出
docker export 7691a814370e > ubuntu.tar
import
匯入
cat ubuntu.tar sudo docker import - test/ubuntu:v1.0
對容器存檔
docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
96ea2a3f99e92ddd5fa0ec29f21d035703b6512f59c4f54fbaee551ee8fc044a
docker commit 96 aaa:v1





對映像檔打標籤
docker tag centos aaa asia.gcr.io/joyi-205504/aaa:v1





上傳到 GCP Registry
gcloud docker -- push  asia.gcr.io/joyi-205504/aaa:v1
其他常用指令
刪除
docker rmi `docker images|grep sele |awk '{print $3}'`
Dcoker 資料管理
資料卷(Data volumes
  • 資料卷可以在容器之間共享和重用
  • 對資料卷的修改會立馬生效
  • 對資料卷的更新,不會影響映像檔
  • 卷會一直存在,直到沒有容器使用
範例:建立一個 web 容器,並載入一個資料卷到容器的 /webapp 目錄
docker run -d -P --name web -v /webapp training/webapp python app.py
範例:本機的 /src/webapp 目錄到容器的 /opt/webapp 目錄
docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
範例:Docker 掛載資料卷的預設權限是讀寫,使用者也可以透過 :ro 指定為唯讀
docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
資料卷容器(Data volume containers
持續更新的資料需要在容器之間共享,最好建立資料卷容器。
一個正常的容器,專門用來提供資料卷供其它容器掛載的。
範例:建立一個命名的資料卷容器 dbdata
docker run -d -v /dbdata --name dbdata postgres echo Data-only container for postgres
範例:他容器中使用 --volumes-from 來掛載 dbdata 容器中的資料卷
docker run -d -P --volumes-from dbdata --name db1 postgres
docker run -d -P --volumes-from dbdata --name db2 postgres
範例:也可以從其他已經掛載了容器卷的容器來掛載資料卷。
docker run -d --name db3 --volumes-from db1 postgres
範例:備份
首先使用 --volumes-from 標記來建立一個載入 dbdata 容器卷的容器,並從本地主機掛載當前到容器的 /backup 目錄。
docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
範例:恢復
恢復資料到一個容器,首先建立一個帶有資料卷的容器 dbdata2
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
然後建立另一個容器,掛載 dbdata2 的容器,並使用 untar 解壓備份檔案到掛載的容器卷中。
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
Docker 中的網路功能介紹
  • 要讓外部也可以存取這些應用
  • 可以通過 -P -p 參數來指定連接埠映射。
範例:隨機本機Port
docker run -d -P training/webapp python app.py
範例:指定本機Port
docker run -d -p 5000:5000 training/webapp python app.py
範例:綁定 localhost 的任意連接埠到容器的 5000 連接埠,本地主機會自動分配一個連接埠
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
範例:還可以使用 udp 標記來指定 udp 連接埠
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
範例: -p 標記可以多次使用來綁定多個連接埠
docker run -d -p 5000:5000  -p 3000:80 training/webapp python app.py
































沒有留言:

張貼留言