【Dockerfile】使用Dockerfile创建带nginx服务的Centos Docker镜像
在宿主机上准备的文件清单:
Dockerfile
#启动ssh和apache服务的角本
run.sh
以上文件都放到/root/nginx_centos目录下
mkdir -p /root/nginx_centos
cd /root/nginx_centos
一、准备run.sh文件
在/root/nginx_centos目录新建run.sh
vim run.sh
角本内容如下:
#!/bin/bash
/usr/sbin/sshd &
/usr/local/nginx/sbin/nginx
二、准备Dockerfile
在/root/nginx_centos目录新建Dockerfile
vim Dockerfile
文件内容如下:
#新生成的镜像是基于sshd:dockerfile镜像
FROM sshd-centos
MAINTAINER by cmzsteven
WORKDIR /usr/local/src
#安装wget
RUN yum install -y wget
#下载并解压源码包
RUN wget http://nginx.org/download/nginx-1.8.0.tar.gz
RUN tar -zxvf nginx-1.8.0.tar.gz
WORKDIR nginx-1.8.0
#编译安装nginx
RUN yum install -y gcc make pcre-devel zlib-devel
RUN ./configure --prefix=/usr/local/nginx --with-pcre
RUN make
RUN make install
#启动Nginx服务
RUN /usr/local/nginx/sbin/nginx
#修改Nginx配置文件,以非daemon方式启动
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
#复制服务启动脚本并设置权限
ADD run.sh /usr/local/sbin/run.sh
RUN chmod 755 /usr/local/sbin/run.sh
#设置生成容器时需要执行的脚本
CMD ["/usr/local/sbin/run.sh"]
#开放22、80、443端口
EXPOSE 22
EXPOSE 80
EXPOSE 443
需要注意的是:在Dockerfile文件中更换当前目录不可以用“cd”命令,而要改用“WORKDIR”.
三、根据Dockerfile生成镜像
docker build -t nginx_dockerfile:centos .
查看镜像:
[root@localhost nginx_centos]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
nginx_dockerfile centos 9ad55461b2fe 5 minutes ago 386.1 MB
nginx centos b738cec02b29 47 minutes ago 369.9 MB
sshd-centos latest 64136bdc0cc8 46 hours ago 261.8 MB
centos latest 0f73ae75014f 5 weeks ago 172.3 MB
四、根据镜像生成的容器并进行测试
1、生成新的容器
[root@localhost nginx_centos]#docker run -d -p 2224:22 -p 8001:80 -p 4443:443 nginx_dockerfile:centos /usr/local/sbin/run.sh
将容器的22端口、80端口和443端口分别映射到到宿主机上的2224端口、8001端口和4443端口,并运行服务脚本。
也可以使用-P参数来让系统随机指定端口映射到22、80和443端口:
docker run -d -P nginx_dockerfile:centos
因为在Dockerfile中指定了EXPOSE所以系统会自动将指定的端口映射出来;同时使用CMD来指定生成容器时所需要执行的角本,所以这里省略了“/usr/local/sbin/run.sh”。
2、查看新生成的容器:
[root@localhost nginx_centos]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
c69d42541f52 nginx_dockerfile:centos "/usr/local/sbin/run 26 seconds ago Up 25 seconds 0.0.0.0:2224->22/tcp, 0.0.0.0:8001->80/tcp, 0.0.0.0:4443->443/tcp
high_colden
f5a87e085a0b nginx:centos "/usr/local/sbin/run 49 minutes ago Up 49 minutes 0.0.0.0:2223->22/tcp, 0.0.0.0:8000->80/tcp
stoic_kirch
ed9361b598c8 sshd-centos "/usr/sbin/sshd -D" About an hour ago Up About an hour 0.0.0.0:2222->22/tcp
distracted_mclean
3、测试
测试nignx:
[root@localhost nginx_centos]# curl localhost:8001
<html>
<head>
<title>Welcome to nginx!title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
style>
head>
<body>
<h1>Welcome to nginx!h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.orga>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.coma>.p>
<p><em>Thank you for using nginx.em>p>
body>
html>
测试成功!
测试ssh
[root@localhost nginx_centos]# ssh localhost -p 2224
The authenticity of host '[localhost]:2224 ([::1]:2224)' can't be established.
RSA key fingerprint is d7:fd:3d:40:46:b6:0c:c9:ee:f1:fb:9e:08:c4:12:57.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:2224' (RSA) to the list of known hosts.
root@localhost's password:
测试成功!