快速打造個人化的開發環境

事情總是不如想像中那樣簡單......

以為一行指令就能完成的事情

卻總是遇到 dependency 的問題

Just a Client-Server Application

Linux Container

aufs

Base Image

簡單來說就是根目錄架構

Above Base Image

Dockfile

部署 Docker image的檔案

Registry

存放 images 的倉庫

就像 github repository

Docker hub 即預設Registry
 

Docker的運作

images & Containers


# 所有 image 清單
docker images

# 刪除 image
docker rmi <image id>

# 建立 ./Dockerfile 的 image
docker build .

# 建立 ./Dockerfile 的 image 但會刪除過程中的 container
docker build --rm . 

# 不使用 cache 建立 image
docker build --no-cache . 

# 結合以上兩行指令
docker build --rm --no-cache -t base . 

# 建立完以後給他一個 tag asdc/base
docker build -t asdc/base . 

# 匯出 / 匯入 image
docker export <CONTAINER ID> > <image name> / cat [tar file] | docker import - <image name>

# 保存 image
docker save <image name> / docker load <image name>
# 執行中的 container 的清單
docker ps

# 列出所有 container 的清單
docker ps -a

# 刪除 continer
docker rm <container id>

# 跑 base image,會產生一個 container
docker run base 

# 跑 base image 並指定指令
docker run base /bin/ping www.google.com 

# 用 daemon 模式跑
docker run -d base /bin/ping www.google.com 

# (i)nterative (t)ty 跑 bash 就等於是進去他的 shell
docker run -i -t base /bin/bash 

# 跑完以後自動把這個 container 砍掉,注意 --rm 和 -d 無法同時下
docker run --rm base /bin/ping www.google.com 

# 把 Host 的目錄 mount 到 docker container 的目錄
docker run -v /host/folder:/docker/folder base

# attach 回某個 container, 如果跑的時候不是給 -d -i -t /bin/bash 的話是不能下指令的
# ctrl + c 會跳出。但如果是 -d -i -t /bin/bash ctrl + c 會 stop 整個 container. 
# 在此情況下不想停止 container 只想跳出請用 ctrl + p, ctrl + q
docker attach <container id> 

# 組合技,這樣可以用 docker attach 回去 shell
docker run -dit base /bin/bash 

一張圖表示Docker所有指令

一個跟Github很像的東西

常用指令

# 下載 image
docker pull

# 上傳 image
docker push

# 由 container 製作新的 image
docker commit

# 觀看 container 的改變
docker diff

建立Dockerfile

# FROM: 指定 base image
FROM ubuntu:trusty
# MAINTAINER: 作者署名
MAINTAINER Feng Honglin <hfeng@tutum.co>

# RUN: 執行指令
RUN apt-get update && \
    apt-get install -y nginx && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

RUN echo "daemon off;" >> /etc/nginx/nginx.conf
# ADD: 從本地端的目錄複製新的檔案到 container 的目錄
# format ADD <src> <dest>
# (和 COPY 雷同但 ADD 的<src>可以是URL)
ADD sites-enabled/ /etc/nginx/sites-enabled/
ADD app/ /app/

# EXPOSE: 指定listen的port
EXPOSE 80

# 指定Instance啟動後所要執行的指令
CMD ["/usr/sbin/nginx"]
# 常見的還有=>
# ENV: 環境變數設定
# WORKDIR: docker 執行的目錄

範例為tutumcloud/nginx的Dockerfile

Vagrant + Docker

讓 Docker 可作為 Provider 和 Provisioner

可解決 OS X & windows 資料夾共享和網路等問題

完全取代 boot2docker 工具

搭配 fig 簡化設定

已宣布支援

AWS Elastic Beanstalk
Google Computer Engine

VMware

Microsoft

......

如果以上這些都弄懂了

那你就是系統組的一員了!

系統組強烈招生中~!!!

Copy of Docker

By social4hyq

Copy of Docker

  • 831