docker (1) ---簡介,使用

1、docker簡介:

  容器( container-based )虛擬化方案,充分利用了操做系統自己已有的機 制和特性,以實現輕量級的虛擬化(每一個虛擬機安裝的不是完整的虛擬機), 甚至有人把他稱爲新一代的虛擬化技術, Docker 無疑就是其中的佼佼者 在一臺服務器上同時運行上百個虛擬機,確定會被認爲是癡人說夢,而在一臺機器上同時運 行一千個 Docker 容器,這已成爲現實 Docker 的目標 Build,Ship and Run Any App,Anywhere— 即經過對 應用組件的封裝 (Packaging), 發佈(Distribution), 運行 (runing) 等生命週期的管理 , 達到應用組件級別的一 次封裝 , 處處運行mysql

2、docker特色:

優勢:

1、 啓動快,資源佔用小 , 資源利用高,快速構建標準化運行環境 linux

2、建立分佈式應用程序時快速交付和部署,更輕鬆的遷移和擴展,更簡單的更新管理 侷限:ios

侷限:

1Docker 是基於 Linux 64bit 的,沒法在 windows/unix 32bit linux環境下使用 nginx

2LXC 是基於 cgroup linux kernel 功能的,所以 container guest 系統只能是 linux sql

3、 隔離性相比 KVM 之類的虛擬化方案仍是有些欠缺,全部 container 公用一部分的運行庫 docker

4、 管理相對簡單,主要是基於 namespace 隔離 json

5cgroup cpu cpuset 提供的 cpu 功能相比 KVM 的等虛擬化方案相比難以度量 ( 因此 dotcloud 主要是按內存收費 ) ubuntu

6docker disk 的管理比較有限 vim

7container 隨着用戶進程的中止而銷燬,container 中的 log 等用戶數據不便收集windows

3、docker與虛擬機比較

    docker的特色啓動快比虛擬機 , 能夠秒級啓動 對資源佔用小 , 宿主機上可運行千臺容器 方便用戶獲取 , 分佈 , 和更新應用鏡像 , 指令簡單 , 學習費用低 經過 Dockerfile 配置文件來靈活的自動建立和部署鏡像 & 容器 , 提升工做效 率 Docker 除了運行其中應用外 , 基本不消耗其餘系統資源 , 保證應用性能同時 , 儘可能減少系統開銷

4、docker相關網站

https://hub.docker.com/

https://docs.docker.com/

http://docs.docker-cn.com/ docker

5、docker安裝:

1、  yum install  docker -y

2、 二進制安裝

6、docker 鏡像

  鏡像(docker image--- Docker 運行容器以前須要本地存在鏡像,若本 能地不存在,那麼 Docker 會找默認鏡像倉庫( Docker Hub 公共註冊服務 器中的倉科)下載。

1) 下載鏡像

下載鏡像: #docker pull NAME:TAG 下載某個被打上了某個標籤的叫 ×× 名字 的鏡像

eg 

  docker pull ubuntulatest 若在下載時你未指定標籤,默認追加 latest標籤,表示庫中最新鏡像

 

 1、進入docker 官方鏡像倉庫

 

也能夠直接進入(網址:https://hub.docker.com/ 

2選擇一個鏡像

 

3、選擇一個鏡像 下載

docker  pull  nginx

2) 查看本地鏡像

docker  images

3)搜索一個鏡像

docker   search   mysql

4) 刪除本地鏡像

docker  rmi  nginx : latest

 7、docker鏡像分層

  docker鏡像的分層結構:支持經過擴展示有鏡像,建立新的鏡像

 

  新鏡像是從 base 鏡像一層一層疊加生成的。每安裝一個軟件,就在現有鏡像的基礎上增長一層。

分層結構的優點:

&1、共享資源:

  有多個鏡像都從相同的 base 鏡像構建而來,那麼 Docker Host 只需在磁盤上保存一份 base 鏡像;同時內存中也只需加載一份 base 鏡像,就能夠爲全部容器服務了。並且鏡像的每一層均可以被共享。

