Docker 與 VM 的不同 與 Docker 指令
本文講述 Docker 與 VM 的不同 與 Docker 指令
重要觀念 Docker != Container
Docker 架構:
VM:
用來建立虛擬化運算環境的技術(OS層級虛擬化)
優點:
- 安全性較高,因為硬體層以上都虛擬化
- 可以選擇各種不同的 OS
缺點:
- Image大小通常為GB
- 啟動速度通常要花個幾分鐘
- 資源使用較多,因為要將一部分資源分給 VM 的作業系統
Container:
Docker 是個管理容器的服務,提供應用層級虛擬化技術。容器不像虛擬機要在 Host OS 上再安裝 Guest OS,而可以直接共用底層 Host OS 的資源,同時具備其應用程式沙盒的隔離性。
優點:
- Image大小通常為MB
- 啟動速度較快
- 能將更多資源運用在跑服務上
- 更新較為容易
缺點:
- 安全性較差
- 同一台機器中,每個 Container 的 OS 都是相同
Docker 參數:
docker -p <host端port:container端port>
docker -v <host_path:container_path>
Docker Command:
把 docker image 下載下來:
docker pull <image_name:version_Tag>
建立當前資料夾下的 docker-compose.yml
檔建立相對應的 container:
docker compose up -d
查看目前有在跑的 container 和 詳細資料:
docker compose ps -a
查看 container 目前有什麼在跑:
docker container ls
查看 container ID and 執行佔用 CPU or Memory …:
docker stats
執行 container:
docker run <container_ID or Container_name>
停止 container:
docker stop <container_ID or Container_name>
移除 container:
docker rm <container_ID or Container_name>
停止 container:
docker compose stop <container_ID or compose_name>
開始 container:
docker compose run <container_ID or compose_name>
重啟 container:
docker compose restart <container_ID or compose_name>
查看所有 docker 上 network 種類:
docker network ls
查詢接上此 network 的資訊:
docker network inspect <network_name>
docker 跟 container 溝通:
docker exec -it <container_id or container_name> <Command>
以 root權限 跟 container 溝通:
docker exec -it —user=root <container_id or container_name> <Command>
or
docker exec -it —u 0 <container_id or container_name> <Command>
把docker file 文件打包成一個imag:docker compose build
看container ip:
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_id or container_name>
找資料位置:
docker volume ls # => get Container_ID
docker inspect -f '{{.Mounts}}' <Container_ID>
刪除 docker 產物 :docker <*> prune
image:
docker image prune
docker image prune -a
container:
docker container prune
volumes:
docker volume prune
network:
docker network prune
everything:
docker system prune
WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all dangling images - all build cache
docker system prune --volumes
WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all volumes not used by at least one container - all dangling images - all build cache
Reference:
《Docker —— 從入門到實踐》正體中文版 (Git book)