DockerでFTPサーバーを構築する方法を紹介します。Docker公式レジストリからイメージをPULLしてすぐ使えます。
FTPは、社内システム開発など、まだまだ現役で使われている所が多いため、サクッと開発環境を構築したたい時に、DockerでFTPサーバーを構築できるのは便利です。
FTPサーバーには「Pure-FTPd」を使用します。
スポンサーリンク
FTPサーバーのイメージをPULL
Docker公式のレジストリから、FTPサーバー(stilliard/pure-ftpd)のイメージをPULLします。
$ docker pull stilliard/pure-ftpd:latest
Docker runでFTPサーバーを起動する
PULLしたFTPサーバーのイメージを、以下のコマンドで起動します。
$ docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST=localhost" stilliard/pure-ftpd:latest
起動したコンテナのCONTAINER ID
を調べます。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44fdee748d14 stilliard/pure-ftpd:latest "/bin/sh -c '/run.sh…" 27 seconds ago Up 25 seconds 0.0.0.0:21->21/tcp, 0.0.0.0:30000-30009->30000-30009/tcp ftpd_server
調べたCONTAINER ID
を指定して、コンテナにアクセスします。
$ docker exec -it 44fdee748d14 bash
FTPユーザーを作成する
FTPのユーザを作成します。以下はtest
というユーザを追加する場合の例です。
root@xxx:/# cd /home/ftpusers/
root@xxx:/home/ftpusers# pure-pw useradd test -f /etc/pure-ftpd/passwd/pureftpd.passwd -m -u ftpuser -d /home/ftpusers/test
Password: ******** (パスワード)
Enter it again: ******** (パスワード確認)
FTPのホームディレクトリを作成して、ディレクトリのアクセス権を変更します。
root@xxx:/home/ftpusers# mkdir test
root@xxx:/home/ftpusers# chown ftpuser:ftpgroup test
root@xxx:/home/ftpusers# ls -la
スポンサーリンク
ホストマシンからFTPサーバーに接続する
作成したFTPサーバーに対して、ホストマシンからアクセスしてみます。今回はFFFTPを使った例で紹介しますが、FTPクライアントであれば何でもOKです。
接続先の設定
ホスト名は自分自身のコンテナにアクセスするため「localhost」です。ユーザ名、パスワードは上の手順で作成したユーザの情報を設定します。
ファイルをアップロード
DockerのFTPサーバーに接続出来たら、適当なファイルをアップロードしてみましょう。
正常にアップロードできればOKです。
ホスト側でファイルをアップロードしたら、コンテナ側で以下のコマンドを叩いて、ファイルが登録されているか確認してみましょう。
root@xxx:/home/ftpusers# ls -lt
total 4
drwxr-xr-x 2 ftpuser ftpgroup 4096 Jul 17 01:33 test
スポンサーリンク
データの永続化
ご存知の通り、Dockerはコンテナを削除すると、コンテナ内に保存されているデータは破棄されます。
少し手順は面倒ですが、Dockerのボリューム(Volume)を使えば、データの永続化が可能です。以下に手順を解説します。
ボリューム(Volume)の作成
まずは、Dockerのボリュームを次のコマンドで作成します。今回は「testvolume」という名前でボリュームを作成しています。
$ docker volume create testvolume
ボリュームの一覧は、以下のコマンドで取得できます。「testvolume」のボリュームが存在する事を確認しましょう。
$ docker volume ls
DRIVER VOLUME NAME
local testvolume
-v
オプションでボリュームをマウントして、FTPサーバーのコンテナを起動します。(その他のコマンドオプションは、前と同じ)
$ docker run -d --name volume_ftpd_server -v testvolume:/data/ -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST=localhost" stilliard/pure-ftpd:latest
起動したコンテナのCONTAINER ID
を調べて、コンテナにアクセスします。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc405c7e1cef stilliard/pure-ftpd:latest "/bin/sh -c '/run.sh…" 7 seconds ago Up 5 seconds 0.0.0.0:21->21/tcp, 0.0.0.0:30000-30009->30000-30009/tcp volume_ftpd_server
$ docker exec -it cc405c7e1cef bash
root@cc405c7e1cef:/#
ボリュームをホームディレクトリに指定してFTPユーザー作成
作成したボリュームをホームディレクトリ(-d /data/test
の部分)に指定して、FTPのユーザを作成します。
root@xxx:/# cd /data/
root@xxx:/data# pure-pw useradd test -f /etc/pure-ftpd/passwd/pureftpd.passwd -m -u ftpuser -d /data/test
Password: ******** (パスワード)
Enter it again: ******** (パスワード確認)
FTPのホームディレクトリを作成して、ディレクトリのアクセス権を変更します。
root@xxx:/data# mkdir test
root@xxx:/data# chown ftpuser:ftpgroup test
root@xxx:/data# ls -la
drwxr-xr-x 3 root root 4096 Jul 17 10:30 .
drwxr-xr-x 1 root root 4096 Jul 17 10:13 ..
drwxr-xr-x 2 ftpuser ftpgroup 4096 Jul 17 10:30 test
これでデータの永続化の設定は完了です。この状態でFTPでファイルをアップロードすると、ボリュームにファイルが作成される為、コンテナを削除した場合でも、再度ボリュームをマウントすればファイルが残ります。
ボリュームのホスト側のパスを確認
作成したボリュームが、ホスト側のどのに保存されているのかは、以下のコマンド確認できます。
$ docker volume inspect testvolume
[
{
"CreatedAt": "2019-07-17T10:30:47Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/testvolume/_data",
"Name": "testvolume",
"Options": {},
"Scope": "local"
}
]
さいごに
DockerでFTPサーバーを構築する手順を紹介しました。簡単な手順でFTPサーバーを構築できて、さらに使い終わったら、コンテナイメージを削除すれば、キレイさっぱり無くなるので、開発用のFTPサーバーが必要な場合に、とても重宝します。
0 件のコメント:
コメントを投稿