&2、可寫的容器層:

 當容器啓動時,一個新的可寫層被 加載到鏡像的頂部。這一層一般被 稱做容器層容器層之下 的都叫鏡像層。 全部對容器的改動。

 - 不管添加、刪除、仍是修改文件都只會發生在容器層中。 只有容器層是可寫的,容器層下面的全部鏡像層都是隻讀的。

這個特性。

鏡像層數量可能會不少,全部鏡像層會聯合在一塊兒組成一個統一的文件系統。 若是不一樣層中有一個相同路徑的文件,好比 /a,上層的 /a 會覆蓋下層的 /a, 也就是說用戶只能訪問到上層中的文件 /a。在容器層中,用戶看到的是一個疊 加以後的文件系統。

一、添加文件

在容器中建立文件時,新文件被添加到容器層中。

二、讀取文件

在容器中讀取某個文件時,Docker 會從上往下依次在各鏡像層中查找此文 件。一旦找到,打開並讀入內存。

三、修改文件

在容器中修改已存在的文件時,Docker 會從上往下依次在各鏡像層中查找此文件。一旦找到,當即將其複製到容器層,而後修改之。

四、刪除文件

在容器中刪除文件時,Docker 也是從上往下依次在鏡像層中查找此文件。 找到後,會在容器層中記錄下此刪除操做。

只有當須要修改時才複製一份數據,這種特性被稱做 Copy-on-Write。可見,容器層保存的是鏡像變化的部分,不會對鏡像自己進行任何修改。

8、docker鏡像的建立

建立鏡像的三種方法

1)基於修改後的容器建立:docker commit 命令

2)基於本地模板導入

3)基於 Dockerfile 文件建立

1) 基於修改後的容器建立:

1、下載一個centos 鏡像

 docker  pull centos

2、建立並啓動一個鏡像爲 centos 的容器

docker  run -it  centos:latest   /bin/bash     ( /bin/bash    環境變量)

3、退出容器

exit

4、查看全部的 容器

docker ps -a  ( 查看正在運行的容器,docker  -ps )

5、從新喚醒  剛纔啓動的容器

docker start  CONTAINER ID

6、進入容器 並建立一個文件

# 進入容器

docker  exec -it   CONTAINERID   /bin/bash

# 建立一個文件

 

7、退出容器到命令行界面

 

此時容器較鏡像已經發生改變,咱們以今生成新鏡像

8、生成新的鏡像

docker commit   f0decea12ae  centos7.1:latest

9、查看本地鏡像

docker images

生成了一個新的鏡像!

2)基於本地模板導入

1、導出:將鏡像保存爲本地文件

docker   save -o  centos.tar    centos7.1:latest   ( 也能夠  centios.tar.gz )

2、刪除 centos7.1 鏡像

docker  rmi  centos7.1: latest

3、導入:將壓縮包文件導入到本地鏡像列表

docker  load  -i   centos7.1.tar

3)基於 Dockerfile 文件建立

  Dockerfile 是一個文本文件,用來配置 image,記錄了鏡像構建的全部步驟。

  Docker 根據 該文件生成二進制的 image 文件

1、建立目錄dockerfile  並切換至此目錄

mkdir  dockerfile
cd  dockerfile

2、建立並編輯文件 dockerfile

# 建立

vim  dockerfile  

# 編輯內容以下

FROM centos:7
RUN yum install -y vim

3、建立鏡像

docker build -t centostest .

build:建立鏡像

-t:爲鏡像指定名字

 

注:

下面列出了 Dockerfile 中最經常使用的指令

FROM:指定 base 鏡像。

MAINTAINER:設置鏡像的做者,能夠是任意字符串。

COPY:將文件從 build context 複製到鏡像。

COPY 支持兩種形式:

COPY src dest

COPY ["src", "dest"]

注意:src 只能指定 build context 中的文件或目錄。

ADD:與 COPY 相似,從 build context 複製文件到鏡像。不一樣的是,若是 src 是歸檔文件(tar, zip, tgz, xz 等),文件會

被自動解壓到 dest

ENV:設置環境變量,環境變量可被後面的指令使用。

