
FTPコマンドの練習環境を作ってみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
データアナリティクス事業本部の鈴木です。
FTPを使った通信の、FTPクライアントを使った実装を検証したいことがあり、便利なdockerイメージとFTPクライアントを使って、環境を構築してみました。
最初は特にFTPサーバーを構築するところが大変そうだなと悩んでいましたが、docker-pure-ftpdという便利なイメージが公開されていたのでとても簡単に検証環境を作ることができました。
準備
環境
以下の環境で検証しました。
- macOS Monterey
- LFTP Version 4.9.2
FTPサーバー
docker-pure-ftpdイメージを使いました。
Dockerfileなどは以下のGitHubレポジトリで公開されています。
docker-compose.ymlのサンプルもGitHubレポジトリにて公開されているので、参考にして以下のyamlファイルを作成しておきました。 今回はあくまでローカル上での練習用なので、通信の暗号化はしていないのでご注意ください。
version: '3'
services:
ftpd_server:
image: stilliard/pure-ftpd
container_name: pure-ftpd
ports:
- "21:21"
- "30000-30009:30000-30009"
# docker-compose.ymlがあるディレクトリに、コンテナとの共有ディレクトリを作る
volumes:
- "./data:/home/username/"
- "./passwd:/etc/pure-ftpd/passwd"
environment:
PUBLICHOST: "localhost"
FTP_USER_NAME: username
FTP_USER_PASS: mypass
FTP_USER_HOME: /home/username
restart: always
FTP_USER_NAME環境変数のユーザー名とFTP_USER_PASS環境変数のパスワードでユーザーが作成されます。このユーザーのホームはFTP_USER_HOME環境変数の場所になります。この場所はvolumesでdocker-compose.ymlがあるディレクトリのdataディレクトリと共有するように設定しました。
FTPクライアント
今回はLFTPを使いました。LFTPのGitHubレポジトリは以下になります。
macの場合はHomebrew Formulaeに記載があり、homebrewでインストールできることが分かったので、以下のコマンドでインストールしました。
brew install lftp
やってみる
コンテナを起動する
docker-compose.ymlがあるディレクトリでdocker-compose upを実行し、コンテナを起動します。
docker-compose up
FTP_USER_NAME環境変数で設定したユーザー名と、FTP_USER_PASS環境変数で設定したパスワードでログインできることを確認しました。
# lftp の起動 lftp # 以下はlftpのコマンド入力 lftp :~> open -u username ftp://localhost/ #パスワード: FTP_USER_PASS環境変数で設定したパスワード
ログインすると、ディレクトリはコンテナ側の、FTP_USER_HOME環境変数で設定した場所になっています。
起動すると、ホスト側に共有ディレクトリが作成され、以下のようになっています。
. ├── data ├── docker-compose.yml └── passwd
ファイルを受け渡ししてみる
簡単にですが、ファイルを受け渡しができるか確認しておきます。
新しく別のコンソールを開き、適当なsample.txtというファイルをカレントディレクトリに作っておきます。
touch sample.txt
sample.txtと同じディレクトリでlftpでログインし、putコマンドでファイルを送ってみます。
# ファイルの転送 lftp username@localhost:/> put ./sample.txt # 結果の確認 lftp username@localhost:/> ls -rw-r--r-- 1 1000 ftpgroup 0 Jun 18 13:49 sample.txt
送信できたことが確認できました。
今度はローカルのsample.txtを削除しておいた状態で、FTPサーバー側からさっき送ったsample.txtを取ってきます。
FTPサーバーに接続していない方のコンソールで以下を実行し、ファイルを削除しておきます。
rm sample.txt ls sample.txt # ls: sample.txt: No such file or directory
FTPサーバーに接続していない方のコンソールで以下を実行し、ファイルを取得します。
# ファイルの取得 lftp username@localhost:/> get sample.txt
FTPサーバーに接続していない方のコンソールで以下を実行し、取得したファイルを確認します。
ls sample.txt # sample.txt
最後に
docker-pure-ftpdイメージとLFTPで、ローカルにFTPの練習環境を構築してみました。
参考になりましたら幸いです。






