[ 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
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
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 volume存在 -> /var/lib/docker/volumes
安裝Docker Composer
docker volume create compose
https://github.com/philipz/basic_docker_workshop/tree/master/Section_9
- 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 up -d #daemon mode, 該目錄底下有docker-compose.yml
docker volume create compose
https://github.com/philipz/basic_docker_workshop/tree/master/Section_9
留言
張貼留言