Agenda
- Foreword
- Introduction
- Concept
- Run Docker
Foreword
研究 Docker 的起因
- 虛擬機每次要重新建置一樣的環境,需要很長的時間
- 虛擬機比較難模擬真實環境,因資源需求較高
- 承上,虛擬機執行的數量會受限於本機資源
- 環境一旦複雜,設定會很困難。
Introduction
- Docker 能做什麼事
- Docker 怎麼辦到的
虛擬機能做的幾乎都能做得到
- 隔離應用
- 儲存在發布
- 具備可攜性
- 環境即程式碼
Concept
映像檔 - Image (git log/Vagrant Box)
容器 - Container (Staging / Running VM)
倉庫 - Repository (GitHub /VagrantCloud)
使用 Docker Container 很像虛擬機
- 虛擬 IP、Port Forwarding…
管理 Docker Image 的觀念很像 Git
- commit、pull、push…
Run Docker
Installation
- Linux 懶人安裝指令
$curl -sSL https://get.docker.com/ | sudo sh
- Windowss 10 和 Mac 也都能直接裝(since 1.12)
Commands
Command | Note |
---|---|
docker pull | 下載映像檔 |
docker images | 看目前有哪些映像檔 |
docker rmi | 刪除映像檔 |
docker run | 建立容器並執行指令 |
docker start/stop/restart | 操作容器 |
docker ps | 看目前有哪些容器正在執行 |
docker rm | 刪除容器 |
Command - Hello world
$docker run -d nginx
$docker run -d nginx:1.11-alpine
$docker images
$docker ps
$docker stop
$docker rm
Command - Port forwarding
$docker run -d --name my-nginx -p 0.0.0.0:8080:80 nginx
# --name: 容器名稱
# -p: 設定連接port,格式[hostIP]:[hostPort]L[ContainerPort]
$docker stop my-nginx
$docker rm -f my-nginx
# 加入 -f 才能把正在執行的容器刪除
Command - Run PHP command
$docker -run --rm -it php php -v
--rm: 執行完指令就把容器刪除
-it: 開啟互動和終端機輸出,執行過程中有輸入就需要這兩個選項
php: 映像檔,沒有tag的話,預設會用 latest 版本
php -v: 要在容器執行的命令
Command - Run local programn
$echo "" > hw.php
$docker run -v `pwd`:/var/www/html php php /var/www/html/hw.php
# -v: 掛載檔案到容器,參數格式 [/host]:[/container]
# php /var/www/html/hw.php: 執行 php
# -w path 更改工作目錄
Command - Environment
$docker run -d -p 0.0.0.0:3306:3306 -e MYSQL_ROOT_PASSWORD=passwrod mariadb:5.5
# -d: 背景執行
# -e: 設定環境變數
$docker logs
# 即可看到背景執行時的 狀況
Command - Link
$docker run -d --name cache -d memcached
$docker run -d --name my-nginx --link cache:c nginx
$docker exec -it my-nginx bash
# apt-get install telnet
# telnet c 11211
# --Link: 連接到某個容器,格式 [容器名]:[別名]
Conclusion
- Docker 可快入建立一個以定義好的環境
- 開發與測試非常適合使用
Troubleshooting
# Add the docker group if it doesn't already exist:
$sudo groupadd docker
groupadd: group 'docker' already exists
# Add the connected user "[USER]" to the docker group.
# Change the user name to match your preferred user if you do not want to use your current user:
$sudo gpasswd -a [USER] docker
Adding user [USER] to group docker
$newgrp docker
$docker run hello-world