Docker实战:使用Dockerfile创建带nginx服务并支持ssh的Centos Docker镜像

在宿主机上准备的文件清单:
Dockerfile#启动ssh和apache服务的角本run.sh

以上文件都放到/root/nginx_centos目录下
mkdir -p /root/nginx_centoscd /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:dockerfile
MAINTAINER by liyuejin
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 imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEnginx_dockerfile centos 9ad55461b2fe 5 minutes ago 386.1 MBnginx centos b738cec02b29 47 minutes ago 369.9 MBsshd-centos latest 64136bdc0cc8 46 hours ago 261.8 MBcentos 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”。

补充:可以将配置文件、工程目录、日志文件通过-v挂载到宿主机目录,这样可以很方便的管理和维护,启动命令如下:
docker run -d --name myNginx -p 2224:22 -p 8001:80 -p 4443:443 \
-v /root/docker/nginx/html:/usr/local/nginx/html \
-v /root/docker/nginx/conf/nginx.conf:/usr/local/nginx/conf/nginx.conf:ro \
-v /root/docker/nginx/logs:/usr/local/nginx/logs \
nginx_dockerfile:centos /usr/local/sbin/run.sh

在运行容器的时候,如果提示“Permission denied”,可使用--privileged=true给容器加特权,如下
docker run -i -t --privileged=true .....

2、查看新生成的容器:
docker ps -a

3、测试
测试nignx:
curl localhost:8001

测试成功!

测试ssh
ssh admin@localhost -p 2224
测试成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值