centos 7 下docker 部署vsftpd(docker-compose)

发布时间 2023-04-24 22:55:22作者: 风满楼9527

启动命令:

docker run -d -p  21:21 -p  20:20 -p 21100-21110:21100-21110 -v /opt/vsftpd/file:/home/vsftpd -e FTP_USER=admin -e FTP_PASS=1234   \
  -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 -e PASV_ADDRESS=0.0.0.0 -e PASV_ENABLE=YES --name ftp \
  --restart=always --privileged=true fauria/vsftpd

-d	后台启动容器
-p 20:20	将外部的20端口映射到内部的20端口
-p 21:21	将外部的21端口映射到内部的21端口
-p 21100-21110:21100-21110	将外部的 21100-21110端口映射到内部的21100-21110端口
-v /opt/vsftpd/file:/home/vsftpd	将本地磁盘的 /opt/vsftpd/file路径映射到内部的/home/vsftpd路径
-e FTP_USER=admin	ftp的主用户
-e FTP_PASS=1234	ftp主用户的密码
-e PASV_MIN_PORT=21100	最小被动端口
-e PASV_MAX_PORT=21110	最大被动端口
-e PASV_ADDRESS=10.73.139.201	指定本机的ip
-e PASV_ENABLE=YES	启动被动模式
--name ftp	取一个名字,之后可以用(docker stop 名字 )来停止容器
--restart=always	开机自启动
--privileged=true	容器内用户获取root权限
fauria/vsftpd	仓库的镜像

创建用户:

# 1 进入docker ftp交互模式:
docker exec -i -t ftp bash

-i	连接容器的STDIN和容器外的STDIN
-t	告诉 docker 内部的主进程它的输入是终端设备
ftp	指定要进入的容器的名字(这个是在创建的时候使用–name指定的)
bash	使用bash作为终端

# 2 创建用户家目录并赋予权限:
mkdir /home/vsftpd/user1 && chown -R ftp.ftp /home/vsftpd/user1
mkdir /home/vsftpd/user2 && chown -R ftp.ftp /home/vsftpd/user2

# 3 将账号密码信息写入文件(注意:该命令在容器内执行, \n 是换行符)
echo -e "user1\nech" >> /etc/vsftpd/virtual_users.txt
echo -e "user2\nech" >> /etc/vsftpd/virtual_users.txt

# 4.使用脚本读取刚刚写入的文件(注意:该命令在容器内执行)
/usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db

# 5.退出容器(注意:该命令在容器内执行)
exit

# 6.重启ftp
docker restart ftp

测试ftp状态:

[root@bj-121-240 ~]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (127.0.0.1:root): admin
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (0,0,0,0,82,116).
150 Here comes the directory listing.
226 Directory send OK.
ftp> mkdir test
257 "/test" created
ftp> ls
227 Entering Passive Mode (0,0,0,0,82,108).
150 Here comes the directory listing.
drwx------    2 ftp      ftp             6 Apr 24 03:49 test
226 Directory send OK.
ftp> cd test
250 Directory successfully changed.
ftp> exit

保存镜像:

## 将改动过的把容器打包成镜像:
[root@bj-121-240 ~]# docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS                          PORTS                                                            NAMES
dec06a8635f7   fauria/vsftpd     "/usr/sbin/run-vsftp…"   31 minutes ago   Up 21 minutes                   0.0.0.0:20-21->20-21/tcp, 0.0.0.0:21100-21110->21100-21110/tcp   ftp

[root@bj-121-240 ~]# docker commit dec06 ftp-ech  
sha256:cc28d3be63adf17c5b14b3bc4b7e88c0a4dac1c9f4be2d846580f8335c85bd84

[root@bj-121-240 ~]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED         SIZE
ftp-ech      latest    cc28d3be63ad   5 seconds ago   394MB
fauria/vsftpd     latest    9bfb39139661   2 months ago    394MB  

## Docker images 导出: 
docker save ftp-ech > ftp-ech.tar.gz           # 第一种导出镜像 
docker save ftp-ech -o /root/ftp-ech.tar.gz     # 第二种导出镜像

## Docker images 导入:
docker load -i /root/ftp-ech.tar.gz                 # 导入镜像

## 用新的镜像启动容器:
docker run -d -p  21:21 -p  20:20 -p 21100-21110:21100-21110 -v /opt/vsftpd/file:/home/vsftpd -e FTP_USER=admin -e FTP_PASS=1234   -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 -e PASV_ADDRESS=0.0.0.0 -e PASV_ENABLE=YES --name ftp --restart=always --privileged=true ftp-ech

docker-compose.yaml

[root@bj-121-240 home]# cat docker-compose.yaml 
version: '3'
services:
  vsftpd:
    image: ftp-ech
    container_name: ftp
    environment:
      - FTP_USER=admin              # 自定义用户名
      - FTP_PASS=ech.com            # 自定义用户密码 
      - PASV_ENABLE=YES
      - PASV_ADDRESS=0.0.0.0        # 宿主机的IP
      - PASV_MIN_PORT=21100
      - PASV_MAX_PORT=21110
      - ANON_ENABLE=NO
      - privileged=true
    volumes:
      - /opt/vsftpd/file:/home/vsftpd        # 将本地磁盘的 /opt/vsftpd/file路径映射到内部的/home/vsftpd路径
    ports:
      - "20:20"
      - "21:21"
      - "21100-21110:21100-21110"
    restart: always