[ Docker ] 一日入門篇

Docker
  - OS層級的虛擬化
    - OpenVZ (X
    - LXC     ( Linux Container )
    - Docker (O

Docker暫時無法取代VM

Docker解決的問題
    - 各種技術SDK版本與開發環境與production環境錯綜複雜的問題..

Docker VS VM
  - 差異在Docker少了 GuestOS

一個container只裝一個process (db/ redis/ nodejs application .. etc)

docker commit 盡量少用, reuse不方便
  - 改用dockerfile


  • docker run -dti 
  •   - t: terminal
  •   - i: interactive
  •   - d: daemon mode (跑到背景, 此容器會一直活著
  •   - p: port mapping (host port 對應到 container port)
    • docker run -p 80:80 nginx
  •   - P: port 直接binding
  •   --name
    • docker run -d -p 80:80 --name web nginx
  • --rm container結束後馬上刪除
    • docker run -ti --rm -p 80:80 --name web nginx 
      • (啟nginx原本自己的指令)
    • docker run -ti --rm -p 80:80 --name web nginx bash
      • (不啟動nginx,只啟動bash)


Old method (少用)
從容器內跳出來但不終止容器
Control p + Control q (Control 一直按著
跳回去都用 docker attach CONTAINER_ID

New method
docker run -dti busybox sh             # 把容器放到背景去執行
docker exec -it CONTAINER_ID sh  # 透過exec登入容器

Create Docker Image


Example:
類似將image dump出來跟restore回去
docker save busybox > busybox.tar
docker load < busybox.tar

Health Check
docker build . -f Dockerfile.health -t neil/health # -t: tag

Dockerfile Practice

  • 檔名不需為 Dockerfile
  • 可以使用.dockerignore 或是不用

  • ADD 
    • 會解開tar file
    • 可以使用外部的檔案
  • COPY
    • 不會解壓縮, 只能用local的檔案
  • CMD or ENTRYPOINT
    • CMD可以被參數蓋過去
    • ENTRYPOINT無法被蓋過去
  • ONBUILD
  • EXPOSE and USER
  • WORKDIR(容器起來要跑在哪個目錄) and ENV

Network
docker 不要用 link (link最好只用在本機端)
直接使用network本機遠端兩相宜

docker network ls
docker network inspect bridge
docker run -itd --name container1 busybox
docker run -itd --name container2 busybox
docker network create vlan_1
docker network inspect vlan_1 ->會多一個subnet -> 會多一張bridge網卡
有加入到vlan的container, 會內建dns, 可以解析container name!
沒有加到vlan的container, 只能ping同網段的container, 無法ping container name

(補充: 不同的subnet如果沒有做forwarding, 是無法ping到對方的)


docker volume存在 -> /var/lib/docker/volumes

安裝Docker Composer
  • sudo curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  • sudo chmod +x /usr/local/bin/docker-compose
Docker-compose是靠寫 yml 啟動
  • docker-compose up -d #daemon mode, 該目錄底下有docker-compose.yml




docker volume create compose







https://github.com/philipz/basic_docker_workshop/tree/master/Section_9

留言

這個網誌中的熱門文章

[翻譯] 介紹現代網路負載平衡與代理伺服器

Grafana K6

Linux 事件驅動筆記