鏡像(image)命令:
? ? ? ? docker images 查看鏡像信息
? ? ? ? docker search ubuntu:16.04??從docker hub搜索ubuntu 16.04的鏡像
? ? ? ? docker pull ubuntu:16.04? 從docker hub下載ubuntu 16.04的鏡像
? ? ? ? docker push 將本地鏡像上傳到docker hub
? ??????docker history image.name 查看構(gòu)建歷史
? ? ? ? docker rmi ubuntu 刪除本地的ubuntu鏡像
? ? ? ? docker tag 給鏡像打tag
? ? ? ? 構(gòu)建鏡像的兩種方式:
? ? ? ? ? ? ????1. docker commit? container_name? image_name
? ? ? ? ? ? ? ? 2. 通過Dockerfile 構(gòu)建
? ? ? ? ? ? ? ? ? ? ? ? FROM ubuntu
? ? ? ? ? ? ? ? ? ? ? ? RUN apt-get update && apt install vim
? ? ? ? ? ? ? ? ? ? ? ? 通過 docker build -t image.name . 命令構(gòu)建 -t后為鏡像名
? ? ? ? ? ? ? ? ? ? ? ? 通過 docker history image.name 命令查看構(gòu)建歷史
? ? ? ? ? ? ? ? ? ? ? ? 如果不希望在構(gòu)建鏡像時使用緩存,可以在docker build命令中加上--no-cache參數(shù)
? ? ? ? ? ? ? ? ????????Dockerfile常用指令:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? FROM? 指定base鏡像
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MAINTAINER? 設置鏡像的作者,可以是任意字符串
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? COPY? 將文件從build contest 復制到鏡像, COPY src dest?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ADD? 與COPY類似逗物, 從build context 復制文件到鏡像厨剪。不同的是攒砖,如果時壓縮文件會被自動解壓
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ENV? 設置環(huán)境變量
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? EXPOSE? 指定容器中的進程會監(jiān)聽某個端口,docker可以將該端口暴露出來
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? VOLUME? 將文件或目錄聲明為volume
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? WORKDIR? 為后面的RUN CMD ENTRYPOINT ADD COPY指令設定鏡像中的當前工作目錄
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? RUN? 在容器中運行指定的命令陨囊,? ? RUN指令通常用于安裝應用和軟件包逗抑。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CMD 容器啟動時運行指定的命令 剧辐,CMD可以被docker run 之后的參數(shù)替換。? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ENTRYPOINT Dockerfile中可以有多個ENTRYPOINT指令邮府,但只有最后一個生效荧关。CMD或docker run 之后的參數(shù)會被當做參數(shù)傳遞給ENTRYPOINT。
? ? ? ? 構(gòu)建本地倉庫:
? ? ? ? ? ? ? ? docker run -d -p 5000:5000 -v /localregistry:/var/lib/registry registry
? ? ? ? ? ? ? ? -d 后臺啟動容器
? ? ? ? ? ? ? ? -p 將容器的5000端口映射到host的5000端口挟纱。5000 是registry的服務端口羞酗。
? ? ? ? ? ? ? ? -v 將容器/var/lib/registry 目錄映射到host的/localregistry腐宋。 用于存放鏡像數(shù)據(jù)
容器(Container)命令:
? ? ? ? docker ps 或docker container ls 來查看Docker host 中當前運行的容器
????????docker ps -a 或docker container ls -a 來查看Docker host 中所有的容器?
? ? ? ? docker create 創(chuàng)建一個容器紊服,這是容器處于Created狀態(tài)
? ? ? ? docker stop 停止一個容器
? ? ? ? docker kill 快速停止一個容器
? ? ? ? docker start 重啟一個停止的容器
? ? ? ? docker restart 相當于 docker stop + docker start
? ? ? ? docker attach 直接進入容器啟動命令的終端,不會啟動新的進程
? ? ? ? docker exec 則是在容器中打開新的終端胸竞,并且可以啟動新的進程欺嗤,執(zhí)行這個命令進入通過 -d啟動的服務類容器, 如數(shù)據(jù)庫
? ? ? ? docker logs? ? 輸出容器中執(zhí)行的命令?
? ? ? ? docker rename 重命名容器
? ? ? ? docker run 建立一個新的容器卫枝, 相當與 docker create + docker start
? ? ? ? docker run 命令時煎饼,可以通過 --restart=always 讓容器無論已何種原因退出(包括正常退出和因某種錯誤停止運行),都立即重啟 , 即除了docker stop 和docker kill命令之外
? ? ? ? docker pause? ?讓容器暫停工作校赤,出與暫停狀態(tài)的容器不會占用cpu
? ? ? ? docker unpause 回復暫停的容器
? ? ? ? docker rm 刪除容器
? ? ? ? docker run -m 200M --memory-swap=300M ubuntu 允許該容器使用200Mb的內(nèi)存和100Mb的swap,如果不指定--memory-swap 則 --memory-swap默認為 -m的兩倍
網(wǎng)絡(Network)命令
? ? ? ? docker 在安裝時自動為我們創(chuàng)建none吆玖、host、bridge三種網(wǎng)絡马篮, 通過--network命令指定沾乘,默認bridge模式
? ? ? ? docker 還提供三種user-defined網(wǎng)絡驅(qū)動: bridge、overlay浑测、 macvlan,其中overlay和macvla 用于創(chuàng)建跨主機的網(wǎng)絡翅阵。
? ? ? ? docker network create --driver bridge my_net 創(chuàng)建名為my_net的bridge網(wǎng)絡歪玲,還可以通過--subnet命令來指定ip網(wǎng)段,通過--gateway參數(shù)來指定網(wǎng)關
? ??????docker network inspect my_net 查看網(wǎng)絡信息?
? ? ? ? 容器要使用新的網(wǎng)絡,需要在啟動時通過--network指定掷匠,如docker run --network=my_net ubuntu --ip 172.18.0.2 ubuntu:lasted
? ? ? ? 當我們想固定容器的ip地址(即靜態(tài)ip)滥崩,只有使用--subnet創(chuàng)建的網(wǎng)絡才可以,?
? ? ? ? 默認情況下兩個不同網(wǎng)絡的容器是不能互相訪問的讹语,但我們可以 docker network connect my_net container 來實現(xiàn)二者的連接
? ? ? ? docker dns server 使容器通過容器名進行通信钙皮,不過只適用于user-defined網(wǎng)絡中? ? ? ??
? ? ? ? joined 容器使兩個或多個容器共享一個網(wǎng)絡棧,共享網(wǎng)卡與配置信息顽决, docker run -d -it --name=web1 httpd 再創(chuàng)建一個容器并通過 --network=container:web1 httpd?
? ? ? ? 容器是默認可以訪問外網(wǎng)的株灸,外部世界則通過端口映射來訪問容器
存儲命令
? ? ? ?容器由最上面的一個可寫層和若干個只讀的鏡像組成,容器的數(shù)據(jù)就存放在這些層中擎值。這樣的分層結(jié)構(gòu)最大的特性為Copy-on-write.
? ? ? ? 對于有持久化數(shù)據(jù)的需求慌烧,容器啟動時需要加載已有的數(shù)據(jù),容器銷毀時需要保留產(chǎn)生的新數(shù)據(jù)鸠儿,這就用到了的docker的一種存儲機制: Date Volume, Date Volume本質(zhì)上是Docker Host 文件系統(tǒng)中的目錄或者文件屹蚊,能夠直接被mount到容器中。????????
????????目前docker提供了兩種類型的volume:
? ? ? ? ? ? ? ? 1. bind mount
? ? ? ? ? ? ? ? ? ? ? ? docker run -it -v <host path>:<container path> ubuntu
? ? ? ? ? ? ? ? ? ? ? ? bind mount 還可以指定數(shù)據(jù)的讀寫權(quán)限进每,莫認是可讀可寫汹粤,可指定為只讀, 如
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? docker run -v <host path>:<container path>:ro
? ? ? ? ? ? ? ? ? ? ? ? bind mount還支持對單個文件的bind
? ? ? ? ? ? ? ? ? ? ? ? 不同的容器可以通過bind mount 共用一個文件系統(tǒng)
? ? ? ? ? ? ? ? 2 docker managed volume
? ? ? ? ? ? ? ? ? ? ? ? docker managed volume 具有更好的移植性
? ? ? ? ? ? ? ? ? ? ? ? 通過命令 docker run -v <container path> ubuntu
? ? ? ? ? ? ? ? ? ? ? ? docker 會在host上/var/lib/docker/volumes/目錄下創(chuàng)建一個目錄保存容器中的文件
? ? ? ? ? ? ? ? ? ? ? ? docker volume ls 查看host中已有的數(shù)據(jù)卷
? ? ? ? ? ? ? ? ? ? ? ? docker volume inspect volume:id查看該數(shù)據(jù)卷的詳細信息
? ? ? ? ? ? ? ? ? ? ? ? docker managed volume 不支持單個文件田晚,也不能進行權(quán)限控制嘱兼,不支持指定文件位置,但其移植性強贤徒,無需指定host目錄
????????volume container 是專門為其他容器提供volume的容器芹壕。它提供的卷可以使bind mount, 也可以是docker managed volume接奈。下面我們創(chuàng)建一個volume container
? ? ? ? ? ? ? ? docker create --name vc_data -v <host path>:<container path> ubuntu
? ? ? ? ? ? ? ? 之所以用create 命令踢涌,這是因為volume container 之提供數(shù)據(jù),不需要處于運行狀態(tài)序宦。
? ? ? ? ? ? ? ? 其他容器可以通過 --volumes-from 使用剛剛創(chuàng)建的volume container
? ? ? ? ? ? ? ? docker run --volumes-from va_data ubuntu
? ? ? ? ? ? ? ? 與bind mount 相比睁壁,不必為每個容器制定host path,所有的path都在volume container 中定義好了
? ? ? ? data-packed volume container 與 volume container 相比互捌,將放在host里的數(shù)據(jù) 放到了鏡像中潘明,其具有較強的可移植性。
docker machine
安裝docker-machine
base=https://github.com/docker/machine/releases/download/v0.16.0&& curl -L $base/docker-machine-$(uname-s)-$(uname-m)>/tmp/docker-machine&& sudo install /tmp/docker-machine /usr/local/bin/docker-machine
創(chuàng)建docker machine
docker-machine create --driver generic --generic-ip-address=192.168.1.63 host1
docker-machine env host1
eval $(docker-machine env host1)
docker-machine upgrade
docker-machine config 查看machine的docker daemon 配置