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.com
USTC 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
user1vi /etc/vsftpd/user1
// 開放讀的權限(如果沒有添加此項,用戶看到的目錄是隱藏的)
Anon_world_readable_only=NO
Anon_upload_enable=YES
Anon_mkdir_write_enable=YES
Anon_other_write_enable=YES
user2vi /etc/vsftpd/user2
// 開放讀的權限(如果沒有添加此項,用戶看到的目錄是隱藏的)
Anon_world_readable_only=NO
Anon_upload_enable=YES
user3vi /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網頁樣式【待解決】
更新中......