下面我们来制作一个Nginx的镜像,通过编译安装方式来完成。
重新制作一个基础镜像
文件内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# Version: 0.0.1
# 指定使用哪个基础镜像
FROM centos:6.6
# 说明该镜像的制作者和联系方式
MAINTAINER Rex.chen rex.chen@aaa.com
#设置标签,不是必须的只是为了说明里面的版本查看起来方便
LABEL Discrition=
"更换了epel源,并安装了相应库和组件"
#备份系统默认的epel源,并设置新的EPEL源
RUN
cd
/etc/yum
.repos.d/
RUN [
"mv"
,
"/etc/yum.repos.d/CentOS-Base.repo"
,
"/etc/yum.repos.d/CentOS-Base.repo.bak"
]
COPY .
/Centos-6
.repo
/etc/yum
.repos.d
/CentOS-Base
.repo
RUN yum makecache
# 安装必要库和组件
RUN yum update -y && yum groupinstall -y
'Development Tools'
&& yum -y
install
wget \
libmcrypt-devel mhash-devel libxslt-devel \
libjpeg libjpeg-devel libpng libpng-devel \
freetype freetype-devel libxml2 libxml2-devel \
zlib zlib-devel glibc glibc-devel glib2 glib2-devel \
bzip2
bzip2
-devel ncurses ncurses-devel \
curl curl-devel e2fsprogs e2fsprogs-devel \
krb5 krb5-devel libidn libidn-devel openssl \
openssl-devel openldap-devel
#
RUN yum clean all
|
运行下面的命令制作镜像
我这里使用了-f来指定dockerfile
1
|
docker image build -t mycentos6:1.0 -f .
/buildProImange
.
|
制作Nginx镜像
基于上面的基础镜像来制作一个Nginx的基础镜像,我们通过编译安装的方式来完成。
看一下制作Nginx镜像的Dockerfile怎么写的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# Version: 0.0.1
# 指定使用哪个基础镜像
FROM mycentos6:1.0
# 说明该镜像的制作者和联系方式
MAINTAINER Rex.chen rex.chen@aaa.com
#设置标签,不是必须的只是为了说明里面的版本查看起来方便
LABEL Nginx=
"1.10.2"
# 建立用户和组
RUN [
"groupadd"
,
"-r"
,
"nginx"
]
RUN [
"useradd"
,
"-r"
,
"-g"
,
"nginx"
,
"-s"
,
"/sbin/nologin"
,
"nginx"
]
# 复制安装程序到指定目录,我这里使用COPY命令只是因为我要自行解压缩
ENV SOFT_DEST
/usr/local/src
ADD nginx
/nginx-1
.10.2.
tar
.gz $SOFT_DEST
ADD nginx
/openssl-1
.1.0c.
tar
.gz $SOFT_DEST
ADD nginx
/zlib-1
.2.11.
tar
.gz $SOFT_DEST
ADD nginx
/pcre-8
.39.
tar
.gz $SOFT_DEST
# 设置工作目录,这步可以不要
WORKDIR $SOFT_DEST
# 创建必要目录
RUN [
"mkdir"
,
"/var/tmp/nginx"
,
"-p"
]
RUN [
"mkdir"
,
"/var/run/nginx"
,
"-p"
]
RUN [
"mkdir"
,
"/var/log/nginx"
,
"-p"
]
RUN [
"mkdir"
,
"/var/lock/nginx"
,
"-p"
]
# 执行编译安装,这里一定要把进入目录和./configure以及后面的make和make install写在
#一起,否则会提示找不到,因为每一个命令都是一层镜像
RUN
cd
.
/nginx-1
.10.2 && .
/configure
\
--prefix=
/usr/nginx/
\
--sbin-path=
/usr/sbin/nginx
\
--conf-path=
/etc/nginx/nginx
.conf \
--error-log-path=
/var/log/nginx/error
.log \
--http-log-path=
/var/log/nginx/access
.log \
--pid-path=
/var/run/nginx/nginx
.pid \
--lock-path=
/var/lock/nginx/nginx
.lock \
--user=nginx --group=nginx \
--with-
file
-aio --with-threads \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_v2_module \
--with-http_realip_module \
--http-client-body-temp-path=
/var/tmp/nginx/client/
\
--http-proxy-temp-path=
/var/tmp/nginx/proxy/
\
--http-fastcgi-temp-path=
/var/tmp/nginx/fcgi/
\
--http-uwsgi-temp-path=
/var/tmp/nginx/uwsgi/
\
--http-scgi-temp-path=
/var/tmp/nginx/scgi/
\
--with-openssl=
/usr/local/src/openssl-1
.1.0c \
--with-zlib=
/usr/local/src/zlib-1
.2.11 \
--with-pcre=
/usr/local/src/pcre-8
.39 &&
make
&&
make
install
EXPOSE 80
|
制作Nginx镜像
1
|
docker image build -t nginx:1.0 -f .
/nginxDockerfile
.
|
上面是制作Nginx的基础镜像,下面我们就基于这个镜像来制作服务容器,因为Nginx镜像是可以重复使用的,个性化的东西要单独来做,Nginx在容器中通常是作为WEB服务器来运行的而不是反向代理。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# Version: 0.0.1
# 指定使用哪个基础镜像
FROM nginx:1.0
# 说明该镜像的制作者和联系方式
MAINTAINER Rex.chen rex.chen@aaa.com
#设置标签,不是必须的只是为了说明里面的版本查看起来方便
LABEL Nginx=
"1.10.2"
# 在容器中建立挂载点,主要用于日志文件和网页文件
VOLUME [
"/var/nginx"
]
# 设置工作目录,不是必须的
WORKDIR
/var/nginx
# 拷贝nginx配置文件到容器中
ADD nginx
/nginx
.conf
/etc/nginx/nginx
.conf
# 指定在容器启动时执行的命令
CMD [
"/usr/sbin/nginx"
]
|
然后你需要在宿主机上的/var/nginx中建立2个目录一个是log一个是www,www目录存放页面文件
另外Nginx需要非守护进程方式启动,你只需在配置文件中加入daemon off;即可,如下图:
下面是Nginx的日志和网页文件的配置
制作镜像
1
|
docker image build -t webservices:1.0 -f .
/nginxSrv
.
|
运行容器
1
|
docker run --name webSrv01 -d -p 80 -
v
/var/nginx/
:
/var/nginx/
webservices:1.0
|
测试连接
从本地看一下是否有日志文件呢:
我们这里用了一个新的参数就是-v,这个参数的作用就是把本地目录挂载到容器中,使用方法如下:
1
2
|
-
v
/PATH
本地路径:
/PATH
容器路径:<ro|rw>
#后面的<ro|rw>是设置读写权限,默认是可读写
|
这个参数后面只能挂载一个目录到容器,通过docker inspect查看,默认是读写权限
如果以后要修改网页内容,那么你只需修改/var/nginx/www目录下修改就好。
本文转自linuxjavachen 51CTO博客,原文链接:http://blog.51cto.com/littledevil/1916292,如需转载请自行联系原作者