用Dockerfile搭建一个具有apache服务的基础Ubuntu镜像并上传

1.创建文件目录与文件

创建所需的目录apache_ubuntu用于存放Dockerfile和相关文件。

$ mkdir apache_ubuntu/
$ cd apache_ubuntu/
$ touch Dockerfile sources.list

2. 修改sources.list文件

修改sources.list文件以更换docker的镜像源。此处用户请自行修改对应源,作者基础镜像为ubuntu14.04。

deb http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty main restricted universe multiverse
#deb-src http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty main restricted universe multiverse

deb http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty-security main restricted universe multiverse
#deb-src http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty-security main restricted universe multiverse

deb http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty-updates main restricted universe multiverse
#deb-src http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty-updates main restricted universe multiverse

#deb http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty-backports main restricted universe multiverse
#deb-src http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty-backports main restricted universe multiverse

#deb http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty-proposed main restricted universe multiverse
#deb-src http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty-proposed main restricted universe multiverse

3. Dockerfile文件内容

# build Apache image
#
# VERSION 1.0

FROM ubuntu:14.04
MAINTAINER NSS/Czh

COPY    ./sources.list /etc/apt/sources.list
RUN     apt-get update \
        && echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d \
        && DEBIAN_FRONTEND="noninteractive" apt-get install -qy apache2 \
        && rm -rf /var/lib/apt/lists/*

#注意这里要更改系统的时区设置,因为在 web 应用中经常会用到时区这个系统变量
RUN     echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata

#添加一个示例的web站点,删掉默认安装在apache文件下面的文件,并将添加的示例用软链接链接到/var/www/html目录下面
RUN     mkdir -p /var/lock/apache2
#设置一些apache 的环境变量,可以在启动的时候用 -e 改变
ENV     APACHE_RUN_USER=www-data \
        APACHE_RUN_GROUP=www-data \
        APACHE_LOG_DIR=/var/log/apache2 \
        APACHE_PID_FILE=/var/run/apache2.pid \
        APACHE_RUN_DIR=/var/run/apache2 \
        APACHE_LOCK_DIR=/var/lock/apache2 \
        APACHE_SERVERADMIN=admin@localhost \
        APACHE_SERVERNAME=localhost \
        APACHE_SERVERALIAS=docker.localhost \
        APACHE_DOCUMENTROOT=/var/www

EXPOSE  80
CMD     ["apache2","-D","FOREGROUND"]

启动/停止ssh服务,可以将 /usr/sbin/policy-rc.d 文件中的返回值改为0。echo “#!/bin/sh\nexit 0” > /usr/sbin/policy-rc.d。参考文章docker报错:invoke-rc.d: policy-rc.d denied execution of start.
设置DEBIAN_FRONTEND环境变量为noninteractive后,会进行静默安装(非交互模式),非交互模式会选择默认的选项并以最快的速度完成构建。请确保只在Dockerfile中调用的RUN命令中设置了该选项,而不是使用ENV命令进行全局的设置。因为ENV命令在整个容器运行过程中都会生效,所以当你通过BASH和容器进行交互时,如果进行了全局设置那就会出问题。(此处不加DEBIAN_FRONTEND="noninteractive"也可正常运行,暂时不清楚原因),参考文章ubuntu DEBIAN_FRONTEND环境变量用法

4.创建镜像

因为之前创建过所以有cache

$ docker build -t apache:ubuntu .
Sending build context to Docker daemon  4.608kB
Step 1/9 : FROM ubuntu:14.04
 ---> 2c5e00d77a67
Step 2/9 : MAINTAINER NSS/Czh
 ---> Using cache
 ---> 5097a7552add
Step 3/9 : COPY    ./sources.list /etc/apt/sources.list
 ---> Using cache
 ---> 8312d88d1cd1
Step 4/9 : RUN	apt-get update 	&& echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d 	&& DEBIAN_FRONTEND="noninteractive" apt-get install -qy apache2 	&& rm -rf /var/lib/apt/lists/*
 ---> Using cache
 ---> 9183620d4b0a
Step 5/9 : RUN	echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata
 ---> Using cache
 ---> b0374a3a36ad
Step 6/9 : RUN	mkdir -p /var/lock/apache2
 ---> Using cache
 ---> 768e4b2ab041
Step 7/9 : ENV 	APACHE_RUN_USER=www-data 	APACHE_RUN_GROUP=www-data 	APACHE_LOG_DIR=/var/log/apache2 	APACHE_PID_FILE=/var/run/apache2.pid 	APACHE_RUN_DIR=/var/run/apache2   APACHE_LOCK_DIR=/var/lock/apache2 	APACHE_SERVERADMIN=admin@localhost 	APACHE_SERVERNAME=localhost 	APACHE_SERVERALIAS=docker.localhost 	APACHE_DOCUMENTROOT=/var/www
 ---> Using cache
 ---> 2e3b05cdfb2c
Step 8/9 : EXPOSE	80
 ---> Using cache
 ---> 0c4c1d73fde2
Step 9/9 : CMD	["apache2","-D","FOREGROUND"]
 ---> Using cache
 ---> fa65684fa65c
Successfully built fa65684fa65c
Successfully tagged apache:ubuntu


可以使用docker images命令看到当前创建镜像

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
apache              ubuntu              fa65684fa65c        2 days ago          205MB

5.测试镜像,运行容器

我们运行apache镜像,启动一个命令,用docker ps -a查看所有容器

$ docker run -d -P apache:ubuntu
0e9870d5d46f47b9dfe028fdccc45d20b8ecfa02c8fcbd73d6b27174941ef398
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS                   NAMES
0e9870d5d46f        apache:ubuntu       "apache2 -D FOREGROU…"   32 seconds ago      Up 30 seconds             0.0.0.0:32775->80/tcp   flamboyant_northcutt

此时容器已正常运行。
测试:
在浏览器输入容器所在ip+端口号:http://192.168.8.95:32775/,可以看到apache初始页面,创建成功。

6.上传镜像

上传镜像到docker hub仓库,需要修改REPOSTORY为用户docker id。参考文章Docker中上传镜像到docker hub中

$ docker tag apache:ubuntu nssczh/apache:ubuntu
#登录docker
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: nssczh
Password:
Login Succeeded
#上传镜像
$ docker push nssczh/apache:ubuntu
The push refers to repository [docker.io/nssczh/apache]
2dfc48cbe49f: Pushed 
caf6b0b790d5: Pushed 
7299478dac91: Pushed 
66285ac4bf24: Pushed 
48334332ed8d: Pushed 
46c1a22ffea5: Pushed 
b057ab380990: Pushed 
ubuntu: digest: sha256:377e221d9495cfdad933fc94f0b7cc4a0c66f3ec71933f0ff7e0727d61108e3b size: 1780
#可以用docker search 查找到所上传镜像
$ docker search nssczh
NAME                DESCRIPTION                          STARS               OFFICIAL            AUTOMATED
nssczh/apache       build apache images in ubuntu14.04   0                                       
nssczh/test                                              0                                       

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值