Profile picture

[Docker] FTP 서버 쉽게 구축하기

JaehyoJJAng2023년 05월 05일

fauria/vsftpd

이 Docker 이미지로 다음 기능과 함께 vsftpd 서버를 구현할 수 있다.

  • Centos 7 기반 이미지
  • vsftpd 3.0
  • 가상 사용자 지원
  • 패시브 모드
  • 파일 또는 STDOUT에 로깅

환경 변수 등에 관한 정보는 아래 도커허브에서 참고하자.
fauria/vsftpd


서버 구축

docker-compose.yaml 파일이 작성 될 경로를 생성해주자.

$ mkdir -p /docker/ftp-server
$ mkdir /docker/ftp-server/data
$ cd /docker/ftp-server
$ vim ./docker-compose.yaml

docker-compose.yaml

version: "3"

services:
  ftp:
    image: fauria/vsftpd
    restart: always
    platform: linux/amd64 # Mac M1 인 경우 설정
    container_name: ftp
    ports:
      - "20:20"
      - "21:21"
      - "21100-21110:21100-21110"
    volumes:
      - "./data:/home/vsftpd"
    environment:
      - FTP_USER=jaehyo
      - FTP_PASS=jaehyo
      - PASV_ADDRESS=127.0.0.1
      - PASV_MIN_PORT=21100
      - PASV_MAX_PORT=21110 
  • PASV_ADDRESS=127.0.0.1 , PASV_MIN_MIN_PORT=21100, PASV_MAX_PORT=21110 : 패시브 모드에서 데이터 포트 및 주소정보 지정
  • FTP_USER=jaehyo , FTP_PASS=jaehyo: FTP에 사용될 USER/PW 정보
  • 20:20 , 21:21 , 21100-21110:21100-21110: 포트 매칭, 패시브 && 액티브 && 데이터포트 범위 지정

서버 실행

$ docker-compose up -d

위 명령어로 컨테이너를 실행하자


실행되면 아래처럼 위에서 지정한 21100 ~ 21110 포트가 다 열리게 되는데 용도는 위에서 설명한 것과 같다.

$ netstat -nltp | grep "21*"
tcp        0      0 127.0.0.1:35543         0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:21104           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:21105           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:21106           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:21107           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:21108           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:21109           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:21110           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:21100           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:21101           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:21102           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:21103           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:20              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp6       0      0 :::21104                :::*                    LISTEN      -
tcp6       0      0 :::21105                :::*                    LISTEN      -
tcp6       0      0 :::21106                :::*                    LISTEN      -
tcp6       0      0 :::21107                :::*                    LISTEN      -
tcp6       0      0 :::21108                :::*                    LISTEN      -
tcp6       0      0 :::21109                :::*                    LISTEN      -
tcp6       0      0 :::21110                :::*                    LISTEN      -
tcp6       0      0 :::21100                :::*                    LISTEN      -
tcp6       0      0 :::21101                :::*                    LISTEN      -
tcp6       0      0 :::21102                :::*                    LISTEN      -
tcp6       0      0 :::21103                :::*                    LISTEN      -
tcp6       0      0 :::20                   :::*                    LISTEN      -
tcp6       0      0 :::21                   :::*                    LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -

FTP 서버 접근

간단하게 폴더를 열어서 ftp://<IP주소>:21으로 접근해주면 된다.
image


테스트를 위해 간단하게 ./data/사용자 디렉토리 안에 파일을 생성해보자.

$ touch ./data/jaehyo/test.txt

image
파일이 잘 들어갔다!


Loading script...