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