前端眼裏的docker

docker是什麼

能夠簡單的認爲docker容器是一個虛擬機,封裝就是把這個虛擬機打包,打包後能在任何系統跑,docker裝上即用。也能夠形象的比喻成一個集裝箱,把全部貨物都打包好放到箱子裏,不須要再分類運輸,集裝箱不互相影響node

好處

  1. 統一應用環境
  2. 方便遷移
  3. 佔用資源少 (若是你單獨開一個虛擬機,那麼虛擬機會佔用空閒內存的,docker部署的話,這些內存就會利用起來)

docker和虛擬機比較

  1. 虛擬機是虛擬出一套硬件後,在其上運行一個完整操做系統,在該系統上再運行所需應用進程
  2. 容器內的應用進程直接運行於宿主的內核,容器內沒有本身的內核,並且也沒有進行硬件虛擬

圖片描述
圖片描述
圖片描述

Docker架構

圖片描述
圖片描述

基本概念

鏡像

Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)
鏡像鏡像只是一個虛擬的概念,且是分層存儲的,其實際體現並不是由一個文件組成,而是由一組文件系統組成,或者說,由多層文件系統聯合組成。linux

容器

1.鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的 類 和 實例 同樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器能夠被建立、啓動、中止、刪除、暫停等。
2.容器的本質是進程,可是和宿主執行的進程不同,它有獨立的命名空間,所以有本身的root文件系統,網絡配置、進程空間
3.容器存儲層的生存週期和容器同樣,容器消亡時,容器存儲層也隨之消亡,所以任何保存於容器存儲層的信息都會隨容器刪除而丟失。
注: Docker 最佳實踐的要求nginx

1.容器不該該向其存儲層內寫入任何數據,容器存儲層要保持無狀態化。
2.全部的文件寫入操做,都應該使用 數據卷(Volume)、或者綁定宿主目錄,在這些位置的讀寫會跳過容器存儲層,直接對宿主(或網絡存儲)發生讀寫,其性能和穩定性更高
3.數據卷的生存週期獨立於容器,容器消亡,數據卷不會消亡

倉庫

一個 Docker Registry 中能夠包含多個倉庫(Repository);每一個倉庫能夠包含多個標籤(Tag);每一個標籤對應一個鏡像。git

使用鏡像

獲取鏡像

docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標籤]
docker pull ubuntu:16.04
docker run 運行容器的命令

docker run -it --rm \
    ubuntu:16.04 \
    bash
-it:  -i:交互式操做  -t:終端  咱們這裏打算進入bash執行一些命令並查看返回結果,所以須要交互式終端
--rm:這個參數是說容器退出後隨之將其刪除
bash:放在鏡像名後的是命令,這裏咱們但願有個交互式 Shell,所以用的是 bash。

列出鏡像

docker image ls
docker image ls -f dangling=true 虛懸鏡像
docker image prune 刪除虛懸鏡像
docker image ls -a   中間層鏡像
docker image ls ubuntu 列出部分鏡像
docker image ls -f since=mongo:3.2
docker image ls -f before=mongo:3.2

刪除本地鏡像

docker image rm [選項] <鏡像1> [<鏡像2> ...]
docker image rm ID
docker image rm 鏡像名
docker image rm 摘要
docker rmi 鏡像名

Docker指令

Dockerfile定製鏡像

FROM 指定基礎鏡像
RUN 執行命令
構建鏡像 docker build -t nginx:v3 .

COPY 複製文件

  1. COPY <源路徑>... <目標路徑>
COPY package.json /usr/src/app/
  1. 相對於工做目錄的相對路徑(工做目錄能夠用 WORKDIR
  2. 各類元數據都會保留。好比讀、寫、執行權限、文件變動時間等

ADD

Add 比COPY多了些特性,好比 <源路徑> 能夠是一個 URLgithub

CMD

  1. shell: CMD <命令>
  2. exec : CMD ["可執行文件", "參數1","參數2"]
CMD echo $HOME
CMD [ "sh", "-c", "echo $HOME" ]

ENV

ENV NODE_VERSION 7.2.0
或者ENV NODE_VERSION=7.2.0
好比使用: RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION

操做容器

啓動

$ docker container run \
  -d \
  -p 127.0.0.2:8080:80 \
  --rm \
  --name mynginx \
  nginx

重啓

docker container start

終止

docker stop ID

進入容器

docker attach ID  /exit 會致使容器退出
docker exec -it ID  /exit 不會致使容器退出

Docker Compose

安裝和卸載

linux安裝docker

$ sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

卸載shell

$ sudo rm /usr/local/bin/docker-compose

使用

docker-compose up
docker-compose down
docker-compose --version

項目實踐

相關文章
相關標籤/搜索