您的位置:首页 > 运维架构 > Docker

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

2017-10-12 10:02 1211 查看
在宿主机上准备的文件清单:

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

测试成功!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Docker