EXPOSE:指定容器中的進程會監聽某個端口,Docker 能夠將該端口暴露出來。咱們會在容器網絡部分詳細討論。

 VOLUME:將文件或目錄聲明爲 volume

 WORKDIR:爲後面的 RUN, CMD, ENTRYPOINT, ADD COPY 指令設置鏡像中的當前工做目錄。

RUN:在容器中運行指定的命令,RUN 指令一般用於安裝應用和軟件包。

 CMD:容器啓動時運行指定的命令。 Dockerfile 中能夠有多個 CMD 指令,但只有最後一個生效。CMD 能夠被 docker run 以後的參數替換。

 ENTRYPOINT:設置容器啓動時運行的命令,可以讓容器以應用程序或者服務的形式運行。 Dockerfile 中能夠有多個 ENTRYPOINT 指令,但只有最後一個生效。CMD docker run 以後的參數會被當作參數傳遞給 ENTRYPOINT

9、docker的使用

1、建立容器,create命令是建立並不啓動容器   (不經常使用)

docker create  -it centos7.1:latest

2、中止一個容器

docker    stop  CONTAINER ID   (kill)

3、啓動中止的容器

docker  start  CONTAINER ID    (重啓  restart)

注:非持久後臺守護狀態的虛擬機,在重啓後當你查看時仍是關閉狀態

4、運行一個容器

# docker run -ti centos:latest /bin/bash

建立並運行一個容器 ,此時你會直接被切換到容器中

#ctrl+d//exit退出,而且容器也退出

#ctrl+p+q退出容器,而且保持容器up的狀態

-t 分配一個僞終端

-i 讓容器的標準輸入持續打開

/bin/bash環境顯示

5、之後臺守護進程(Daemonized)形態運行

 

6、刪除一個容器

docker  rm  CONTAINER ID

-f 強制刪除處於運行中的容器

-l 刪除連接,保留容器

-v 刪除掛載的數據卷

 

7、進入容器

# 1  

docker attach直接進入容器 啓動命令的終端,不會啓動新的進程.

docker  attach  CONTAINER ID

&

docker run -d centos /bin/bash -c "while true;do sleep 1;echo I_am_docker;done"

 

&

#2  docker exec則是在容器中打開新的終端,而且能夠啓動新的進程

docker  exec  -it      CONTAINER ID   /bin/bash

8、導出容器:導出一個已經建立的容器到文件,無論容器是否運行

docker export  CONTAINER ID  > centos7.1.tar

9、將容器導入系統成爲鏡像

cat centos7.1.tar | docker import - test

 

10、查看容器日誌 (顯示容器啓動進程的控制檯輸出)

docker  logs  -f    CONTAINER ID

11、暫停容器

docker pause   CONTAINER ID

12、取消暫停 繼續運行容器

docker unpause   CONTAINER ID

10、docker鏡像的倉庫 --- repository的建立

倉庫分爲公共倉庫和私有倉庫

 DockerHub的官方倉庫 https://hub.docker.com

DockerPool社區倉庫 https://dl.dockerpool.com

Dockern Pool (http://dockerpool.com)是國內專業的Docker社區,目前 也提供了官方鏡像的下載管理服務

1、下載 registry 鏡像

 

2、利用容器啓用私有倉庫

docker run -d -p 5000:5000 -v /var/lib/registry:/var/lib/registry --restart=always --name registry registry:2

3、客戶端修改配置文件 /etc/docker/daemon.json

#  vim /etc/docker/daemon.json

# 添加如下內容

"insecure-registries": ["192.168.226.147:5000"],

4、客戶端: 重啓 docker

systemctl restart docker

5、客戶端:對鏡像進行更名

# docker tag nginx:latest 192.168.226.147:5000/nginx:latest

 

6、客戶端:上傳鏡像

docker push  192.168.226.147:5000/nginx:latest

7、客戶端:刪除已有鏡像

docker rmi  192.168.226.147:5000/nginx:latest
docker  rmi  nginx

8、客戶端:下載鏡像

docker  pull   192.168.226.147:5000/nginx:latest

下載成功,證實私有倉庫可用!

相關文章
相關標籤/搜索