Docker を AWS で試してみる
やりたいこと
世の中に分かりやすい解説があふれています
Docker についての分かりやすい解説は世の中にあふれているのでそちらを参照された方が賢明です。
オススメは以下です。
他にも、Docker 入門、Docker 初心者などと検索すると、たくさんの優良な記事が出てきます。
すごい時代になったなとオジサンは感心しております。
やりたいこと
さて、そこで今回は、AWS の AmazonLinux2 に Docker をインストールをして Apache2 環境を構築するところまでをやってみたいと思います。
AWS の基本サービスは理解していることを前提として進めていきます。
公式サイトの手順を見る
CentOS
AmazonLinux2 ということは、CentOS の手順を参考にするのが良いと思いました。
CentOS のインストール手順の公式サイトはこちら「Install Docker Engine on CentOS」です。
Uninstall old versions
[root@ip-10-0-50-26 ~]# yum remove docker \
> docker-client \
> docker-client-latest \
> docker-common \
> docker-latest \
> docker-latest-logrotate \
> docker-logrotate \
> docker-engine
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
No Match for argument: docker
No Match for argument: docker-client
No Match for argument: docker-client-latest
No Match for argument: docker-common
No Match for argument: docker-latest
No Match for argument: docker-latest-logrotate
No Match for argument: docker-logrotate
No Match for argument: docker-engine
No Packages marked for removal
SET UP THE REPOSITORY
[root@ip-10-0-50-26 ~]# yum install -y yum-utils
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core | 3.7 kB 00:00:00
amzn2extra-docker | 3.0 kB 00:00:00
mysql-connectors-community | 2.5 kB 00:00:00
mysql-tools-community | 2.5 kB 00:00:00
mysql57-community | 2.5 kB 00:00:00
packages-microsoft-com-prod | 3.0 kB 00:00:00
pgdg-common | 2.9 kB 00:00:00
pgdg10 | 3.6 kB 00:00:00
pgdg11 | 3.6 kB 00:00:00
pgdg12 | 3.6 kB 00:00:00
pgdg95 | 3.6 kB 00:00:00
pgdg96 | 3.6 kB 00:00:00
packages-microsoft-com-prod/primary_db | 1.9 MB 00:00:00
64 packages excluded due to repository priority protections
Package yum-utils-1.1.31-46.amzn2.0.1.noarch already installed and latest version
Nothing to do
[root@ip-10-0-50-26 ~]# yum-config-manager \
> --add-repo \
> https://download.docker.com/linux/centos/docker-ce.repo
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
INSTALL DOCKER ENGINE
[root@ip-10-0-50-26 ~]# yum install docker-ce docker-ce-cli containerd.io
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
docker-ce-stable | 3.5 kB 00:00:00
(1/2): docker-ce-stable/x86_64/updateinfo | 55 B 00:00:00
(2/2): docker-ce-stable/x86_64/primary_db | 45 kB 00:00:00
64 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package containerd.io.x86_64 0:1.2.13-3.2.el7 will be installed
--> Processing Dependency: container-selinux >= 2:2.74 for package: containerd.io-1.2.13-3.2.el7.x86_64
---> Package docker-ce.x86_64 3:19.03.12-3.el7 will be installed
--> Processing Dependency: container-selinux >= 2:2.74 for package: 3:docker-ce-19.03.12-3.el7.x86_64
--> Processing Dependency: libcgroup for package: 3:docker-ce-19.03.12-3.el7.x86_64
---> Package docker-ce-cli.x86_64 1:19.03.12-3.el7 will be installed
--> Running transaction check
---> Package containerd.io.x86_64 0:1.2.13-3.2.el7 will be installed
--> Processing Dependency: container-selinux >= 2:2.74 for package: containerd.io-1.2.13-3.2.el7.x86_64
---> Package docker-ce.x86_64 3:19.03.12-3.el7 will be installed
--> Processing Dependency: container-selinux >= 2:2.74 for package: 3:docker-ce-19.03.12-3.el7.x86_64
---> Package libcgroup.x86_64 0:0.41-21.amzn2 will be installed
--> Finished Dependency Resolution
Error: Package: containerd.io-1.2.13-3.2.el7.x86_64 (docker-ce-stable)
Requires: container-selinux >= 2:2.74
Error: Package: 3:docker-ce-19.03.12-3.el7.x86_64 (docker-ce-stable)
Requires: container-selinux >= 2:2.74
You could try using --skip-broken to work around the problem
** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows:
Error 発生
原因は docker-ce.repo
AmazonLinux2 に対して、docker-ce.repo からはインストールできません。
実は、AWS が専用のインストール方法を用意してれていました。最初からこちらを見ていれば。。。
[root@ip-10-0-50-26 ~]# cd /etc/yum.repos.d/
[root@ip-10-0-50-26 yum.repos.d]# ls
amzn2-core.repo docker-ce.repo amzn2-extras.repo
[root@ip-10-0-50-26 yum.repos.d]# rm docker-ce.repo
[root@ip-10-0-50-26 yum.repos.d]# ls
amzn2-core.repo amzn2-extras.repo
[root@ip-10-0-50-26 yum.repos.d]# amazon-linux-extras install docker
...
Installed:
docker.x86_64 0:19.03.6ce-4.amzn2
Dependency Installed:
containerd.x86_64 0:1.3.2-1.amzn2 libcgroup.x86_64 0:0.41-21.amzn2 pigz.x86_64 0:2.3.4-1.amzn2.0.1
runc.x86_64 0:1.0.0-0.1.20200204.gitdc9208a.amzn2
Complete!
[root@ip-10-0-50-26 yum.repos.d]# service docker start
Redirecting to /bin/systemctl start docker.service
[root@ip-10-0-50-26 yum.repos.d]# usermod -a -G docker ec2-user
ec2-user で入り直して確認
[ec2-user@ip-10-0-50-26 ~]$ docker info
Client:
Debug Mode: false
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 19.03.6-ce
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: ff48f57fc83a8c44cf4ad5d672424a98ba37ded6
runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 4.14.186-146.268.amzn2.x86_64
Operating System: Amazon Linux 2
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 983.3MiB
Name: ip-10-0-50-26.ap-northeast-1.compute.internal
ID: N3JD:E4WY:ZB4Y:CLF5:U7Z7:QA2K:B3MV:IUT4:MC6T:633W:PYCG:JRKD
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
何やら WARNING が出ておりますが、一旦気にせず進めます。
Docker イメージの作成
Dockerfile
[ec2-user@ip-10-0-50-26 20200910]$ touch Dockerfile
[ec2-user@ip-10-0-50-26 20200910]$ ls
Dockerfile
[ec2-user@ip-10-0-50-26 20200910]$ vi Dockerfile
FROM ubuntu:18.04
# Install dependencies
RUN apt-get update && \
apt-get -y install apache2
# Install apache and write hello world message
RUN echo 'Hello World!' > /var/www/html/index.html
# Configure apache
RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \
echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \
echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \
echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \
chmod 755 /root/run_apache.sh
EXPOSE 80
CMD /root/run_apache.sh
[ec2-user@ip-10-0-50-26 20200910]$ docker build -t hello-world .
Sending build context to Docker daemon 2.56kB
Step 1/6 : FROM ubuntu:18.04
...
Successfully built d34eb3c7242f
Successfully tagged hello-world:latest
[ec2-user@ip-10-0-50-26 20200910]$ docker images --filter reference=hello-world
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d34eb3c7242f 2 minutes ago 190MB
[ec2-user@ip-10-0-50-26 20200910]$ docker run -t -i -p 80:80 hello-world
これで Docker イメージの作成が出来ました。
http 接続確認
手元の端末からブラウザで以下の URL にアクセスしてみます。
http://ec2-18-183-98-156.ap-northeast-1.compute.amazonaws.com:80
ポイントは PORT を 80 で指定することです。
Hello World! と表示されれば OK です。
久しぶりの投稿
ここ1か月はプライベートに仕事に忙しく、記事の更新が止まっていました。
やっと落ち着いてきましたので、これからは定期的に更新してまいりたいと思います。