Docker | 搭建一个ftp服务器
 
目录
 
前期准备
| 名称 | 地址 | 说明 | 
|---|---|---|
| 阿里云服务器 | 阿里云翼计划 | 系统镜像选择Ubuntu1604 server版 | 
| Xshell+Xftp | Xshell和Xftp免费试用 | 分别用于ssh、ftp连接服务器 | 
安装docker
- 更新软件源
 apt update
- 更新软件
 apt upgrade -y
- 使用官方安装脚本自动安装最新版docker客户端docker-ce
 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
- 查看docker-ce版本
 docker --version
 
配置docker镜像加速器
- 创建docker文件夹
 mkdir -p /etc/docker
说明:
- 一般安装docker后会默认存在
- 创建daemon.json
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
EOF
提示:
- 加速地址可以更换为下面的
国内 镜像源地址 官方中国区 https://registry.docker-cn.com网易 http://hub-mirror.c.163.comUSTC https://docker.mirrors.ustc.edu.cn阿里云 
DaoCloud https://www.daocloud.io/mirror 
- 重新载入加速器
 systemctl daemon-reload
- 重启docker
 systemctl restart docker
安装vsftpd
参阅:
- 搜索vsftpd镜像
 docker search vsftpd
 
- pull最新版镜像到本地
 docker pull fauria/vsftpd
 
- 运行docker镜像并创建对应的Container
 包含用户名和密码
 docker run -d -p 20:20 -p 21:21 -p 21100-21110:21100-21110 -v /Ftpfile:/home/vsftpd -e FTP_USER=user -e FTP_PASS=userpwd -e PASV_ADDRESS=<宿主机ip> -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 --name vsftpd --restart=always fauria/vsftpd
 不包含用户名和密码
 docker run -d -p 20:20 -p 21:21 -p 21100-21110:21100-21110 -v /Ftpfile:/home/vsftpd -e PASV_ADDRESS=<宿主机ip> -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 --name vsftpd --restart=always fauria/vsftpd
提示:
- PASV_ADDRESS需改为自己的宿主机ip
- -p 进行端口绑定映射
- -v 进行文件目录的映射
- FTP_UESR 和FTP_PASS如果设定了会在container的
/etc/vsftpd/virtual_users.txt里面- PASV_ADDRESS指的的宿主机地址
- PASV_MIN_PORT和PASV_MAX_PORT映射的是被动模式下端口使用范围
- 必须在服务器的防火墙中开启20、21、22和21100/21110端口

 
- 进入vsftpd镜像对应的container中
 docker exec -i -t vsftpd bash
 
- 编辑配置文件写入用户名和密码
 vi /etc/vsftpd/virtual_users.txt
提示:
- 注意使用vi编辑指令,其中奇数行为用户名,临近的下一个偶数行为密码,创建container时参数未加入用户名和密码,系统会默认创建admin和随机密码.
- 
添加新用户的文件夹,以用户名命名 
 mkdir -p /home/vsftpd/<新用户名>
- 
hash处理登录的验证信息并写入数据库 
 /usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
- 
退出container 
 exit或Ctrl+D
- 
重启container 
 docker restart vsftpd
- 
验证ftp 
 ftp://<宿主机ip>
 
提示:
- 一般新搭建的ftp里面的内容为空,出现上图结果即搭建成功
Docker常用命令
| 命令 | 作用 | 
|---|---|
| docker search <镜像名> | 搜索在线可用镜像名 | 
| docker pull <镜像名:tag> | 从官网拉取镜像 | 
| docker images -a | 查询所有的镜像,默认是最近创建的排在最上 | 
| docker ps | 查看正在运行的容器 | 
| docker ps -a | 查看所有容器 | 
| docker rmi -f <镜像ID> | 删除单个镜像 | 
| docker start <容器名or ID> | 启动某个容器 | 
| docker stop <容器名or ID> | 停止某个容器 | 
| docker kill <容器名or ID> | 杀掉某个容器 | 
| docker logs {容器ID或容器名称} | 查询某个容器的所有操作记录。 | 
| docker commit <容器ID> <镜像名称> | 制作镜像 使用以下命令,根据某个“容器 ID”来创建一个新的“镜像” | 
| docker run -d -p 58080:8080 --name javaweb wsl/javaweb:0.1 /root/run.sh | 启动一个容器,其中-d:表示以“守护模式”执行/root/run.sh脚本; -p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 58080 端口,这样就向外界暴露了 58080 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。 -name:为容器命名 | 
| service docker start | 启动docker服务的命令 | 
参阅:
FTP管理
1. CMD访问FTP
- 调用ftp
 ftp
 
- 访问ftp服务器(其中需要输入用户名和密码)
 open <宿主机ip>
 
- 
查看远程根目录下文件情况,默认为空 
 ls
   
