本文講述 Docker 與 VM 的不同 與 Docker 指令

重要觀念 Docker != Container

Docker 架構:

vm_vs_container vm_vs_container_arch

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)

Docker Tips (Git book)

專題筆記: VM 與 Docker (Hackmd) by.@wei06097

Prune unused Docker objects | Docker Docs