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

4万+

被折叠的 条评论
为什么被折叠?



