教你用 docker 快速建立一个文件服务器

需要的技术

docker, nginx

docker 的出现,将 LXC 容器技术以十分便利的方式带到了世人的面前,充分展示了完美的技术封装,虽然还有一些不完美的地方,但是瑕不掩瑜,我们还是感受一下 docker 为运维人员带来的便利性吧。我们可以在一秒不到的时间建立起一个文件服务器。

nginx 作为异步设计的轻量级服务器带来了高并发性,并且具有很高的稳定性,足够用来做大部分情况的服务器应用,已经超过了 apache httpd 的市场占有率。

配置文件和容器创建

nginx 配置文件 file.conf

log_format  p_access.log  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';
server
    {
        listen       8000;  # 监听 8000 端口,按需求也可以配置一个前台服务器作子域名转发
        index index.html default.html; # 默认首页文件
        root  /var/www/file;   #文件服务器的根路径

        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;

        charset utf-8;

                # 这里配置拒绝访问的目录或文件
        location ~ (repos) 
        {
            deny all;
        }

                # 静态文件的过期时间,可以不需要此配置
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
            {
                expires      30d;
            }

                # 静态文件的过期时间,可以不需要此配置
        location ~ .*\.(js|css)?$
            {
                expires      12h;
            }
                 # 这里很重要! 将日志转发到 /dev/stdout ,可以通过 docker logs -f  来查看容器日志
        access_log  /dev/stdout;
    }

create_file_server.sh 服务器容器创建脚本:

#!/usr/bin/env bash

if [ ! -d './data' ]
then
    mkdir data
fi

# 重点解释这里吧
docker run -dit --name files0 \
--restart always \
-p 3002:8000 \
-v $PWD/file.conf:/etc/nginx/conf.d/file.conf \
-v $PWD/data:/var/www/file \
-w /var/www/file \
nginx

实施

配置和脚本都有了,我们开始吧。在任何你愿意的地方建立一个独立目录,随便叫什么,我就叫他 documents 吧。在 documents 下分别建立 file.conf 和 create_file_server.sh 文件。然后执行脚本 ./create_file_server.sh,文件服务器的所有数据都将存储在 documents/data 下面。

访问 http://localhost:3002/ 就能看到你的文件了