天天看點

【系列2】使用Dockerfile建立帶Apache服務的Centos Docker鏡像

      這裡将展示使用Dockerfile來建立帶Apache服務的Docker鏡像的具體過程。

  (1) Apache

 這裡将展示使用Dockerfile來建立帶Apache服務的Docker鏡像的具體過程。

 準備工作:

 首先,建立一個apache_centos工作目錄,在其中

[root@docker1 ~]# mkdir apache_centos && cd apache_centos

[root@docker1 apache_centos]# touch Dockerfile run.sh

[root@docker1 apache_centos]# mkdir sample

-------------------------------------------------------------------------------------------------------------------------------

下面是Dockerfile的内容和各個部分的說明:

[root@docker1 apache_centos]# cat Dockerfile 

FROM docker.io/centos:latest

#設定繼承來自我們建立的centos:latest鏡像

MAINTAINER waitfish from dockerpool.com

#建立者的基本資訊

#設定環境變量,所有操作都是非互動式的

ENV DEBIAN_FRONTEND noninteractive

RUN echo "Asia/Shanghai" > /etc/timezone #&& \

        # dpkg-reconfigure -f noninteractive tzdata      #這也是設定時區的

#注意這裡要更改系統的時區設定,因為在Web應用中經常會用到時區這個系統變量,預設的centos會讓你的應用此程式發生不可思議的效果哦

#安裝wget

RUN yum update

RUN yum install -y wget

WORKDIR /usr/local/src

#下載下傳并解壓源碼包

RUN wget http://mirrors.shuosc.org/apache//httpd/httpd-2.2.34.tar.gz

RUN tar -xf httpd-2.2.34.tar.gz

WORKDIR httpd-2.2.34

#編譯安裝apache

RUN yum install -y gcc make apr-devel apr apr-util apr-util-devel pcre-devel

RUN ./configure --prefix=/usr/local/apache2 --enable-mods-shared=most --enable-so

RUN make

RUN make install

#修改apache配置檔案

RUN sed -i 's/#ServerName www.example.com:80/ServerName localhost:80/g' /usr/local/apache2/conf/httpd.conf

#啟動apache服務

RUN /usr/local/apache2/bin/httpd

#複制服務啟動腳本并設定權限

ADD run.sh /usr/local/sbin/run.sh

RUN chmod 755 /usr/local/sbin/run.sh

#添加一個示例的Web站點,删除預設安裝在apache檔案夾下面的檔案,并将我們添加的執行個體用軟連結到/var/www/html目錄下面

RUN mkdir -p /app && rm -fr /usr/local/apache2/html && ln -s /app /usr/local/apache2/html

COPY sample/ /app

#開放80端口

EXPOSE 80

WORKDIR /app

CMD ["/usr/local/sbin/run.sh"]

--------------------------------------------------------------------------------------------------------------------------------------

這個sample站點的内容很簡單,就輸出一句話Hello Docker! 在sample目錄下建立index.html檔案,内容為:

[root@docker1 apache_centos]# cd sample/

[root@docker1 sample]# vim index.html

<!DOCTYPE html>

<html>

<body>

<p>Hello, Docker!</p>

</body>

</html>

run.sh腳本内容也很簡單,隻是啟動Apache服務:

[root@docker1 apache_centos]# vim run.sh 

#!/bin/bash

/usr/sbin/sshd &

/usr/local/apache2/bin/httpd -D FOREGROUND

此時,apache_centos目錄下面的檔案結構為:

[root@docker1 apache_centos]# tree

.

├── Dockerfile

├── run.sh

└── sample

   └── index.html

1 directory, 3 files

建立apache:centos鏡像

使用docker build指令建立apache:centos鏡像,注意指令最後的"."。

[root@docker1 apache_centos]# docker build -t apache:centos .

......

Successfully built ......  表示建立鏡像成功

此時鏡像已經建立成功了。下面,檢視本地已有的鏡像清單,可見新增的apache:centos鏡像:

[root@docker1 apache_centos]# docker images

REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE

apache               centos              fe364d4ee9ec        5 minutes ago       419.1 MB

[root@docker1 apache_centos]# docker run -d -P apache:centos

0fadd02039d6b16ae308faada8497f3ab9d72de73d5dd36a655e188eee9f1859

[root@docker1 apache_centos]# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                          NAMES

0fadd02039d6        apache:centos       "/usr/local/sbin/run."   4 seconds ago       Up 3 seconds        0.0.0.0:32769->22/tcp, 0.0.0.0:32768->80/tcp   happy_jones

[root@docker1 apache_centos]# curl 127.0.0.1:32768

<html><body><h1>It works!</h1></body></html>

Docker建立的鏡像具有繼承性

[root@docker1 apache_centos]# docker port 0fadd02039d6 

22/tcp -> 0.0.0.0:32769

80/tcp -> 0.0.0.0:32768

預設會同時啟動SSH和Apache服務。

映射本地目錄

[root@docker1 apache_centos]# docker run -i -d -p 100:80 -p 103:22 -e APACHE_SERVERNAME=test -v `pwd`/www:/var/www:ro apache:centos

f452f8f192bfda6fa5830ee67cac03694279a10e10c20e6d1c162aa863735a63

[root@docker1 www]# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                      NAMES

f452f8f192bf        apache:centos       "/usr/local/sbin/run."   37 minutes ago      Up 37 minutes       0.0.0.0:103->22/tcp, 0.0.0.0:100->80/tcp   amazing_mcnulty

[root@docker1 www]# docker rm f452f8f192bf 

Error response from daemon: You cannot remove a running container f452f8f192bfda6fa5830ee67cac03694279a10e10c20e6d1c162aa863735a63. Stop the container before attempting removal or use -f

[root@docker1 www]# docker stop f452f8f192bf 

f452f8f192bf

[root@docker1 apache_centos]# ls    #會自動在目前目錄建立www目錄,放上自定義的頁面index.html,内容為:

Dockerfile  httpd  run.sh  sample  www

以上錯誤:apache的頁面目錄為/usr/local/apache2/html

[root@docker1 www]# docker run -i -d -p 100:80 -p 103:22 -e APACHE_SERVERNAME=test -v `pwd`/www:/usr/local/apache2/html:ro apache:centos

ab27e092fef8513ffe89c3f81498fe1b097e48d82dcdb3292059e8475a97d37e

…………………………………………………………………………………………………………………………………………

本文轉自 Mr_sheng 51CTO部落格,原文連結:http://blog.51cto.com/sf1314/1980710