Docker 使用簡介

Docker 是使用 GoLang 開發的開源容器引擎,能夠方便的打包開發好的應用,而後分發到任意 linux 主機上。mysql

與傳統的虛擬機相比擁有如下優點:linux

  • 高效的系統資源利用率

    因爲不須要進行硬件虛擬和運行完整的操做系統等額外開銷,不管是應用執行速度、內存損耗或者文件存儲速度, Docker 都更加高效sql

  • 更快的啓動速度

    Docker 容器應用直接運行與宿主內核,無需啓動完整的操做系統,能夠作到秒級啓動docker

  • 一致的運行環境

    Docker 鏡像提供了除內核外的完整運行環境,確保了應用運行環境的一致性json

  • 持續交付和部署

    能夠經過 Docker 鏡像來實現服務的持續交付、部署。使用 Dockerfile 來構建鏡像,使用持續集成系統進行集成測試;使用鏡像結合持續部署系統進行自動部署後端

  • 遷移輕鬆

    只須要遷移鏡像及鏡像運行的數據就可在其餘主機或平臺運行bash

  • 易於維護和擴展

    因爲使用鏡像進行部署,使維護更爲容易。因爲支持在鏡像的基礎上進行定製,使得擴展變得更簡單。而官方也維護了一大批高質量的鏡像,大大下降了鏡像的製做成本wordpress

基本概念

倉庫

Docker 提供了倉庫(Repository)用於存放製做好的鏡像,方便使用者獲取,在本地可通知配置多個 Repository測試

  • 拉取

    可使用命令來拉取鏡像:ui

    docker pull [repo url>/]image name>

    默認的 repo urlhub.docker.com ,拉取默認倉庫中的鏡像時是不須要 url 的。
    如拉取 debiandocker pull debian

  • 推送

    咱們也可將本身製做好的鏡像推送到倉庫,以便分發,使用命令:

    docker push [<repo url>/]<image name>[:<image tag>>

  • 搜索

    使用 docker search 命令則可搜索默認 repo url 內的鏡像。

  • 鏡像加速

    因爲默認 repo url 在國外,爲了加快拉取速度,須要指定其爲國內的,向 /etc/docker/daemon.json 中添加:

    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }

    即可使用 Docker 在中國的鏡像加速站。

    對於企業用戶還可搭建本身的私有鏡像倉庫,方便管理內部鏡像。

鏡像

鏡像是通過 Dockerfile 規則打包生成的, Dockerfile 文件了指明瞭鏡像的生成及運行方式。

Dockerfile

這裏簡單介紹下 Dockerfile 中經常使用的命令:

  • FROM

    指明基於那個鏡像,一般是一個系統環境,如 debian 。在多階段(stage)構建中可以使用 FROM ... AS ... 來命令階段,供後面的階段使用

  • ENV

    設置鏡像的環境變量

  • EXPOSE

    導出端口,語法: EXPOSE port/protocol

  • RUN

    執行一條命令

  • COPY

    複製鏡像內部的文件,也可從指定 stage 中複製文件,使用 --from=<stage name> 來實現

  • ADD

    複製本地文件到鏡像中,並作了一些額外工做,如自動解壓文件、保持文件屬性等

  • WORKDIR

    切換工做目錄

  • CMD

    執行命令,極容易在 docker run 時被覆蓋。主要用於指定鏡像的默認啓動命令,有如下三種語法:

    • CMD ["executable", "param1", "param2"] Exec 模式,首先
    • CMD ["param1", "param2"] 設置 ENTRYPOINT 的默認參數
    • CMD command param1 param2 Shell 模式
  • ENTRYPOINT

    指定鏡像默認的運行命令,可使用 --entrypoint 參數在 docker run 時覆蓋 Dockerfile 內的 ENTRYPOINT

    ExecShell 兩種模式

    一般使用這個命令來指定鏡像的啓動命令,由於 CMD 稍不注意就被覆蓋了

更多關於 Dockerfile 內容請參見: Dockerfile reference

這裏給出一個簡單的 Dockerfile=, 是 =debian sid 的:

FROM scratch
ADD rootfs.tar.xz /
CMD ["bash"]

建立

使用 docker build -f <Dockerfile path> [-t <image name>[:<tag>]] . 建立鏡像和標記 Tag

Tag 可用來標記不一樣的鏡像版本,就像版本號。

列出

使用 docker image ls 能夠列出下載下來的鏡像

運行

使用 docker run 命令運行鏡像,可以使用參數配置,下面給出一個例子:

docker run -it -d -p <local port>:<container port> -v <local path>:<container path> <image>

  • -i 是交互式操做
  • -t 是終端
  • -p 指定端口映射
  • -v 指定 volume 映射
  • -d 後臺模式

刪除

使用 docker image rm <image id> 刪除鏡像

導入和導出

  • 導出: docker save <image id> > <image save>.tar
  • 導入: docker load < <image save>.tar

容器

容器是鏡像運行後的實體,運行與屬於本身的獨立的命名空間。

建立

使用 docker run 命令啓動鏡像就能夠建立一個容器

列出

使用 docker ps 可列出正在運行的容器,加上 -a 參數可列出因此存在的容器

控制

  • 啓動

    使用 docker container start <containe id> 啓動容器

  • 終止

    使用 docker container stop <containe id> 終止容器

  • 暫停

    dcoker container pause <containe id>

  • 重啓

    dcoker container restart <containe id>

  • 日誌

    dcoker container logs <containe id>

刪除

docker container rm <container id> 命令可刪除容器

進入容器

使用 docker exec -it <container id> /bin/sh 命令可進入容器的執行環境

導入和導出

  • 導入: docker import <container export>.tar <container name>
  • 導出: docker export <container id> > <container export>.tar

部署

直接運行鏡像不便於部署服務,於是官方推出了 Docker Compose 來負責應用部署。

使用 docker-compose.yml 文件將應用須要的鏡像都定義在一塊兒,而後使用 docker-compose 命令來部署。

docker-compose.yml 的語法詳見: Compose file version 3 reference,這裏給出一份部署 wordpress 的文件:

version: "3.7"

services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    networks:
      - backend

  mysql:
    image: mysql
    volumes:
       - db-data:/var/lib/mysql/data
    networks:
       - backend

volumes:
  db-data:

networks:
  backend:

經常使用命令

  • up

    啓動服務,加上 -d 表示在後端運行

  • down

    終止服務

  • build

    構建服務中的容器

  • config

    驗證文件格式是否有誤

  • exec

    進入指定的容器,如進入上面 wordpress 中的 mysql 則是: docker-compose exec mysql

  • logs

    顯示日誌,可指定容器

  • restart

    重啓服務

更多命令請見: Overview of docker-compose CLI

相關文章
相關標籤/搜索