1. 程式人生 > >docker 基礎教程-入門:(三)--簡單製作映象

docker 基礎教程-入門:(三)--簡單製作映象

前言

           一般情況下,我們中直接使用docker官網的庫,就可以找到我們日常開發中需要的映象,比如:ubuntu、tomcat、apache、nginx、php、mysql、redis、postgresql等等,但是如果docker庫裡沒有我們需要的映象呢。

docker庫裡已經存在的映象操作都比較類似:如下,比如需要

1、先搜尋目前已經存在在docker庫裡的不同版本不同型別的搜尋映象

       docker search redis

2、然後pull下來:3.2是版本號

        docker pull redis:3.2

當然你也可以修改本機和映象對映的埠號:

這裡我們以postgres為例: 1、docker安裝postgresql       docker pull postgres:10 2、將docker中的資料庫對映到主機的54321上      sudo docker run --name postgres -e POSTGRES_PASSWORD=123456 -p 54321:5432 -d postgres:10          --name,指定建立的容器的名字;          -e POSTGRES_PASSWORD=password,設定環境變數,指定資料庫的登入口令為password;          -p 54321:5432,埠對映將容器的5432埠對映到外部機器的54321埠;          -d postgres:9.4,指定使用postgres:10作為映象。

基礎的自己製作映象

這裡我們通過Dockerfile的定義檔案和docker build命令來構建映象         這是一種推薦的構建映象的方式,Dockerfile使用基本的基於DSL語法的指令來構建一個Docker映象,之後使用docker build命令基於該Dockerfile中的指令構建一個新的映象。

製作映象的方法:

1、隨便新建一個目錄,(解釋:這個目錄就是我們的構建環境,docker構建時,就會將構建環境的檔案上傳到docker的守護程序中。)在這個新建目錄下新建一個檔案Dockerfile,如下命令,並在檔案中寫入  # Version: 1.0.0...等資料。

      gedit Dockerfile

# Version: 1.0.0
#指令從上往下執行,每條指令都會常見一個新的映象層



#從哪個基礎映象執行一個容器
FROM ubuntu:latest

#該映象作者是誰,以及聯絡方式
MAINTAINER Bourbon Tian "[email protected]"

#RUN指令是指在當前映象中執行的命令,更新APT倉庫
RUN apt-get update

#安裝nginx包
RUN apt-get install -y nginx

#在此目錄下新建頁面,並寫入一點內容
RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.html

#指定80埠作為容器內應用程式的埠號。
EXPOSE 80

2、構建

sudo docker build -t="test/mydocker:new" ./mydocker

  -t:是為新映象設定倉庫和名稱,倉庫:test/mydocker,

  ./mydocker就是docker映象環境,會在這個目錄根據Dockerfile構建映象,這裡也可以指定一個git地址。

   :new是為映象設定一個標籤。

   注意:如果安裝失敗,也就是沒有出現下面步驟3類似的結果時,再次構建時需要清楚快取,具體如下:

sudo docker build  --no-cache -t="test/mydocker:new" ./mydocker

 快取作用:如果Dockerfile檔案新增一行:ENV HUANJINGBIANLIANG env_shi_shezhi_huanjingbianliang

                   Docker在命中ENV指令時開始重置這個快取,會執行這一行以後的指令。

3、驗證

    執行完步驟2中的操作,如果成功會返回類是如下的資訊

Successfully built eaec01bc28a0
Successfully tagged mydocker:latest

 帶互動的執行,其中 eaec01bc28a0 就是你本次新建容器的id,可以使用一下命令執行這個容器

docker run -t -i eaec01bc28a0  /bin/bash

 帶互動的執行

sudo docker run -d -p 80 --name mydocker test/mydocker nginx -g "daemon off;"

     -d:後臺執行,

      -p: 指定docker執行時公開哪些埠給主機,

       nginx -g "daemon off;":是在容器內執行的命令。

這時候我們執行一下命令就可以看到容器80埠和主機哪埠已經對映

sudo docker ps -l

結果:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES b25aa96fcb08        mydocker            "nginx -g 'daemon of…"   4 minutes ago       Up 4 minutes        0.0.0.0:32769->80/tcp   mydocker

於是乎我們在主機瀏覽器輸入:http://localhost:32769/ 就可以看到ngnix主頁了。當然這個主機對映埠隨機生成的,我們也可以指定,停掉容器並刪除映象,刪除映象的命令是:rmi 後面加上映象id,執行如下命令就ok。如果將p改為大寫,會將Dockerfile檔案中EXPOSE指令指定的其他埠也一併公開,此時訪問就可以看到我們開始自己寫的頁面了。

sudo docker run -d -p 8099:80 --name mydocker test/mydocker nginx -g "daemon off;"

檢視指定映象:

docker images test/mydocker

    結果:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE test/mydocker           new                 aa7224c55c6e        9 seconds ago       186MB