台灣人工智慧學校 第四屆 開學典禮
今天 AI 學校開學,非常特別像參加研討會一樣,開場介紹孔祥重校長和陳昇瑋執行長為什麼會創建這間學校,主要是他們發現AI技術可以幫助產業界解決很多問題,但是人才問題嚴重,希望透過一年三期每期500左右的規模並在北中南都有分校,來幫台灣訓練AI人才,讓已經是各行各業的專家,透過短短四個月的密集訓練,幫助專家可以把AI技術帶回去,解決和協助各企業的問題.
台灣有兩個優勢製造業和醫療健保,這兩塊都可以大量的運用AI技術來幫助他們解決很多的問題,早上兩位Keynote分別是李友專院長-AI醫療大未來和廣達電腦的張嘉淵技術長-開創台灣產業智慧轉型的新契機,都帶給我很大的衝擊,讓我看到AI的藍圖,原來AI有這麼多的應用場景,有這麼多的題目可以嘗試,感覺有很多好玩的可以玩XD!
下午陳昇瑋執行長為我們講解-人工智慧民主化在台灣,從AI的發展史第一波邏輯推理、第二波知識表達到現在的第三波機器學習講起,一步步引導我們暸解AI技術的發展到應用,學校主要教導的是機器學習(Machine Learning),從基礎的分辨數字到現在的人臉辨識,透過各種數學模型讓電腦把事情做得比人類還要好,讓電腦來幫我們解決問題,其中還介紹各種的應用範例,都一次次的啟發我的想像力,每一個範例都讓我覺得「哇~好酷!」,讓我有種迫不及待的想要玩玩看.
最後還有上一屆的成果發表,看到學長姐的實作,都覺得好酷;還有產業分組交流,也和一些同學交換名片,期待未來的學習.
Pellok Devops 天堂路
2019年2月23日 星期六
2019年2月19日 星期二
Docker 教學
Docker 教學
Containers as a Service ( CaaS ) - 容器如同服務
Docker 是一個開源專案,出現於 2013 年初,最初是 Dotcloud 公司內部的 Side-Project。
它基於 Google 公司推出的 Go 語言實作。( Dotcloud 公司後來改名為 Docker )
Docker 是一個開源專案,出現於 2013 年初,最初是 Dotcloud 公司內部的 Side-Project。
它基於 Google 公司推出的 Go 語言實作。( Dotcloud 公司後來改名為 Docker )
Agenda
- 基本介紹 - 映像檔、容器、倉庫
- 指令說明 - 安裝、指令
- Dockerfile 說明
- 進階應用 - docker compose
- 進階應用 - docker machine
- 實際案例
基本介紹
什麼是容器技術Container: 應用程式為中心的虛擬化
Docker 歷史
1982年Unix系統內建的chroot機制
LXC 利用controler groups 與namespaces的功能, 提供應用軟體一個獨立的作業系統環境
2013 Linux之父Linus Torvalds 發布Linux核心3.8版 支援Container技術
2013 dotCloud公司將內部專案Docker開源釋出程式碼
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 --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
REPOSITORY:倉庫位置和映像檔名稱
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 目錄下面
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:容器名稱
-a:顯示全部的容器
CONTAINER ID:容器ID
IMAGE:映像檔名稱
COMMAND:執行指令
CREATED:創建時間
STATUS:容器狀態
POSTS:開啟的Port號
NAMES:容器名稱
顯示容器的 log
docker logs -f 8a
logs : 參數說明 or docker logs --help 常用:
-f:不會跳出,會一直列印最新的log資訊
-f:不會跳出,會一直列印最新的log資訊
進入容器
docker exec -ti 8a /bin/bash
exec : 參數說明 or docker exec --help 常用:
-i :則讓容器的標準輸入保持打開
-t:讓Docker分配一個虛擬終端(pseudo-tty)並綁定到容器的標準輸入上
-e:設定環境變數(AAA=BBB)
-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
Dockerfile 說明
- Dockerfile 由一行行命令語句組成,並且支援以 # 開頭的註解行。
- Dockerfile 分為四部分:
- 基底映像檔資訊
- 維護者資訊
- 映像檔操作指令
- 容器啟動時執行指令。
# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command] ..
# 基本映像檔,必須是第一個指令
FROM ubuntu
# 維護者: docker_user <docker_user at email.com> (@docker_user)
MAINTAINER docker_user docker_user@email.com
# 更新映像檔的指令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
# 建立新容器時要執行的指令
CMD /usr/sbin/nginx
####Dockerfile 基本語法
指令 | 說明 | 範例 |
---|---|---|
FROM : | 映像檔來源 | FROM python:3.5 |
MAINTAINER | 維護者訊息 | MAINTAINER docker_user docker_user@email.com |
RUN | 創建映像檔時執行動作 | RUN apt-get -y update && apt-get install -y supervisor |
RUN ["executable", "param1", "param2"] | 創建映像檔時執行動作 | RUN ["/bin/bash", "-c", "echo hello"] |
CMD command param1 param2 | 啟動容器時執行的命令 | CMD pserve development.ini |
CMD ["executable","param1","param2"] | 啟動容器時執行的命令 | |
CMD ["param1","param2"] | 啟動容器時執行的命令 | |
EXPOSE | 容器對外的埠號 | EXPOSE 8082 |
ADD | 複製檔案(單檔) | ADD requirements.txt /usr/src/app/ |
COPY | 複製檔案(資料夾) | COPY . /usr/src/app |
ENV | 環境變數 | ENV PG_VERSION 9.3.4 |
ENTRYPOINT command param1 param2 | 指定容器啟動後執行的命令 | |
ENTRYPOINT ["executable", "param1", "param2"] | 指定容器啟動後執行的命令 | ENTRYPOINT ["/docker-entrypoint.sh"] |
VOLUME ["/data"] | 掛載資料卷 | VOLUME /var/lib/postgresql/data |
USER daemon | 指定運行使用者 | RUN groupadd -r postgres && useradd -r -g postgres postgres |
WORKDIR /path/to/workdir | 指定工作目錄 | WORKDIR /usr/src/app |
ONBUILD [INSTRUCTION] | 基底映像檔建立時執行 | ONBUILD COPY . /usr/src/app |
RUN 當命令較長時可以使用 \ 來換行。
RUN : 在 shell 終端中運行命令,即 /bin/sh -c;
RUN ["executable", "param1", "param2"] : 使用 exec 執行。
RUN : 在 shell 終端中運行命令,即 /bin/sh -c;
RUN ["executable", "param1", "param2"] : 使用 exec 執行。
CMD 指定啟動容器時執行的命令, 每個 Dockerfile 只能有一條 CMD 命令 。
如果指定了多條命令,只有最後一條會被執行。
CMD ["executable","param1","param2"] 使用 exec 執行,推薦使用;
CMD command param1 param2 在 /bin/sh 中執行,使用在給需要互動的指令;
CMD ["param1","param2"] 提供給 ENTRYPOINT 的預設參數;
如果指定了多條命令,只有最後一條會被執行。
CMD ["executable","param1","param2"] 使用 exec 執行,推薦使用;
CMD command param1 param2 在 /bin/sh 中執行,使用在給需要互動的指令;
CMD ["param1","param2"] 提供給 ENTRYPOINT 的預設參數;
ENTRYPOINT:每個 Dockerfile 中只能有一個 ENTRYPOINT,當指定多個時,只有最後一個會生效。
USER:要臨時取得管理員權限可以使用 gosu,而不推薦 sudo。
WORKDIR:可以使用多個 WORKDIR 指令,後續命令如果參數是相對路徑,則會基於之前命令指定的路徑
USER:要臨時取得管理員權限可以使用 gosu,而不推薦 sudo。
WORKDIR:可以使用多個 WORKDIR 指令,後續命令如果參數是相對路徑,則會基於之前命令指定的路徑
Docker File Base
# 映像檔Image
FROM python:3.5
# 維護者
MAINTAINER Pellok "pellok@double-cash.com"
# 更新
RUN apt-get -y update && apt-get install -y supervisor
# 創建專案資料夾
RUN mkdir -p /usr/src/app
# 指定工作目錄在專案資料夾
WORKDIR /usr/src/app
# 預先要安裝的requirements複製到Docker裡面
ADD requirements.txt /usr/src/app/
# 安裝需要用的插件
RUN pip install --upgrade pip setuptools
RUN pip install --no-cache-dir -r requirements.txt
# 下次Build 的時候複製專案目錄到Docker 裡面
ONBUILD COPY . /usr/src/app
建置
docker build -t sample:base .
Docker File for Project
# 挑選Image
FROM sample:base
# 安裝cryptography
RUN pip install cryptography
# 設定工作目錄
WORKDIR /usr/src/app/
# 執行Python Setup
RUN python setup.py develop
# 開啟Port號
EXPOSE 8082
# 執行專案
CMD pserve development.ini
建置
docker build -t project:v1 .
Pyramid 專案 Docker 化
#創建一個新專案
pcreate -s alchemy pyramid_dockerlize
cd pyramid_dockerlize
# 創建dockerfile
touch Dockerfile
# 編輯 Dockerfile
# 建置映像檔
docker build -t pyramid_dockerlize .
# 執行容器
docker run -d -P pyramid_dockerlize
Dockerfile
# This dockerfile uses the python pyramid
# VERSION 1 - EDITION 1
# Author: pellok
# Command describe
# 使用的python映像檔版本
FROM python:3.5
MAINTAINER pellok pellok@okborn.com
# 創建存放專案的資料夾
RUN mkdir -p /usr/src/app
# 複製當前目錄的所有檔案到容器內的,資料放在/usr/src/app
COPY . /usr/src/app
# 指定工作目錄
WORKDIR /usr/src/app/
# 安裝環境變數和相依性套件
RUN python setup.py develop
# 初始化DB
RUN initialize_pyramid_dockerlize_db development.ini
# 專案監聽的Port號
EXPOSE 6543
# 啟動專案
CMD pserve production.ini
參考
訂閱:
文章 (Atom)
台灣人工智慧學校第四屆開學典禮
台灣人工智慧學校 第四屆 開學典禮 今天 AI 學校開學,非常特別像參加研討會一樣,開場介紹孔祥重校長和陳昇瑋執行長為什麼會創建這間學校,主要是他們發現AI技術可以幫助產業界解決很多問題,但是人才問題嚴重,希望透過一年三期每期500左右的規模並在北中南都有分校,來...
-
什麼是DevOps DevOps(Development和Operations的組合詞)是一種重視「軟體開發人員(Dev)」和「IT運維技術人員(Ops)」之間溝通合作的文化、運動或慣例。透過自動化「軟體交付」和「架構變更」的流程,來使得構建、測試、發布軟體能夠更加地快...
-
Jenkins Jenkins是一款由Java編寫的開源的持續整合工具。在與Oracle發生爭執後,專案從Hudson專案復刻。 Jenkins提供了軟體開發的持續整合服務。它執行在Servlet容器中(例如Apache Tomcat)。它支援軟體配置管理(SCM)...
-
Docker 教學 Containers as a Service ( CaaS ) - 容器如同服務 Docker 是一個開源專案,出現於 2013 年初,最初是 Dotcloud 公司內部的 Side-Project。 它基於 Google 公司推出的 Go 語言實作。...