docker 初識

docker菜鳥教程整理筆記
我認爲筆記的意義在於有的放矢,而不是像字典一樣的詳細。所以我後期的筆記風格都會以言簡意賅爲主,如果有什麼不懂得地方,直接百度。

Docker 容器的使用

獲取鏡像

docker pull ubuntu

啓動容器

docker run -it ubuntu /bin/bash

查看所有的容器

docker ps -a

啓動已停止的容器

docker start 容器id

後臺運行

docker run -itd --name ubuntu-test ubuntu /bin/bash

停止一個容器

docker stop 容器id
docker restart 容器id

進入容器

docker attach 1e560fca3906
docker exec -it 243c32535da7 /bin/bash

導出容器

docker export 1e560fca3906 > ubuntu.tar

導入容器快照

cat docker/ubuntu.tar | docker import - test/ubuntu:v1

docker import http://example.com/exampleimage.tgz example/imagerepo

刪除容器

docker rm -f 1e560fca3906

清理掉所有處於終止狀態的容器。

docker container prune


Docker 鏡像使用

列出鏡像列表

docker images

查找鏡像

docker search 鏡像名稱

拉取鏡像

docker pull 鏡像名稱

刪除鏡像

docker rmi 鏡像名稱

創建鏡像

  • 更新鏡像
    • 創建容器 :docker run -t -i ubuntu:15.10 /bin/bash
    • 在容器內執行:apt-get update
  • 構建鏡像
    • 創建一個 Dockerfile 文件

設置鏡像標籤

docker tag 860c279d2fec runoob/centos:dev
這裏是 860c279d2fec ,用戶名稱、鏡像源名(repository name)和新的標籤名(tag)


Docker 容器連接

網絡端口映射

docker run -d -p 5000:5000 training/webapp python app.py
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
docker port 容器名稱 5000 查看端口的綁定情況

容器互聯

  • 新建網絡 docker network create -d bridge/overlay 網絡名稱
  • 連接容器
    • docker run -itd --name test1 --network 網絡名稱 ubuntu /bin/bash
    • docker run -itd --name test2 --network test-net ubuntu /bin/bash
    • ping命令: docker exec -it test1 /bin/bash
    • 推薦使用 Docker Compose

配置 DNS

  • 主機的 /etc/docker/daemon.json

    {
        "dns" : [
            "114.114.114.114",
            "8.8.8.8"
        ]
    }
    
  • 查看容器的 DNS 是否生效 docker run -it --rm ubuntu cat etc/resolv.conf

  • 手動指定容器的配置 docker run -it --rm host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu


Docker 倉庫管理

docker hub

  • 網址:https://hub.docker.com
  • 註冊:
  • 登錄與退出:docker login/logout

搜索鏡像

docker search 鏡像名稱

拉取鏡像

docker pull 鏡像名稱

推送鏡像

  • 打標籤:docker tag 鏡像名稱 用戶賬號/鏡像名稱
  • 用戶賬號就是上文註冊的賬號
  • docker push darkangel1228/鏡像名稱

Docker Dockerfile

什麼是 Dockerfile?

Dockerfile 是一個用來構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明。

使用 Dockerfile 定製鏡像

  • From
    後續的操作都是基於 nginx

  • Run
    用於執行後面跟着的命令行命令

    • shell 格式:RUN <命令行命令>
    • RUN [“可執行文件”, “參數1”, “參數2”]
  • Dockerfile 的指令每執行一次都會在 docker 上新建一層。所以過多無意義的層,會造成鏡像膨脹過大

    FROM centos
    RUN yum install wget
    RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
    RUN tar -xvf redis.tar.gz
    以上執行會創建 3 層鏡像。可簡化爲以下格式:
    FROM centos
    RUN yum install wget \
        && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
        && tar -xvf redis.tar.gz
    

開始構建鏡像

docker build -t nginx:test .

  • . 上下文路徑,
    • 是指 docker 在構建鏡像,有時候想要使用到本機的文件(比如複製),docker build 命令得知這個路徑後,會將路徑下的所有內容打包
    • 如果未說明最後一個參數,那麼默認上下文路徑就是 Dockerfile 所在的位置。
    • 注意:上下文路徑下不要放無用的文件,因爲會一起打包發送給 docker 引擎,如果文件過多會造成過程緩慢。

指令詳解

  • copy 複製指令,從上下文目錄中複製文件或者目錄到容器裏指定路徑。

    • 格式:COPY [–chown=:] <源路徑1>… <目標路徑>
    • 源文件或者源目錄,這裏可以是通配符表達式,其通配符規則要滿足 Go 的 filepath.Match 規則
    • <目標路徑>:容器內的指定路徑,該路徑不用事先建好,路徑不存在的話,會自動創建。
  • ADD 指令和 COPY 的使用格式一致(同樣需求下,官方推薦使用 COPY)。功能也類似,不同之處如下:

    • ADD 的優點:在執行 <源文件> 爲 tar 壓縮文件的話,壓縮格式爲 gzip, bzip2 以及 xz 的情況下,會自動複製並解壓到 <目標路徑>。
    • ADD 的缺點:在不解壓的前提下,無法複製 tar 壓縮文件。會令鏡像構建緩存失效,從而可能會令鏡像構建變得比較緩慢。具體是否使用,可以根據是否需要自動解壓來決定。
  • CMD 類似於 RUN 指令,用於運行程序,但二者運行的時間點不同:

    • CMD 在docker run 時運行。

    • RUN 是在 docker build。

    • 作用:爲啓動的容器指定默認要運行的程序,程序運行結束,容器也就結束。CMD 指令指定的程序可被 docker run 命令行參數中指定要運行的程序所覆蓋。

    • 注意:如果 Dockerfile 中如果存在多個 CMD 指令,僅最後一個生效。

  • ENTRYPOINT 類似於 CMD 指令,但其不會被 docker run 的命令行參數指定的指令所覆蓋,而且這些命令行參數會被當作參數送給 ENTRYPOINT 指令指定的程序。

    • 優點:在執行 docker run 的時候可以指定 ENTRYPOINT 運行所需的參數。
    • 注意:如果 Dockerfile 中如果存在多個 ENTRYPOINT 指令,僅最後一個生效。
  • ENV 設置環境變量

  • ARG 與 ENV 作用一至。不過作用域不一樣

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

  • EXPOSE 僅僅只是聲明端口

  • WORKDIR 指定工作目錄

  • USER 用於指定執行後續命令的用戶和用戶組

  • HEALTHCHECK 用於指定某個程序或者指令來監控 docker 容器服務的運行狀態。

  • ONBUILD 用於延遲構建命令的執行。


Docker Compose

Compose 簡介

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

Compose 安裝

使用

  • Dockerfile
  • docker-compose.yml

Docker Machine

Docker Machine 是一種可以讓您在虛擬主機上安裝 Docker 的工具,並可以使用 docker-machine 命令來管理主機。
Docker Machine 也可以集中管理所有的 docker 主機,比如快速的給 100 臺服務器安裝上 docker。

Swarm 集羣管理

Docker Swarm 是 Docker 的集羣管理工具。它將 Docker 主機池轉變爲單個虛擬 Docker 主機。 Docker Swarm 提供了標準的 Docker API,所有任何已經與 Docker 守護程序通信的工具都可以使用 Swarm 輕鬆地擴展到多個主機。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章