docker操做指南

容器基本知識

搭建環境

參考Docker 環境搭建docker

鏡像

  基本操做

    1.查看鏡像:docker imagesshell

    2.從registry下載鏡像(默認的源是Docker Hub):docker pull [USERNAME/]IMAGE[:tag]ubuntu

    3.查看某個鏡像構建的層次:docker history IMAGEvim

       4.爲鏡像命名:docker tag [old_repositry]:[old_tag] [new_repositry]:[new_tag]網絡

    5.上傳鏡像到Docker Hub上: docker push [USERNAME]/repositry:tag測試

      注:上傳前要登錄:docer login -u USERNAMEui

    6.刪除Docker host中的鏡像:.net

      1.刪除一個鏡像:docker rmi IMAGErest

      2.刪除所有鏡像:docker rmi $(docker images -q)code

      鏡像沒法刪除解決辦法

      1.若某些鏡像對應的容器處於run狀態或者處於stop狀態,則不能刪除鏡像。

        解決辦法:刪除鏡像對應的容器:rm

      2.若兩個鏡像的IMAGE ID同樣,這不能刪除所有鏡像。

        解決辦法:逐個刪除鏡像。

    7.搜索Docker Hub中的鏡像: docker search IMAGE

  內部結構

    Dockerfile是鏡像的描述文件。構建Dockerfile的一些指令:

      1.FROM IMAGE:表示以IMAGE爲基礎,從而構建構建更高層次的鏡像。

        例:FROM scratch:不以任何鏡像爲基礎。

          注:通常以base鏡像爲基礎:Ubuntu,Debian,CentOS

      2.ADD: 從build context複製文件到鏡像。若文件時壓縮包,則自動解壓。 

      3.COPY:將build context中複製文件到鏡像。

        1.COPY src dest

        2.COPY ["src", "dest"]

          注:src只能是build context中的文件或目錄。

      4.ENV:設置環境變量

        例如:ENV MY_VERSION 1.3

           RUN apt install -y mypackage=$MY_VERSION (MY_VERSION被替換成1.3) 

      5.EXPOSE:指定暴露的端口。

      6.WORKDIR:指定容器當前的工做目錄。

      7.RUN:運行特定的指令。

      8.CMD:容器啓動時運行的指令,多個指令只有最後一個生效。CMD能被RUN參數替換。

      9.ENTRYPOINT:跟CMD同樣,不同的時CMD 和 docker run後的參數會傳給ENTRYPOINT。不會被RUN後參數替換。

        注:DOCERFILE有兩種模式:Shell和Exec模式。

        1.shell模式:<instruction> <command>

        2.exec模式:<instruction> ["executable", "param1", "param2", ...]

      10.MAINTAINER:鏡像的做者。 

  構建鏡像

    1.docker commit 命令

      構建步驟:

        1.運行容器

          例如:docker run -it --name=ubuntu_test ubuntu

        2.修改容器

          例如:apt install -y vim

        3.保存爲新的鏡像

          例如:docker commit ubuntu_test ubuntu-vim 

    2.dockerfile 構建文件 

      docker built -t IMAGE_NAME .

        注:-t表示打一個tag標籤。

容器

  基本操做

    1.啓動容器:

      1.docker run [OPTIONS] IMAGE [COMMAND]:建立並運行容器。

        例如:docker run -d -p 80:80 httpd

          -d:之後臺方式運行

          -p:指定端口

      2.docker create IMAGE: 只建立容器,不運行。 

    2.查看正在運行的容器:

      1.docker ps

      2.docker container ls

    3.指定容器名字:--name "CONTAINER_NAME"

    4.進入容器的方法:

      1.docker attach CONTAINER_NAME:進入容器,不能建立新進程

      2.docker exec CONTAINER_NAME op:進入容器,能夠建立新進程。

    5.查看容器的輸出:docker log -f CONTAINER

    6.中止正在運行的容器:

      1. docker stop/kill CONTAINER:佔用CPU

      2. docker pause CONTAINER: 不佔用CPU

    7.運行處於中止狀態的容器:

      1. docker start CONTAINER

      2. docker unpause CONTAINER

    8.重啓容器:

      1.restart = stop + start

      2.--restart=always:不管容器何種緣由退出,當即重啓容器。

      3.--restart=on-failure:3,若啓動的進程退出並返回非0值,最多重啓3次

    9.重啓容器:

      docker rm CONTAINER

  參考容器操做圖 

  容器的資源限制

    1.內存限制:

      1. -m 或 --memory: 隨着以內存的使用限額。

        例如: -m 300M

      2.--memory-swap: 內存+swap的使用限額。

        例如:-memory-swap 400M

    2.CPU限制:-c 或 --cpu-shares

      例如:docker run --name "NAME1" -c 1024 IMAGE

         docker run --name "NAME2" -c 512 IMAGE:表示1號容器使用CPU時間是2號容器的2倍。

      注:--cpu 1:表示有1顆CPU

    3.限制磁盤讀寫速度:--blkio-weight

      例如:docker run -it --name CONTAINER_A --blkio-weight 600 IMAGE

         docker run -it --name CONTAINER_B --blkio-weight 300 IMAGE

       注:

        --device-read-bps,限制讀某個設備的 bps。
        --device-write-bps,限制寫某個設備的 bps。
        --device-read-iops,限制讀某個設備的 iops。
        --device-write-iops,限制寫某個設備的 iops。

          例如:docker run -it --device-write-bps /dev/sda:30MB IMAGE:限制對設備的寫速度不超過30MB

網絡

  none網絡

    --network=none : 表示除了lo網卡(ip=172.0.0.1,用於迴環測試),沒有其餘任何網卡。通常用在高機密的應用中。

      例如:docker run -it --network=none ubuntu /bin/sh

  host網絡

    --network=host:表示與主機host分享ip。

  bridge網絡

    不指定network表示建立一個新的網絡接口,掛到docker0上。

    網橋操做

    1.查看網橋名以及接口:brctl show

    2.查看網橋的詳細信息(包括ip):docker network inspect BRIDGE 

  自定義(user-defined)網橋

    1.建立一個自定義的網絡驅動:docker network create --driver bridge my_net

    2.指定自定義網橋的ip網段(sub-net)以及網關(gateway):--subnet和--gateway

    3.使用自定義的網橋:--network=MY_NET

    4.使用自定義網橋時指定靜態ip:--ip。注意:只有指定--sub_net才能指定靜態ip。

    

  兩個容器間的通訊

    兩個容器若要通訊,必需要有屬於同一網絡的網卡。

    1.在一個容器中建立一個網卡,掛在MY_NET上:docker network connect MY_NET CONTAINER

    2.docker的自定義網絡自帶DNS Sever服務,所以能夠將ip換成容器名進行通訊:

      docker run -it --network=MY_NET --name=CONTAINER IMAGE

        注:bridge網絡沒有DNS Server功能。

    3.使用joined容器方法讓兩個容器共享網卡信息和配置信息:

      docker run -it --network=container:CONTAINER IMAGE,這樣新產生的容器能夠共享CONTAINER的網絡信息。

      好處:可使用lo的ip地址讓兩個容器通訊。

存儲

容器平臺知識

相關文章
相關標籤/搜索