走進docker-初識

什麼是Docker容器?

容器是打包代碼及其所有依賴項的軟件的標準單元,因此應用程序可以從一個計算環境快速可靠地運行到另一個計算環境。Docker容器映像是一個輕量級的,獨立的,可執行的軟件軟件包,其中包含運行應用程序所需的一切:代碼,運行時,系統工具,系統庫和設置 容器映像在運行時會成為容器,對於Docker容器,映像會在Docker Engine上運行時成為容器。不論基礎架構如何,容器化軟件都可用於基於Linux和Windows的應用程序,始終運行相同。容器將軟件與其環境隔離開來,並確保儘管開發和登台之間存在差異,但軟件仍可以均勻地工作。 Docker容器具有以下特點:

  • 標準: Docker創建了容器的行業標準,因此它們可以在任何地方移植
  • 輕量級:容器共享計算機的OS系統內核,因此不需要每個應用程序都具有OS,從而提高了服務器效率並降低了服務器和許可成本
  • 安全:應用程序在容器中更安全,並且Docker提供了業界最強大的默認隔離功能

Docker基礎

  • Docker環境安裝 Ubuntu Docker 安裝

    #卸載舊版本
    $ sudo apt-get remove docker docker-engine docker.io       containerd runc
    #更新apt
    $ sudo apt-get update
    #安裝 apt 依賴包,用於通過HTTPS來獲取倉庫:
    $ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
    #添加 Docker 的官方 GPG 密鑰:
    $ curl -fsSL //mirrors.ustc.edu.cn/docker-ce/l     inux/ubuntu/gpg | sudo apt-key add -
    #使用以下指令設置穩定版倉庫
    $ sudo add-apt-repository \
    "deb [arch=amd64] //mirrors.ustc.edu.cn/docker-     ce/linux/ubuntu/ \
    $(lsb_release -cs) \
    stable"
    #安裝 Docker Engine-Community
    $ sudo apt-get update
    #安裝最新版本的 Docker Engine-Community 和 containerd 
    $ sudo apt-get install docker-ce docker-ce-cli containerd.io

    CentOS Docker 安裝

    #卸載舊版本
    $ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
    #設置倉庫
    $ sudo yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2
    #設置阿里雲倉庫
    $ sudo yum-config-manager \
          --add-repo \
          //download.docker.com/linux/centos/docker-ce.repo
    #安裝Docker Engine-Community
    $ sudo yum install docker-ce docker-ce-cli containerd.io
    #啟動docker
    sudo systemctl start docker
    sudo systemctl ebable docker

    Windows 安裝

    Docker Desktop 是 Docker 在 Windows 10 和 macOS 操作系統上的官方安裝方式,這個方法依然屬於先在虛擬機中安裝 Linux 然後再安裝 Docker 的方法。 Docker Desktop 官方下載地址: //hub.docker.com/editions/community/docker-ce-desktop-windows

    Mac 安裝

    #Homebrew 的 Cask 已經支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 來進行安裝:
    brew install --cask --appdir=/Applications docker
  • Dockerfile構建鏡像

    Docker的鏡像是層疊結構的。 這個有點像git。就是最上一層的images,可能是下一層的images,為 基礎構建的。

    1. 構建Dockerfile

    FROM nginx
    RUN echo '這是一個本地構建的nginx鏡像' > /usr/share/ngin   x/html/index.html

    FROM :依賴的基礎鏡像

    RUN:用於執行後面跟着的命令行命令。有以下倆種格式:

     # <命令行命令> 等同於,在終端操作的 shell 命令。
    1. RUN <命令行命令>
      #RUN ["./test.php", "dev", "offline"] 等價於 RUN ./tes    t.php dev offline
    2. RUN ["可執行文件", "參數1", "參數2"]

    COPY:用於從本地文件中複製到容器中

    COPY [--chown=<user>:<group>] <源路徑1>...  <目標路徑>

    ADD:和copy一樣,包含了解壓的操作

    CMD:類似於 RUN 指令,用於運行程序,但二者運行的時間點不同:

    1. CMD 在docker run 時運行。
    2. RUN 是在 docker build。

    ENTRYPOINT:類似於 CMD 指令,但其不會被 docker run 的命令行參數指定的指令所覆蓋,而且這些命令行參數會被當作參數送給 ENTRYPOINT 指令指定的程序。但是, 如果運行 docker run 時使用了 –entrypoint 選項,將覆蓋 CMD 指令指定的程序。在執行 docker run 的時候可以指定 ENTRYPOINT 運行所需的參數。

    ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

    ENV:設置環境變量,定義了環境變量,那麼在後續的指令中,就可以使用這個環境變量。

    ENV <key> <value>
    ENV <key1>=<value1> <key2>=<value2>...

    ARG:構建參數,與 ENV 作用一至。不過作用域不一樣。ARG 設置的環境變量僅對 Dockerfile 內有效,也就是說只有 docker build 的過程中有效,構建好的鏡像內不存在此環境變量。構建命令 docker build 中可以用 –build-arg <參數名>=<值> 來覆蓋。

    ARG <參數名>[=<默認值>]

    VOLUME:定義匿名數據卷。在啟動容器時忘記掛載數據卷,會自動掛載到匿名卷。

    VOLUME ["<路徑1>", "<路徑2>"...]
    VOLUME <路徑>

    EXPOSE:僅僅只是聲明端口。 1. 幫助鏡像使用者理解這個鏡像服務的守護端口,以方便配置映射。 2. 在運行時使用隨機端口映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的端口。

    WORKDIR: 指定工作目錄。用 WORKDIR 指定的工作目錄,會在構建鏡像的每一層中都存在。(WORKDIR 指定的工作目錄,必須是提前創建好的)。docker build 構建鏡像過程中的,每一個 RUN 命令都是新建的一層。只有通過 WORKDIR 創建的目錄才會一直存在。

    WORKDIR <工作目錄路徑>
    1. 構建Docker鏡像

    docker build -t nginx:v3 .

    在 Dockerfile 文件的存放目錄下,執行構建動作。 以下示例,通過目錄下的 Dockerfile 構建一個 nginx:v3(鏡像名稱:鏡像標籤)。命令中的. 是上下文路徑。

  • Docker容器常用使用命令

    1. 下載容器 docker pull 鏡像:tag

    默認下載走的是Dockerhub官方鏡像,大家可以設置下阿里雲的鏡像倉庫

    #修改鏡像地址
    vim /etc/docker/daemon.json
    "registry-mirrors": ["//iv7stq00.mirror.aliyuncs.com"] }

    啟動容器

     docker run -itd -v /opt/opt -p 5000:5000 --name test nginx  
       
    • -i: 交互式操作。
    • -t: 終端。
    • -d: 後端運行(不加會佔用你的控制台,關閉控制台則關閉容器)。
    • -v: 映射容器內部文件夾。
    • -p: 映射端口。
    • –name: 容器名稱

    查看當前鏡像

    docker images 

    查看當前啟動容器

    # -a啟動失敗的也可以看到
     docker ps -a 

    刪除容器

     docker rm -f 容器名稱/容器Id

    查看容器概況

     docker inspect 容器名稱/容器Id

    進入容器

     docker exec -it 容器名稱/容器Id bash

    重啟容器

     docker restart 容器名稱/容器Id

    其他命令

     docker command --help  

Docker三劍客簡介

  • Docker Swarm

    Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主機抽象為一個整體,並且通過一個入口統一管理這些 Docker 主機上的各種 Docker 資源。

  • Docker Machine

    能夠幫助快速創建docker容器環境,Docker Machine也可以集中管理所有的docker主機,比如快速的給100台服務器安裝上docker。

machinemachine

  • Docker Compose

    Compose 是用於定義和運行多容器 Docker 應用程序的工具。通過 Compose,您可以使用 YML 文件來配置應用程序需要的所有服務。然後,使用一個命令,就可以從 YML 文件配置中創建並啟動所有服務。

讀一本好書,就是在和高尚的人談話。