すぐ作れる!DockerでFTPサーバーを構築

2019年7月17日水曜日

Docker FTP

t f B! P L

すぐ作れる!DockerでFTPサーバーを構築

パソコンでコードを打ち込んでいるイメージ

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」です。ユーザ名、パスワードは上の手順で作成したユーザの情報を設定します。

FFTPの接続先設定

ファイルをアップロード

DockerのFTPサーバーに接続出来たら、適当なファイルをアップロードしてみましょう。

FFTPでDockerで作成したFTPサーバーにファイルをアップロードする所

正常にアップロードできればOKです。

FFTPでDockerで作成したFTPサーバーにファイルをアップロードした所

ホスト側でファイルをアップロードしたら、コンテナ側で以下のコマンドを叩いて、ファイルが登録されているか確認してみましょう。

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サーバーが必要な場合に、とても重宝します。

スポンサーリンク

QooQ