docker 安裝Nginx鏡像demo

 爲了更好的理解,在正式開始之前,先熟悉下相關概念

鏡像(Image)、容器(Container)、倉庫(Repository)。

1.1鏡像

   docker鏡像是使用Dockerfile腳本,將你的應用以及應用的依賴包構建而成的一個應用包,它通常帶有該應用的啓動命令。而這些命令會在容器啓動時被執行,也就是說你的應用在啓動容器時被啓動。

鏡像的創建,需要通過配置Dockerfile腳本,然後執行docker build命令來創建。

1.2 容器

 容器提供的核心概念是隔離,提供三種隔離類型:

  • 工作區隔離(流程、網絡)
  • 資源隔離(cpu\內存)
  • 文件系統隔離(聯合文件系統)

不僅可以分發應用程序,還可以以實用的方式交付運行應用程序所需的整個環境。

  容器是使用 docker run --name 容器名 鏡像 命令創建的,獨立於宿主機(服務器)的沙箱,也可以理解爲一個帶有特殊結構的盒子,主要作用就在於給鏡像提供運行空間和環境,並執行鏡像的指令。

1.3 倉庫

  不是存容器,而是存儲docker鏡像。

可以把docker鏡像通過push命令推送到docker倉庫,也可以通過用docker命令pull 把鏡像拉取下來。

關係

使用docker前,你必須先安裝它。

首先要有鏡像,有了鏡像才能基於鏡像創建容器,才能把鏡像存儲在倉庫。(鏡像是基礎,容器是鏡像使用者,倉庫是鏡像的管理員。)

 基礎鏡像通常不需要自己創建,docker官方有提供很多基礎鏡像供用戶使用,比如nodejs鏡像,java鏡像,mongodb鏡像,nginx鏡像等等

二  鏡像

而創建鏡像,首先得配置Dockerfile腳本。鏡像是基於Dockerfile腳本來構建的。

2.1 基礎鏡像

  docker有這麼一種機制,在構建鏡像時,它可以依賴一個父鏡像作爲底層鏡像,與當前正要被構建的鏡像一起打包,從而構建成一個全新的鏡像。而這個被用作依賴的父鏡像,就是基礎鏡像。

  可以理解爲,一個應用它不是隨處可運行的,它的運行需要依賴操作系統環境和對應的依賴().

  • 因此,在配置項目Dockerfile創建鏡像腳本之前,需要先確立一個基礎鏡像。主要是通過在Dockerfile腳本中使用From命令指定依賴一個父鏡像(基礎鏡像)。
  • 基礎鏡像通常不需要自己創建,docker官方有提供很多基礎鏡像供用戶使用,比如nodejs鏡像,java鏡像,mongodb鏡像,nginx鏡像等等.

2.2 Dockerfile腳本構成

docker鏡像是通過配置Dockerfile腳本,然後執行docker build命令來創建的。

Dockerfile腳本通常分爲以下四部分:

  • 基礎鏡像信息   --只有一個From指令,指定依賴的基礎鏡像
  • 維護者信息      --只有一個MAINTAINER指令,用於描述該鏡像的維護者信息
  • 鏡像操作指令   --很多:
  • 容器啓動時執行的指令 
    • --CMD 每個 Dockerfile 只能有一條 CMD 命令,可被 docker run 提供的參數覆蓋。
    • ENTRYPOINT 它不會被 docker run 提供的參數覆蓋

以下介紹鏡像操作指令:

COPY
COPY指令用於拷貝宿主機的源目錄/文件到容器內的某個目錄。接受兩個參數,源目錄路徑和容器內目錄路徑。

ADD
功能和用法與COPY指令基本相同,不同在於使用ADD指令拷貝時,如果拷貝的是壓縮文件,拷貝到容器中時會自動解壓爲目錄。

WORKDIR
指定RUN、CMD、ENTRYPOINT 指令的工作目錄

RUN
RUN是核心指令,它接受命令作爲參數並用於創建鏡像。命令較多時可用""換行。

USER
USER命令用於設置運行容器的UID。

VOLUME
VOLUME命令用於讓你的容器訪問宿主機上的目錄。一般用來存放數據庫和需要保持的數據等

ONBUILD
配置當所創建的鏡像作爲其它新創建鏡像的基礎鏡像時,所執行的操作指令。

ENV
ENV命令用於設置環境變量,在容器內被腳本或者程序調用。

EXPOSE
EXPOSE用來指定端口,使容器內的應用可以通過端口和外界交互。

 

2.3 鏡像的創建

鏡像是基於Dockerfile腳本,使用docker build命令創建的。上面已經對Dockerfile做了介紹。下面來說說如何使用Dockerfile腳本創建。
語法:

 docker build [OPTIONS] PATH

PATH爲Dockerfile腳本所在的目錄,通常放在項目根目錄下,使用"."表示。
-t 標記,用來添加tag,指定新的鏡像信息,比如鏡像名稱,標籤。

2.4  本地鏡像的管理

  • 1,查看鏡像:docker images
  • 2,刪除鏡像:docker rmi 鏡像
  • 3,鏡像重命名:docker tag 原鏡像tag 新鏡像tag
  • 4,查看鏡像創建歷史:docker history 鏡像
  • 5,鏡像歸檔:docker save 鏡像
  • 6,基於歸檔文件創建鏡像:docker import 歸檔文件 新鏡像tag

2.5  鏡像的使用

鏡像通過docker run命令使用的,這是關於容器部分的操作。

 

三 demo驗證

我本地做測試用的:Nginx demo

我們要部署的服務是用 Nginx 來 server 一個簡單的 HTML 文件 html/index.html

 

3.1 準備工作,打開一個終端:

$ mkdir docker-demo
$ cd docker-demo
$ mkdir html
$ echo '<h1>Hello Docker!</h1>' > html/index.html

生成一個頁面。

3.2 接下來在當前目錄創建一個叫 Dockerfile 的新文件

FROM nginx
COPY html/* /usr/share/nginx/html

from 相關知識參照上一篇。

第二行把我們的靜態文件複製到鏡像的 /usr/share/nginx/html 目錄下。也就是 Nginx 尋找靜態文件的目錄。

3.3 構建鏡像

$ docker build -t docker-demo:0.1 .

最好在剛纔創建的這個目錄中運行 docker build。如果是其他目錄,docker 會把當前目錄的所有文件作爲上下文發送給負責構建的後臺進程。

3.4. 查看鏡像

docker image ls

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

docker-demo         0.1                 54c5fe4fd4d0        13 minutes ago      126MB

nginx               latest              c7460dfcab50        6 days ago          126MB

這行命令中的名稱 docker-demo 可以理解爲這個鏡像對應的應用名或服務名,0.1 是標籤。

3.5. 運行鏡像

docker run --name docker-demo -d -p 8080:80 docker-demo:0.1

打開瀏覽器,輸入:http://127.0.0.1:8080/

查看 運行的容器

docker container ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES

5c95072fb6ac        docker-demo:0.1     "nginx -g 'daemon of…"   4 minutes ago       Up 4 minutes        0.0.0.0:8080->80/tcp   docker-demo

如果要停止並 刪除

$ docker container stop docker-demo
$ docker container rm docker-demo

發佈了505 篇原創文章 · 獲贊 84 · 訪問量 53萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章