1
1

More than 3 years have passed since last update.

【AWS】EC2内のDockerを、EFSとマウントしてみました

Posted at

はじめに

EC2内にインストールしてあるDockerを、AWS EFSとマウントすることをやってみました。
手順を公開したいと思います。
・EC2のOS:Ubuntu 20.04.2 LTS
・Dockerバージョン:Docker version 20.10.8, build 3967b7d

構成図

簡単に説明すると、
1.EC2内にDockerをインストールしておリます。
2.EFSがEC2とマウントしておリます。
3.DockerがEFSとのマウントを実現できております。
docker-efs.jpg

1.EC2内にDockerをインストール

UbuntuにDockerをインストールにあたって、下記の記事が大変参考になりました。

記事に従ってインストール作業をしたら、Dokcerのインストールが無事に完了しました。

$ docker --version
Docker version 20.10.8, build 3967b7d

2.EC2とEFSをマウント

EFSの作成手順はここで割愛させていただきます。
EC2とEFSのマウント方法は、下記の記事が大変参考になりました。

記事に従って操作すると、EC2内に/mnt/efsディレクトリーを作成しておき、それをEFSとのマウントを実現できておリます。

$ df -h
Filesystem                                      Size  Used Avail Use% Mounted on
/dev/root                                        20G  2.2G   18G  12% /
devtmpfs                                        1.9G     0  1.9G   0% /dev
tmpfs                                           1.9G     0  1.9G   0% /dev/shm
tmpfs                                           388M  900K  387M   1% /run
tmpfs                                           5.0M     0  5.0M   0% /run/lock
tmpfs                                           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/loop1                                       26M   26M     0 100% /snap/amazon-ssm-agent/4544
/dev/loop0                                       34M   34M     0 100% /snap/amazon-ssm-agent/3552
/dev/loop3                                       71M   71M     0 100% /snap/lxd/19647
/dev/loop4                                       33M   33M     0 100% /snap/snapd/11588
/dev/loop2                                       56M   56M     0 100% /snap/core18/1997
fs-XXXXXXXXX.efs.ap-northeast-1.amazonaws.com:/  8.0E     0  8.0E   0% /mnt/efs
overlay                                          20G  2.2G   18G  12% /var/lib/docker/overlay2/193018e5f21d57c9462cc7f9d6ed33f83a59506c599d3d4739d3d81712c52469/merged
tmpfs                                           388M     0  388M   0% /run/user/0

また、/etc/fstabにEFSの情報を登録することによって、EC2が起動されるタイミングで、自動的にEFSとマウントを実現することができます。

$ cat /etc/fstab
LABEL=cloudimg-rootfs   /        ext4   defaults,discard        0 1
fs-XXXXXXXXX:/ /mnt/efs  efs    defaults,_netdev  0 0

EFS内に確認用のlalala.txtファイルを作成し、中に適当に文字を入れておきます。

$ pwd
/mnt/efs
$ sudo touch lalala.txt
$ sudo chmod 775 lalala.txt
$ sudo vi lalala.txt
$ cat lalala.txt
123123lalala

3.DockerとEFS間のマウントを実現

今回はnginxのDockerを使用し、EFSとのマウントを試してみました。

まずはnginxのDokcerをインストール前に、Dockerがないことを確認します。

$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

EC2上の/mnt/efsはすでにEFSとマウントしてありますので、
これからはnginxのdocker内に/mnt/efsをEC2上の/mnt/efsをマウントし、
DockerとEFSのマウントを実現します。

$ sudo docker run --privileged=true -it --name nginx -d -p 8080:80 -v /mnt/efs:/mnt/efs nginx /bin/bash
369b6256d0ff62337abb2ca2067a90de2053253da379502fdccc3a95cbe92937

続いてngixnのDocker状態を確認し、起動できていることを確認しております。

$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                   NAMES
369b6256d0ff   nginx     "/docker-entrypoint.…"   31 seconds ago   Up 31 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   nginx

nginxのDocker内部へ接続していきます。

$ sudo docker exec -it 369b6256d0ff bash
root@369b6256d0ff:/#

nginxのDocker内部の/mnt/efsに移動します。

root@369b6256d0ff:/# ls -all
total 80
drwxr-xr-x   1 root root 4096 Aug  6 03:33 .
drwxr-xr-x   1 root root 4096 Aug  6 03:33 ..
-rwxr-xr-x   1 root root    0 Aug  6 03:33 .dockerenv
drwxr-xr-x   2 root root 4096 Jul 21 00:00 bin
drwxr-xr-x   2 root root 4096 Jun 13 10:30 boot
drwxr-xr-x  10 root root 3020 Aug  6 03:33 dev
drwxr-xr-x   1 root root 4096 Jul 22 10:13 docker-entrypoint.d
-rwxrwxr-x   1 root root 1202 Jul 22 10:12 docker-entrypoint.sh
drwxr-xr-x   1 root root 4096 Aug  6 03:33 etc
drwxr-xr-x   2 root root 4096 Jun 13 10:30 home
drwxr-xr-x   1 root root 4096 Jul 22 10:13 lib
drwxr-xr-x   2 root root 4096 Jul 21 00:00 lib64
drwxr-xr-x   2 root root 4096 Jul 21 00:00 media
drwxr-xr-x   1 root root 4096 Aug  6 03:33 mnt
drwxr-xr-x   2 root root 4096 Jul 21 00:00 opt
dr-xr-xr-x 177 root root    0 Aug  6 03:33 proc
drwx------   2 root root 4096 Jul 21 00:00 root
drwxr-xr-x   3 root root 4096 Jul 21 00:00 run
drwxr-xr-x   2 root root 4096 Jul 21 00:00 sbin
drwxr-xr-x   2 root root 4096 Jul 21 00:00 srv
dr-xr-xr-x  13 root root    0 Aug  6 03:33 sys
drwxrwxrwt   1 root root 4096 Jul 22 10:13 tmp
drwxr-xr-x   1 root root 4096 Jul 21 00:00 usr
drwxr-xr-x   1 root root 4096 Jul 21 00:00 var
root@369b6256d0ff:/# cd /mnt/efs
root@369b6256d0ff:/mnt/efs# pwd
/mnt/efs

EFS上のファイルがDocker内にあることを確認できておリます。

root@369b6256d0ff:/mnt/efs# ls
lalala.txt
root@369b6256d0ff:/mnt/efs# cat lalala.txt
123123lalala

さらに、nginxのDocker内に、ファイルを作成してみました。

root@369b6256d0ff:/mnt/efs# touch dadada.txt
root@369b6256d0ff:/mnt/efs# ls
dadada.txt  lalala.txt

nginxのDockerをログアウトし、EC2画面に戻り、EC2でEFS上の内容を確認しておくと、同じように、先ほど作成したファイルがあることを確認できておリます。

root@369b6256d0ff:/mnt/efs# exit
exit
$ pwd
/mnt/efs
$ ls
dadada.txt  lalala.txt

これでEC2内のDockerをEFSとマウントは実現できました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1