1. 程式人生 > >7 docker-使用dockerfile創建鏡像

7 docker-使用dockerfile創建鏡像

docker

在前面的實驗中我們多次用到的 Dockerfile,在本實驗裏我們將通過完成一個實例來學習Dockerfile的編寫。

本節中,我們需要依次完成下面幾項任務:

Dockerfile 基本框架
Dockerfile 編寫常用命令
從 Dockerfile 構建鏡像

本次實驗的需求是完成一個Dockerfile,通過該Dockerfile創建一個Web應用,該web應用為apache托管的一個靜態頁面網站,
換句話說,我們寫一個Dockerfile,用來創建一個實驗樓公司的網站應用,就是http://www.simplecloud.cn這個站點。這個站點是純靜態的頁面,
我們也可以直接下載得到。



一、實驗準備

1、創建 Dockerfile 文件

首先,需要創建一個目錄來存放 Dockerfile 文件,目錄名稱可以任意,在目錄裏創建Dockerfile文件:

cd /home/shiyanlou
mkdir shiyanloutest
cd shiyanloutest
touch Dockerfile

使用vim/gedit編輯Dockerfile文件,根據我們的需求輸入內容。

二、Dockerfile 基本框架

Dockerfile一般包含下面幾個部分:

基礎鏡像:以哪個鏡像作為基礎進行制作,用法是FROM 基礎鏡像名稱
維護者信息:需要寫下該Dockerfile編寫人的姓名或郵箱,用法是MANITAINER 名字/郵箱
鏡像操作命令:對基礎鏡像要進行的改造命令,比如安裝新的軟件,進行哪些特殊配置等,常見的是RUN 命令
容器啟動命令:當基於該鏡像的容器啟動時需要執行哪些命令,常見的是CMD 命令或ENTRYPOINT

在本節實驗中,我們依次先把這四項信息填入文檔。Dockerfile中的#標誌後面為註釋,可以不用寫,另外實驗樓的環境不支持中文輸入,比較可惜。

依次輸入下面的基本框架內容:
# Version 0.1

# 基礎鏡像
FROM ubuntu:latest

# 維護者信息
MAINTAINER [email protected]

# 鏡像操作命令
RUN apt-get -yqq update && apt-get install -yqq apache2 && apt-get clean

# 容器啟動命令
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

編寫完畢後,wq 保存並關閉vim


上面的Dockerfile非常簡單,創建了一個apache的鏡像。包含了最基本的四項信息。

其中FROM指定基礎鏡像,如果鏡像名稱中沒有制定TAG,默認為latest。RUN命令默認使用/bin/sh Shell執行,默認為root權限。如果命令過長需要換行,需要在行末尾加\。CMD命令也是默認在/bin/sh中執行,並且默認只能有一條,如果是多條CMD命令則只有最後一條執行。用戶也可以在docker run命令創建容器時指定新的CMD命令來覆蓋Dockerfile裏的CMD。

這個Dockerfile已經可以使用docker build創建新鏡像了,先構建一個版本shiyanloutest:0.1:

cd /home/shiyanlou/shiyanloutest
docker build -t shiyanloutest:0.1 . #這條命令後面有一個點

構建需要安裝apache2,會花幾分鐘,最後查看新創建的鏡像。

查看一下:
[email protected]:/home/shiyanlou# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
shiyanlou 0.1 180fc6391467 About a minute ago 257.8 MB #這個images就是用dockerfile創建的

使用該鏡像創建容器web1,將容器中的端口80映射到本地80端口:
[email protected]:/home/shiyanlou# docker run -d -p 80:80 --name web1 shiyanlou:0.1
cd8cd88f8bc999a075028090068ce507cf62e0c4c8d67d24ee18178977dd947d

使用實驗環境桌面上的firefox瀏覽器打開localhost進行測試,查看是否apache已運行

那麽,也可以進入容器:
[email protected]:/home/shiyanlou# docker exec -ti web1 /bin/bash
[email protected]:/# ps -aux #進入容器後查看所運行的進程
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 4512 1740 ? Ss 05:22 0:00 /bin/sh /usr/sbin/apache2ctl -D FOREGROUND
root 18 0.0 0.2 71588 4928 ? S 05:22 0:00 /usr/sbin/apache2 -D FOREGROUND
www-data 19 0.0 0.3 491896 6836 ? Sl 05:22 0:00 /usr/sbin/apache2 -D FOREGROUND
www-data 20 0.0 0.3 360744 6116 ? Sl 05:22 0:00 /usr/sbin/apache2 -D FOREGROUND
root 75 0.0 0.1 18212 3248 ? Ss 05:24 0:00 /bin/bash
root 101 0.0 0.1 34428 2908 ? R+ 05:25 0:00 ps -aux
[email protected]:/#

本文出自 “Fresh Air Team” 博客,請務必保留此出處http://freshair.blog.51cto.com/8272891/1958351

7 docker-使用dockerfile創建鏡像