- 
上传D盘test文件下的文件到ftp服务器(put或mput指令) 
 lcd D:\test
 put a.txt
 
 
- 再次查看
 ls或dir
 
- 下载ftp服务器的文件到D盘test文件下(get或mget指令)
单次下载
lcd D:\test
get test.zip
 
提示:
get <文件名1> <文件名2>等价于下载文件1并重命名为文件名2
批量下载
lcd D:\test
mget a.txt test.zip
 
提示:
- 默认情况下,prompt是打开的;在传输多个文件期间,ftp 的提示将允许您选择性地检索或存储文件;如果 prompt 是关闭的,则 mget 和 mput 将传输所有文件
prompt关闭/开启prompt,一般选择关闭
- cmd的ftp命令行
help
 
部分命令
 
参阅:
2. Ubuntu访问FTP
- 与第一种CMD访问是基本一样的.
Q&A
第一种情况
Q:ls/dir无法使用
 
A:passive
 
3. FTP客户端访问FTP
- Filezilla
- Xftp
- Winscp
- .......
优化FTP
注意:
- 修改完后重启vsftpd服务
docker restart vsftpd
1. 支持中文字符集
- 进入docker的vsftpd容器
 docker exec -i -t vsftpd bash
 vi /etc/profile
export LANG=en_US.utf8
source /etc/profile
参阅:
2. 允许 FTP 匿名登陆
vi /etc/vsftpd/vsftpd.conf
 
3. 设置欢迎词,最大连接数
vi /etc/vsftpd/vsftpd.conf
##  欢迎词
ftpd_banner=welcome to here!  
##  最大同时访问用户数
Max_clients=50     
4. 添加用户到黑名单中
vi /etc/vsftpd/ftpusers
<userName>
默认
 
5. 只允许user_list的用户登录
第一种
vi /etc/vsftpd/vsftpd.conf
userlist_deny=NO
vi /etc/vsftpd/user_list
<userName>
第二种
vi /etc/vsftpd/vsftpd.conf
userlist_deny=NO
userlist_file=/etc/ftpuser/user_list
vi /etc/ftpuser/user_list
<userName>
默认
 
6. 限速
vi /etc/vsftpd/vsftpd.conf
##  注册的用户下载速度 200k 
Local_max_rate=200000 
##  匿名用户下载速度20K
Anon_max_rate=20000 
7. 因人限速
vi /etc/vsftpd/vsftpd.conf
##  用户的配置文件
User_config_dir=/etc/vsftpd
vi /etc/vsftpd/user1
 Local_max_rate = 3000
vi /etc/vsftpd/user2
Local_max_rate = 30000
提示:
- user1和user2需要添加到virtual_users.txt并存储到数据库中
vi /etc/vsftpd/virtual_users.txt
/usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
8. 建立虚拟的用户可以登陆 FTP ,但不能登陆我的 linux 系统【待认证】
- 建立虚拟用户
 vi /etc/vsftpd/virtual_users.txt
- 生产vsftpd 的认证数据库
 /usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
- 改数据库权限
 chmod 600 /etc/vsftpd/virtual_users.db
- 虚拟用户及所要访问的目录并设置相应的权限
vi /etc/vsftpd/vsftpd.conf
guest_enable=YES
anon_world_readable_only=NO
9. 虚拟用户管理
user1 有浏览目录、上传、改名、删除等权限
user2 有浏览目录、上传权限
user3 有浏览目录、下载的权限(且只能在 /misc/abc 目录下,速度为 20k )
- 编辑 vsftpd 的主配置文件
 vi /etc/vsftpd/vsftpd.conf
User_config_dir=/etc/vsftpd
user1
vi /etc/vsftpd/user1
// 开放读的权限(如果没有添加此项,用户看到的目录是隐藏的)      
Anon_world_readable_only=NO
Anon_upload_enable=YES 
Anon_mkdir_write_enable=YES 
Anon_other_write_enable=YES 
user2
vi /etc/vsftpd/user2
// 开放读的权限(如果没有添加此项,用户看到的目录是隐藏的) 
Anon_world_readable_only=NO    
Anon_upload_enable=YES
user3
vi /etc/vsftpd/user3
// 开放读的权限(如果没有添加此项,用户看到的目录是隐藏的) 
Anon_world_readable_only=NO   
// 设置目录为本地
Local_root=/misc/abc
Anon_max_rate=20000 
10. 设置匿名的用户可以上传以及删除的权限
vi /etc/vsftpd/vsftpd.conf
Anon_upload_enable=YES 
Anon_mkdir_write_enable=YES 
Anon_other_write_enable=YES
- 改变 pub 目录的权限
 chmod - R 777 /var/ftp/pub
参阅:
- 更多关于FTP优化,请看linux下ftp的搭建及优化
11. 定义ftp网页样式【待解决】
更新中......


