docker使ってみた

## 初めに
業務でECSを使うことがありそうなのでなのでその勉強をしようと思いましたが、そもそもコンテナ自体全く触ったことがなかったのでdockerを触ってみたいと思います。とりあえず、EC2にdockerをインストールして、apacheのインストール行いたいと思います。余力があればコンテナのメリットである環境を自由に載せたり、降ろしたりできるというのをしてみたいと思います。（これを書いている時点ではやり方はわかっていないです(笑)）

## EC2用意
移行元と移行先のEC2を2台作成しました。今回はDockerの内容なのでEC2の設定は省略します。
![スクリーンショット 2022-10-17 232117.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823786/1f84bfa9-b0e6-6c83-ebc8-3b5972ca6a50.png)
※試行錯誤している途中でEC2の再作成など行ったのでEC2名が若干変わっています。


## dockerインストール

#### 移行元サーバー
```
①Dockerのインストールを行い、起動を行います。
[root@MOTO ~]# yum install docker 
[root@MOTO ~]# docker -v
Docker version 20.10.17, build 100c701
[root@MOTO ~]# systemctl start docker
[root@MOTO ~]# systemctl status docker
②Dockerのcentosのイメージを取得します
[root@MOTO ~]# docker pull centos
[root@MOTO ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
centos       latest    5d0da3dc9764   13 months ago   231MB
③イメージを元にコンテナを起動します
[root@MOTO ~]# docker run -p 80:80 -p 443:443　-d --privileged centos:latest /sbin/init
739851d39d12da30ef8e9c83029721df500f6a62e851a44d9e1510a6c52f1b0f
[root@MOTO ~]# docker ps
CONTAINER ID   IMAGE           COMMAND        CREATED          STATUS          PORTS                                                                      NAMES
958123a8e944   centos:latest   "/sbin/init"   21 seconds ago   Up 20 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   peaceful_merkle
④Dockerコンテナ内部に入ります
[root@MOTO ~]# docker exec -it 958123a8e944 /bin/bash
```

#### 移行元サーバー(コンテナに入ってから)
```
①apache httpdをインストール、起動します
[root@739851d39d12 /]# yum install httpd
[root@739851d39d12 /]# systemctl start httpd
[root@739851d39d12 /]# systemctl status httpd
②index.htmlを作成します
[root@739851d39d12 /]# vi /var/www/html
[root@958123a8e944 /]# cat /var/www/html/index.html
<h1>DOCKER TEST</h1>
```
※CentOSはyumのレポジトリの設定の問題でyumコマンドが使用できなかったので下記を参考にしました。
https://qiita.com/yamada-hakase/items/cb1b6124e11ca65e2a2b

ブラウザで移行元サーバーのIPにアクセスすると設定した内容が表示されました！
![スクリーンショット 2022-10-17 231821.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823786/4779379f-a7b0-487d-6258-9a6e594eecbe.png)



#### 移行先サーバー(コンテナから出てから)
```
①変更(apacheインストール)したコンテナのイメージを取得します
[root@MOTO ~]# docker commit -a "taki" 958123a8e944 docker-apache
sha256:3caca08bcc4f256a0c54a40fca6682b8060d9a83f70df97bc5047b49ed54a7ab
[root@MOTO ~]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
docker-apache   latest    3caca08bcc4f   33 seconds ago   280MB
centos          latest    5d0da3dc9764   13 months ago    231MB
②イメージをtar形式で圧縮します
[root@MOTO ~]# docker save docker-apache > docker-apache.tar
[root@MOTO ~]# ll
total 280928
-rw-r--r-- 1 root root 287669760 Oct 12 13:54 docker-apache.tar
```

一度tarファイルを自端末にダウンロード→移行先のサーバーにアップロードします。（どちらもTeraTermのSSH SCP機能）

#### 移行先
```
①Dockerのインストール、起動を行います
[root@ip-10-0-0-156 ~]# yum install docker
[root@ip-10-0-0-156 ~]# docker -v
[root@ip-10-0-0-156 ~]# systemctl start docker
[root@ip-10-0-0-156 ~]# systemctl status docker
②圧縮したイメージファイルを読み込みます
[root@ip-10-0-0-156 ~]# docker load < /home/ec2-user/docker-apache.tar
[root@ip-10-0-0-156 ~]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED      SIZE
docker-apache   latest    3caca08bcc4f   5 days ago   280MB
②イメージを元にコンテナを起動します
[root@ip-10-0-0-156 ~]# docker run -p 80:80 -p 443:443 -d --privileged docker-apache:latest /sbin/init
[root@ip-10-0-0-156 ~]# docker ps
CONTAINER ID   IMAGE                  COMMAND        CREATED          STATUS          PORTS                                                                      NAMES
7140bffe7eb7   docker-apache:latest   "/sbin/init"   20 minutes ago   Up 20 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   sharp_sanderson
③Dockerコンテナ内部に入ります
[root@ip-10-0-0-156 ~]# docker exec -it 7140bffe7eb7 /bin/bash
④Apacheを起動します
[root@7140bffe7eb7 /]# systemctl start httpd
```

移行先のIPアドレスをブラウザに入力すると移行元サーバーで作成したのと同じページが表示できました！
![スクリーンショット 2022-10-17 225117.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823786/9ad74c99-8f6f-ff88-0b72-d0267239bd53.png)


## まとめ
Dockerのコンテナ作成から他サーバーへの移行まで行うことができました！初めてだったのですんなりとはいかなかったですが、それでもコンテナの便利さを実感できました！ただ、移行先のサーバーはせっかくなのでOSを変えて行いたかったんですが、Dockerのインストールやもろもろで詰まってしまったのでどちらもAmazonLinuxで行いました。。。