- 投稿日:2020-06-19T20:28:05+09:00
psql のためだけに Docker を使う
DB をホストするわけじゃないので PostgreSQL をインストールしたくないパーソンです。
すぐ忘れるのでメモ。
使い捨て
# docker image を pull $ docker pull postgres # コンテナ起動して bash へ(--rm で終了即コンテナ削除) $ docker run --rm -it postgres /bin/bash # psql を使うよ root@xxxx:/# psql -h <host> -d <database> -U <user>コンテナ使いまわし(bash のコマンド履歴使いたい場合)
# docker image を pull $ docker pull postgres # コンテナ起動して bash へ(--name でコンテナに名前付けて消さない) $ docker run --name psql -it postgres /bin/bash # psql を使うよ root@xxxx:/# psql -h <host> -d <database> -U <user> # 抜け root@xxxx:/# exit # もう一度コンテナへ $ docker start -ai psql # 履歴使える root@xxxx:/# psql -h <host> -d <database> -U <user>コンテナを消すのは
docker rm psql。
- 投稿日:2020-06-19T13:49:49+09:00
Dockerで経路制御によりブリッジネットワーク間で通信してみる!
Dockerのブリッジネットワークを使えばコンテナ同士をネットワーク経由で接続させる事ができます。ブリッジネットワークはユーザーが任意に作成することができ、異なるブリッジネットワークに接続しているコンテナは通信できない仕組みになっています。が、ブリッジネットワーク間にコンテナを作成し、経路制御して異なる2つのブリッジネットワークに接続しているコンテナ間で通信させてみようと思います。
やりたいことはこんな感じ。
centos-net1 コンテナと centos-net2 コンテナ が通信できるようにします。図の通り、2つのコンテナは異なるブリッジネットワークに接続されているので centos-router コンテナがパケットのフォワーディングを担当します。
ルーティング(経路制御)ってなんだっけ
Wikipedia先生によるとこう定義されています。
ルーティング(英: routing)あるいは経路制御(けいろせいぎょ)とは、データを目的地まで送信するために、コンピュータネットワーク上のデータ配送経路を決定する制御の事である。
簡単に言ってしまえばパケットをサブネットを超えて送信したいときの制御のことですね。同じをサブネット内であればIPアドレスを元に直接宛先のホストへパケットの送信要求を投げることができます。しかし自分が所属していないネットワークに存在するホスト宛にパケットを送信したい場合、ルーティングが必要になります。
ルーティングテーブルとはルーティングをするときに、パケットをどのホストに対して投げるかを決定する際に用いる表のことです。例えばこんな感じ。
# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.19.0.1 0.0.0.0 UG 0 0 0 eth0 172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0ルーティングテーブルは以下のように使用されます。
- 宛先IPアドレスと一致するエントリがあるか調べる。あるのであれば、Gatewayに記載されているIPアドレスに向けてパケットを投げる。このとき、Gatewayが
0.0.0.0に設定されているものは自身の所属するサブネットのためルーティングは不要になる(ここは明記されているドキュメントを見つけられなかったので要調査です)。- 宛先IPアドレスと一致するエントリがない場合、デフォルトルートのGatewayに向けてパケットを投げる。デフォルトルートはDestinationが
0.0.0.0になっているエントリ。ネットワークとコンテナの作成
ではではDockerでルーティングテーブルをいじくり、2つのブリッジネットワークをつなげてみましょう。
ブリッジネットワークを2つ作成します。図と同じようにするため、サブネットアドレスを指定しています。
$ docker network create net1 --subnet=172.19.0.0/16 d40bf931a362d32c2b1f37470fa24247d290e017f74ceb4fea3b38c947d87fb1 $ docker network create net2 --subnet=172.20.0.0/16 863b0f24ad6f99207733ba13e28f6dc16d265693112186c0521fd4cb8e49f972コンテナをそれぞれ立ち上げ、作成したブリッジネットワークにつなげます。コンテナの起動オプションとして
privilegedを指定していますが、これはルーティングテーブルを変更するために必要な権限周りのオプションです。$ docker run -dit --name centos-net1 --privileged --net="net1" centos:centos7 2f08362d149303f33a49c4a718063437ad842228d83850a005e937db0b89f69f $ docker run -dit --name centos-net2 --privileged --net="net2" centos:centos7 997e496125cc5b5f29e2bd7c48850b1bfa001aea334d6e5f8afea3906d4c0d9a $ docker run -dit --name centos-router --net="net1" centos:centos7 a9f0e3a4d0bdb9d8d378a317f8cfce31ca3504d13897a9f6ad9909bcdbd4ce4d $ docker network connect net2 centos-routerそれぞれのコンテナに接続してルーティングテーブルとパケット通信を監視するソフトウェアをインストールします。
# yum -y install net-tools tcpdump tracerouteルーティングテーブルの確認
centos-net1 のルーティングテーブルを確認してみます。ルーティングテーブルは
routeコマンドで表示できます。# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.19.0.1 0.0.0.0 UG 0 0 0 eth0 172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0Destinationが
0.0.0.0となっているエントリはデフォルトルートですね。デフォルトルートはどのエントリにも一致しない場合にどのIPアドレス宛にパケットを送り出すかを表すエントリです。上記の場合は自身の所属するサブネット以外への通信はすべて172.19.0.1にパケットを送り出す設定になっています。なので、pingを centos-net2 コンテナに向けて打っても172.19.0.1に向けてパケットが飛ばされるので届きません。試しに打ってみましょう。centos-net2 コンテナのIPアドレスは
172.20.0.2ですね。$ docker network inspect net2 〜一部を抜粋〜 "Containers": { "997e496125cc5b5f29e2bd7c48850b1bfa001aea334d6e5f8afea3906d4c0d9a": { "Name": "centos-net2", "EndpointID": "cc7611fcb5ae71c7a8a79fb658a374b98c15d95b4f42848b7eb70fac05317208", "MacAddress": "02:42:ac:14:00:02", "IPv4Address": "172.20.0.2/16", "IPv6Address": "" }, "a9f0e3a4d0bdb9d8d378a317f8cfce31ca3504d13897a9f6ad9909bcdbd4ce4d": { "Name": "centos-router", "EndpointID": "6a8f1aa134751cd3232a214e08599ac0f00cf37ad06cb714a99a8d3fa92b37c1", "MacAddress": "02:42:ac:14:00:03", "IPv4Address": "172.20.0.3/16", "IPv6Address": "" } }, 〜一部を抜粋〜centos-net1 コンテナから centos-net2 コンテナに向けてpingを打ちます。
# ping 172.20.0.2 PING 172.20.0.2 (172.20.0.2) 56(84) bytes of data. ^C --- 172.20.0.2 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2006ms100% packet loss と表示されて通信できていないことがわかりますね。デフォルトルートである
172.19.0.1にパケットが送出されているかをネットワークの経路を表示できるtracerouteコマンドで確認してみます。# traceroute 172.20.0.2 -n traceroute to 172.20.0.2 (172.20.0.2), 30 hops max, 60 byte packets 1 172.19.0.1 2.570 ms 2.281 ms 2.052 msルーティングテーブルの変更
ルーティングテーブルを変更して centos-net1 と centos-net2 コンテナが通信できるようにします。centos-net1 のルーティングテーブルで
172.20.0.0/16のネットワークに向けたパケットを centos-router コンテナに向けて投げるようにし、centos-router コンテナがパケットをフォワーディング(転送)するようにします。# route add -net 172.20.0.0 netmask 255.255.0.0 gw 172.19.0.3 eth0 # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.19.0.1 0.0.0.0 UG 0 0 0 eth0 172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 172.20.0.0 172.19.0.3 255.255.0.0 UG 0 0 0 eth0centos-net2 でも応答ができるよう同じ要領でルーティングテーブルに変更を加えます。
# route add -net 172.19.0.0 netmask 255.255.0.0 gw 172.20.0.3 eth0 # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.20.0.1 0.0.0.0 UG 0 0 0 eth0 172.19.0.0 172.20.0.3 255.255.0.0 UG 0 0 0 eth0 172.20.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0centos-router ではIPフォワーディングが有効になっているかを確認します。
# sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1ここまで設定できたら centos-net1 から centos-net2 に向けてpingを打ってみましょう。
# ping 172.20.0.2 PING 172.20.0.2 (172.20.0.2) 56(84) bytes of data. 64 bytes from 172.20.0.2: icmp_seq=1 ttl=63 time=2.63 ms 64 bytes from 172.20.0.2: icmp_seq=2 ttl=63 time=0.318 ms 64 bytes from 172.20.0.2: icmp_seq=3 ttl=63 time=0.177 ms 64 bytes from 172.20.0.2: icmp_seq=4 ttl=63 time=0.164 ms 64 bytes from 172.20.0.2: icmp_seq=5 ttl=63 time=0.191 ms ^C --- 172.20.0.2 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4075ms rtt min/avg/max/mdev = 0.164/0.696/2.634/0.970 ms疎通できましたね。
パケットが centos-router を経由しているかも確認してみましょう。
# traceroute 172.20.0.2 -n traceroute to 172.20.0.2 (172.20.0.2), 30 hops max, 60 byte packets 1 172.19.0.3 0.258 ms 0.114 ms 0.340 ms 2 172.20.0.2 0.461 ms 0.422 ms 0.128 mscentos-router (
172.19.0.3)を経由しているのがわかりますね。centos-router のTCPパケットをキャプチャしてみるとIPフォワーディングの様子を見ることができます。
# tcpdump -i eth0 -n tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 01:48:39.190754 IP 172.19.0.2 > 172.20.0.2: ICMP echo request, id 22, seq 53, length 64 01:48:39.190981 IP 172.20.0.2 > 172.19.0.2: ICMP echo reply, id 22, seq 53, length 64 01:48:40.213036 IP 172.19.0.2 > 172.20.0.2: ICMP echo request, id 22, seq 54, length 64 # tcpdump -i eth1 -n tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes 01:49:06.738801 IP 172.19.0.2 > 172.20.0.2: ICMP echo request, id 22, seq 80, length 64 01:49:06.738874 IP 172.20.0.2 > 172.19.0.2: ICMP echo reply, id 22, seq 80, length 64 01:49:07.763733 IP 172.19.0.2 > 172.20.0.2: ICMP echo request, id 22, seq 81, length 64
172.19.0.0/16に所属するeth0インターフェイスと172.20.0.0/16に所属するeth1インターネットそれぞれでパケットをフォワーディングしている様子が見れました。使用したアイコン
Icons made by Freepik from www.flaticon.com
- 投稿日:2020-06-19T13:40:38+09:00
cygwinのdockerでエラー [Failed to execute script docker-compose]
laravelを使ってlocal開発をしている時にdockerコマンドでエラーが発生するようになった。
またローカルの環境ではcygwin上で開発を行っている。╰─➤ docker-compose ps 127 ↵ [6276] Failed to execute script docker-compose Traceback (most recent call last): File "docker-compose", line 6, in <module> File "compose\cli\main.py", line 72, in main File "compose\cli\main.py", line 125, in perform_command File "compose\cli\command.py", line 47, in project_from_options File "compose\config\environment.py", line 77, in from_env_file File "compose\config\environment.py", line 72, in _initialize File "compose\config\environment.py", line 44, in env_vars_from_file File "c:\jenkins\workspace\dsg_compose_1.25.5\venv\lib\codecs.py", line 714, in __next__ File "c:\jenkins\workspace\dsg_compose_1.25.5\venv\lib\codecs.py", line 645, in __next__ File "c:\jenkins\workspace\dsg_compose_1.25.5\venv\lib\codecs.py", line 558, in readline File "c:\jenkins\workspace\dsg_compose_1.25.5\venv\lib\codecs.py", line 504, in read File "c:\jenkins\workspace\dsg_compose_1.25.5\venv\lib\encodings\utf_8_sig.py", line 117, in decode UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 10: invalid start byte色々ググってみたが、日本語を使ってるととか情報が出てくるがそもそもdocker関係を修正していないにエラーが発生するようになった。
で思いついたのがlaravelで使用している
.envをシンボリックリンクに変更したのを思い出し元に戻したら直った。。
dockerも.envを使うらしいのでcygwin環境下でのシンボリックリンクがなんかだめみたい。
- 投稿日:2020-06-19T13:38:18+09:00
DockerでARPテーブルを確認してみる!
仕事の都合上Linuxやネットワークの勉強をしています。深く関わったことがない領域ですし、字を追っただけでは理解に限界があるなーと思いまして、実際に触って、見て理解しようかと思いました。というわけでこの記事はその記録というわけです。
タイトル通りARPテーブルを見てネットワークの仕組みの一部を覗いてみようかと。環境はDockerを使います。
$ docker --version Docker version 19.03.8, build afacb8bARPってなんだっけ
ARP (Address Resolution Protocol)はIPv4アドレスからMACアドレスを解決するために使用される通信プロトコルです。ネットワークに接続されたコンピュータが通信するときには通信相手のIPアドレスに向けてパケットを送信します。しかし、実際にはデータリンク層があるのでIPアドレスとMACアドレスの対応を管理しなくてはいけません。ARPはIPアドレスは分かっているけれど、MACアドレスがわからない場合に単一のサブネットワークの内部で解決を行います。
まずDockerコンテナを同じネットワークに接続させる
centos1 と centos2 のコンテナをデフォルトのブリッジネットワークに接続させます。
$ docker run -dit --name centos1 centos:centos7 6ce3b9540c9eb79a672c4b438f761967f6315068a199c8309b8c7678660c9fcb $ docker run -dit --name centos2 centos:centos7 6899cf57b849c5f164b26b8b12dd78ebb9ac78679673847cee240855b65a16b7 $ docker network inspect bridge ~(略)~ "Containers": { "6899cf57b849c5f164b26b8b12dd78ebb9ac78679673847cee240855b65a16b7": { "Name": "centos2", "EndpointID": "cc0278128b0743be739b61567f3831f2371ea2f211182345292876f0c35eecf2", "MacAddress": "02:42:ac:11:00:03", "IPv4Address": "172.17.0.3/16", "IPv6Address": "" }, "6ce3b9540c9eb79a672c4b438f761967f6315068a199c8309b8c7678660c9fcb": { "Name": "centos1", "EndpointID": "87a14892863da5410cbdd93962540efb796b7a33f99c3ed39c6f96e28c271958", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" } }, ~(略)~centos1 でARPテーブルを表示します。ARPテーブルとはそのホストが記憶しているIPアドレスとMACアドレスの対応です。初期状態ではコマンドが入っていないのでインストールしています。(ARPテーブルは
arpコマンドで表示できます。)$ docker attach centos1 [root@6ce3b9540c9e /]# yum -y install net-tools [root@6ce3b9540c9e /]# arp -n Address HWtype HWaddress Flags Mask Iface 172.17.0.1 ether 02:42:c0:38:4f:cb C eth0まだ何も通信していませんがARPテーブルに一つのエントリがキャッシュされています。このアドレスはルーティングテーブルを見てみるとデフォルトルートになっていることがわかります。デフォルトルートとは簡単に言うと経路制御表でマッチしなかった場合どのIPアドレス宛にパケットを送信するかを表すものです。(ルーティングテーブルは
netstat -rコマンドで表示できます。)[root@6ce3b9540c9e /]# netstat -r -n Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 172.17.0.1 0.0.0.0 UG 0 0 0 eth0 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0余談になりますがデフォルトルートになっている
172.17.0.1アドレスはDockerのデフォルトブリッジで設定されているゲートウェイアドレスと一致します。このあたりの知識整理は機会があればまた後でしておきたいですね。コンテナ間で通信してARPテーブルが変わるか確認する
centos1 から centos2 へpingコマンドを使って通信し、ARPテーブルがどのように変わるか確認してみましょう。
[root@6ce3b9540c9e /]# ping 172.17.0.3 PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data. 64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.220 ms 64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.113 ms 64 bytes from 172.17.0.3: icmp_seq=3 ttl=64 time=0.248 ms 64 bytes from 172.17.0.3: icmp_seq=4 ttl=64 time=0.116 ms ^C --- 172.17.0.3 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3082ms rtt min/avg/max/mdev = 0.113/0.174/0.248/0.061 ms [root@6ce3b9540c9e /]# arp -n Address HWtype HWaddress Flags Mask Iface 172.17.0.1 ether 02:42:c0:38:4f:cb C eth0 172.17.0.3 ether 02:42:ac:11:00:03 C eth0最後の行に新しいエントリが追加されているのがわかりますね。これは centos2 のIPアドレスとMACアドレスに一致します。つまり、centos1 と centos2 はARPによってIPアドレスとMACアドレスの情報を共有できたということになります。ちなみに、pingコマンドで受信側になった centos2 でも同じようにARPテーブルが更新されます。
使用したアイコン
Icons made by Freepik from www.flaticon.com
- 投稿日:2020-06-19T13:08:22+09:00
Docker環境内で日本語入力
諸説ありますがこれでいけました。
下記記載の各RUNコマンドを実行しないとうまくいきませんでした。# Japanese RUN apt-get update \ && apt-get install -y locales \ && locale-gen ja_JP.UTF-8 ENV LANG ja_JP.UTF-8 ENV LANGUAGE ja_JP:ja ENV LC_ALL=ja_JP.UTF-8 RUN localedef -f UTF-8 -i ja_JP ja_JP.utf8参考リンク
https://qiita.com/motoki_giants/items/0c3b9d174edef9410310
https://qiita.com/munimuni/items/93a87ff4a6366eb13f0d
- 投稿日:2020-06-19T10:25:11+09:00
初めてのKubernetes - 1.環境構築
はじめに
Kubernetesってなんか面白そう。よく分からんけど。
と、ふと思ったので調べてみることにしました。
ですが、雑誌やWebの記事などを読んでも、よく分かりませんでした。
というわけで実際に手を動かして学んでみることにしました。実際に手を動かそうと思ったのですが、自宅にPCが何台も持っていません。
ただ、なぜか放置されたRaspberry Pi 3 Model Bが4台も転がっていたので、
これを使ってKubernetesの環境を構築しようと思い立ちました。参考記事
多くの方々がすでに取り組まれている話題のようで、
以下の記事がとても参考になり、ほぼパクリしました。ただ、Raspberry Pi 3 Model B x 4 で環境構築しようとしているので、
そこが少しだけ違う点です。材料
参考記事の方々はRaspberry Pi 3 Model B x 3 で構築していて、
スタッカブルケースは1台でコンパクトに仕上げています。ですが、私は、Raspberry Pi 3 Model B x 4 で構築しようとしているので、
Raspberry Pi 3 Model B用とネットワーク+USB用の2台のスタッカブルケースで構築します。
- エレコム LANケーブル 0.15m 爪折れ防止コネクタ やわらか CAT6準拠 ブルー LD-GPY/BU015 x 1
- エレコム LANケーブル 0.3m 爪折れ防止コネクタ やわらか CAT6準拠 ブルー LD-GPY/BU03 x 4
- BUFFALO 無線LAN親機 11ac/n/a/g/b 433/150Mbps トラベルルーター ブラック WMR-433W2-BK x 1
- ロジテック スイッチングハブ 5ポート 10/100Mbps AC電源 小型 LAN-SW05PSBE x 1
- Micro USBケーブル 短い CABEPOW【30cm3本 / 2.4A急速充電 / 高速データ転送】Android 充電 高耐久ナイロン編組み マイクロusbケーブル Huawei/Galaxy/Sony/Xperia/Nexus/Moto/Kindle / PS4などアンドロイド 充電対応(30cm3本 赤) x 2
- 両面テープ(透明 超強力 粘着テープ 3cm*2mm*5m) x 1
- GeeekPi Raspberry Piクラスタケーススタッカブルケース冷却ファン付きRaspberry Pi 4ケースRaspberry Pi 4モデルBおよび3B + 3B 2B用ヒートシンク(4レベル)(茶色) x 1
- 積層式ケース for Raspberry Pi 4 / Pi 3 Model B+ 専用 保護用クリア・アクリルケース カバー アルミヒートシンク二個付き 高硬度 耐用性あり Clear/透明 (4段) x 1
- Anker PowerPort 6 (60W 6ポート USB急速充電器) iPhone / iPad / iPod / Xperia / Galaxy / Nexus / 3DS / PS Vita / ウォークマン他対応 【PowerIQ搭載】 (ブラック) x 1
- TRUSCO(トラスコ) マジックバンド結束テープ 両面 黒 10mm×1.5m MKT1015BK x 1
- サンワサプライ マジックバンド CA-MF6W x 1
完成形
参考記事の方々の手順とほとんど全く同じですので、構築手順の詳細は省略します。
購入したUSBケーブルは思ったより丈夫で固くて取り回しはあまり自由にはできません。
ただ、ケーブルの断線の心配がないので安心です。
スタッカブルケース2台で組むと持ち歩くのには辛いですが、
自宅に置いておく分には、1台に詰め込まなくても良いので、
環境構築としては比較的簡単にできる思います。まとめ
先駆者の方々の取り組みを参考にさせて頂いたので、何も迷うことなく構築できました。
次は、この環境にKubernetesをインストールして動作確認までをやっていきたいと思います。
- 投稿日:2020-06-19T10:04:50+09:00
DockerでGitLabサーバーを立てる
今日も小ネタです。
何番煎じってネタですけど、つまづきポイントあったのでメモがてら。構築セット一式はこちら → https://github.com/yagrush/docker-gitlab
必要環境
- Linux または Mac
- メモリ:8GB以上推奨(←これが意外とハマりどころ…)
- Docker
- docker-compose
MacとLinux(on AWS)で動作確認済です。
Linux(on AWS)は「無料でええやろ」ってt2.microとかでやってて、「なんで動かねんだぁ…」ってハマりました…
t2.large(メモリ8GiB)にしたら無事動作。ちなみにWindowsではうまく動きませんでした。
時間があるときにまた調べてみようかな。使い方
0. 構築セット一式をダウンロードする
wget https://github.com/yagrush/docker-gitlab/archive/master.zip -O docker-gitlab.zip; unzip docker-gitlab.zip; rm docker-gitlab.zip #ついでにディレクトリを移動しておく cd docker-gitlab-master1. ポート:80 を他のソフトウェアですでに使用していたら
docker-compose.ymlのports: - 80:80
- 80:80の左側の80をports: - 8081:80とか他の番号に変えてあげてください。
2. ビルド&起動する
docker-compose up -d3. GitLab の WEB UIにアクセスしてみる
http://構築したホストのアドレス:80
↑ 必ずしもドメイン振ってる必要は無く、IP直打ちでもOK。
手順1.でポート変更してたら、:80を書き換えて下さいね。成功すると、まずはじめに管理者ユーザー
rootのパスワード設定を求められるWEB画面が開きます。
設定しおわったらあらためてrootでログインしてみましょう。もしエラー画面になったら
念のため1分くらい待ってから再度アクセスしてみてください。
(中で結構色々起動しているようで重いので、待てば起動するかもしれません。)それでもダメだったら、何か問題が発生しているかもしれません。
- 投稿日:2020-06-19T02:13:43+09:00
EC2(Amazon Linux 2)にDocker CEをインストールしてみる
EC2(Amazon Linux 2)にDocker CEをインストールしてみる。
ググるとDocker公式のCentOS向けインストール手順が出てきたので、Amazon Linux 2も同じRHEL系だから大丈夫だろうとチャレンジ。
EC2インスタンスを立ち上げてSSHログイン済みのところからスタート。
インストール方法の選択
Docker CEのインストール方法はいくつかあるらしい。
~公式ドキュメントより引用~
・たいていのユーザは Docker のリポジトリをセットアップ して、そこからインストールしています。 インストールやアップグレードの作業が簡単だからです。 この方法をお勧めします。
・ユーザの中には RPM パッケージをダウンロードし、手動でインストールしている方もいます。 アップグレードも完全に手動となります。 この方法は、インターネットにアクセスできない環境で Docker をインストールするような場合には有用です。
・テスト環境や開発環境向けに、自動化された 便利なスクリプト を使って Docker のインストールを行うユーザもいます。おすすめされているリポジトリを使ったインストールをやってみる。
リポジトリのセットアップ
yum-utils、device-mapper-persistent-data、lvm2をインストール。
$ sudo yum install -y yum-utils \ > device-mapper-persistent-data \ > lvm2 Loaded plugins: extras_suggestions, langpacks, priorities, update-motd amzn2-core | 3.7 kB 00:00:00 Package yum-utils-1.1.31-46.amzn2.0.1.noarch already installed and latest version Package device-mapper-persistent-data-0.7.3-3.amzn2.x86_64 already installed and latest version Package 7:lvm2-2.02.177-4.amzn2.0.2.x86_64 already installed and latest version Nothing to do $既にインストール済みだった模様。
続いてリポジトリのセットアップ。
$ sudo 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 $Docker CEのインストール
インストール$ sudo yum install docker-ce Loaded plugins: extras_suggestions, langpacks, priorities, update-motd amzn2-core | 3.7 kB 00:00:00 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 | 44 kB 00:00:00 Resolving Dependencies --> Running transaction check ---> Package docker-ce.x86_64 3:19.03.11-3.el7 will be installed --> Processing Dependency: container-selinux >= 2:2.74 for package: 3:docker-ce-19.03.11-3.el7.x86_64 --> Processing Dependency: containerd.io >= 1.2.2-3 for package: 3:docker-ce-19.03.11-3.el7.x86_64 --> Processing Dependency: docker-ce-cli for package: 3:docker-ce-19.03.11-3.el7.x86_64 --> Running transaction check ---> Package containerd.x86_64 0:1.3.2-1.amzn2 will be obsoleted ---> Package containerd.io.x86_64 0:1.2.13-3.2.el7 will be obsoleting --> 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.11-3.el7 will be installed --> Processing Dependency: container-selinux >= 2:2.74 for package: 3:docker-ce-19.03.11-3.el7.x86_64 ---> Package docker-ce-cli.x86_64 1:19.03.11-3.el7 will be installed ---> Package runc.x86_64 0:1.0.0-0.1.20200204.gitdc9208a.amzn2 will be obsoleted --> 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.11-3.el7.x86_64 (docker-ce-stable) Requires: container-selinux >= 2:2.74 You could try using --skip-broken to work around the problem You could try running: rpm -Va --nofiles --nodigest $エラーとなった。
同じRHEL系とは言えCentOS向けだしなぁと思いつつ解決策をググっていると同じエラーになっている方がいたのでお知恵を拝借。どうも先にインストールしたdocker-ce.repoが悪さをしている模様。AWSにもAmazon Linux 2にDocker CEをインストールする方法が載っているとのことで、そちらを実行してみる。
再チャレンジ$ sudo amazon-linux-extras install docker Installing docker Loaded plugins: extras_suggestions, langpacks, priorities, update-motd Cleaning repos: amzn2-core amzn2extra-docker docker-ce-stable 13 metadata files removed 6 sqlite files removed 0 metadata files removed Loaded plugins: extras_suggestions, langpacks, priorities, update-motd amzn2-core | 3.7 kB 00:00:00 amzn2extra-docker | 3.0 kB 00:00:00 docker-ce-stable | 3.5 kB 00:00:00 (1/7): amzn2-core/2/x86_64/group_gz | 2.5 kB 00:00:00 (2/7): amzn2-core/2/x86_64/updateinfo | 218 kB 00:00:00 (3/7): amzn2extra-docker/2/x86_64/updateinfo | 69 B 00:00:00 (4/7): amzn2extra-docker/2/x86_64/primary_db | 68 kB 00:00:00 (5/7): docker-ce-stable/x86_64/updateinfo | 55 B 00:00:00 (6/7): docker-ce-stable/x86_64/primary_db | 44 kB 00:00:00 (7/7): amzn2-core/2/x86_64/primary_db | 41 MB 00:00:00 Resolving Dependencies --> Running transaction check ---> Package docker.x86_64 0:19.03.6ce-4.amzn2 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================================== Package Arch Version Repository Size ================================================================================================== Installing: docker x86_64 19.03.6ce-4.amzn2 amzn2extra-docker 37 M Transaction Summary ================================================================================================== Install 1 Package Total download size: 37 M Installed size: 161 M Is this ok [y/d/N]: y Downloading packages: docker-19.03.6ce-4.amzn2.x86_64.rpm | 37 MB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : docker-19.03.6ce-4.amzn2.x86_64 1/1 Verifying : docker-19.03.6ce-4.amzn2.x86_64 1/1 Installed: docker.x86_64 0:19.03.6ce-4.amzn2 Complete! 0 ansible2 available \ [ =2.4.2 =2.4.6 =2.8 =stable ] 2 httpd_modules available [ =1.0 =stable ] 3 memcached1.5 available \ [ =1.5.1 =1.5.16 =1.5.17 ] 5 postgresql9.6 available \ [ =9.6.6 =9.6.8 =stable ] 6 postgresql10 available [ =10 =stable ] 8 redis4.0 available \ [ =4.0.5 =4.0.10 =stable ] 9 R3.4 available [ =3.4.3 =stable ] 10 rust1 available \ [ =1.22.1 =1.26.0 =1.26.1 =1.27.2 =1.31.0 =1.38.0 =stable ] 11 vim available [ =8.0 =stable ] 13 ruby2.4 available \ [ =2.4.2 =2.4.4 =2.4.7 =stable ] 15 php7.2 available \ [ =7.2.0 =7.2.4 =7.2.5 =7.2.8 =7.2.11 =7.2.13 =7.2.14 =7.2.16 =7.2.17 =7.2.19 =7.2.21 =7.2.22 =7.2.23 =7.2.24 =7.2.26 =stable ] 17 lamp-mariadb10.2-php7.2 available \ [ =10.2.10_7.2.0 =10.2.10_7.2.4 =10.2.10_7.2.5 =10.2.10_7.2.8 =10.2.10_7.2.11 =10.2.10_7.2.13 =10.2.10_7.2.14 =10.2.10_7.2.16 =10.2.10_7.2.17 =10.2.10_7.2.19 =10.2.10_7.2.22 =10.2.10_7.2.23 =10.2.10_7.2.24 =stable ] 18 libreoffice available \ [ =5.0.6.2_15 =5.3.6.1 =stable ] 19 gimp available [ =2.8.22 ] 20 docker=latest enabled \ [ =17.12.1 =18.03.1 =18.06.1 =18.09.9 =stable ] 21 mate-desktop1.x available \ [ =1.19.0 =1.20.0 =stable ] 22 GraphicsMagick1.3 available \ [ =1.3.29 =1.3.32 =1.3.34 =stable ] 23 tomcat8.5 available \ [ =8.5.31 =8.5.32 =8.5.38 =8.5.40 =8.5.42 =8.5.50 =stable ] 24 epel available [ =7.11 =stable ] 25 testing available [ =1.0 =stable ] 26 ecs available [ =stable ] 27 corretto8 available \ [ =1.8.0_192 =1.8.0_202 =1.8.0_212 =1.8.0_222 =1.8.0_232 =1.8.0_242 =stable ] 28 firecracker available [ =0.11 =stable ] 29 golang1.11 available \ [ =1.11.3 =1.11.11 =1.11.13 =stable ] 30 squid4 available [ =4 =stable ] 31 php7.3 available \ [ =7.3.2 =7.3.3 =7.3.4 =7.3.6 =7.3.8 =7.3.9 =7.3.10 =7.3.11 =7.3.13 =stable ] 32 lustre2.10 available \ [ =2.10.5 =2.10.8 =stable ] 33 java-openjdk11 available [ =11 =stable ] 34 lynis available [ =stable ] 35 kernel-ng available [ =stable ] 36 BCC available [ =0.x =stable ] 37 mono available [ =5.x =stable ] 38 nginx1 available [ =stable ] 39 ruby2.6 available [ =2.6 =stable ] 40 mock available [ =stable ] 41 postgresql11 available [ =11 =stable ] 42 php7.4 available [ =stable ] 43 livepatch available [ =stable ] 44 python3.8 available [ =stable ] [ec2-user@ip-172-31-14-246 ~]$うまくいったっぽい。
起動
$ sudo systemctl start docker.service $ $ sudo systemctl status docker.service ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2020-06-18 17:12:07 UTC; 9s ago Docs: https://docs.docker.com Process: 6680 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS) Process: 6662 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS) Main PID: 6687 (dockerd) Tasks: 8 Memory: 45.5M CGroup: /system.slice/docker.service mq6687 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --defa... Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1... Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1... Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1... Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1... Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1... Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1... Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1... Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1... Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal systemd[1]: Started Docker App... Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1... Hint: Some lines were ellipsized, use -l to show in full. $ $ $ $ docker --version Docker version 19.03.6-ce, build 369ce74 $自動起動設定
$ sudo systemctl enable docker.service Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. $ $ sudo systemctl list-unit-files | grep docker.service docker.service enabled $
最後にCentoOS向け手順で設定したリポジトリは不要っぽいので削除。$ cd /etc/yum.repos.d $ $ ls -l total 12 -rw-r--r-- 1 root root 985 Nov 1 2019 amzn2-core.repo -rw-r--r-- 1 root root 1015 Jun 18 16:59 amzn2-extras.repo -rw-r--r-- 1 root root 2424 Oct 18 2019 docker-ce.repo $ $ sudo rm -f docker-ce.repo $ $ $ docker --version Docker version 19.03.6-ce, build 369ce74 $
以上です。おつかれさまでした。
- 投稿日:2020-06-19T00:54:25+09:00
dockerをアンインストールしてみる (EC2 amazon linux 2)
とりあえずdockerを使ってみようと
yum -y install docker でEC2にインストール。ところが少し調べてみるとdocker(無印)は古くて、今は docker-ce か docker-ee になっているとのこと。
docker-ceのdocker公式ドキュメントを覗いてみると、アンインストールの仕方が載っていたので実行してみる。
$ sudo yum remove docker docker-common docker-selinux docker-engine Loaded plugins: extras_suggestions, langpacks, priorities, update-motd No Match for argument: docker-common No Match for argument: docker-selinux No Match for argument: docker-engine Resolving Dependencies --> Running transaction check ---> Package docker.x86_64 0:19.03.6ce-4.amzn2 will be erased --> Finished Dependency Resolution Dependencies Resolved ====================================================================================================================== Package Arch Version Repository Size ====================================================================================================================== Removing: docker x86_64 19.03.6ce-4.amzn2 @amzn2extra-docker 161 M Transaction Summary ====================================================================================================================== Remove 1 Package Installed size: 161 M Is this ok [y/N]: y Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction Erasing : docker-19.03.6ce-4.amzn2.x86_64 1/1 Verifying : docker-19.03.6ce-4.amzn2.x86_64 1/1 Removed: docker.x86_64 0:19.03.6ce-4.amzn2 Complete! $公式ドキュメントによると、この4パッケージの削除を実行してみて全て消えていればOKとのことだったため、現在何が入っているかは特に確認せずyum removeを実行。結果としてdockerだけインストールされている状態だったためこれをアンインストールしておしまいだった。
- 投稿日:2020-06-19T00:44:25+09:00
【Laravel+MySQL+Docker+nginx】Laravel開発環境をDockerで構築する手順
はじめに
Laravelの勉強するための開発環境作成手順メモです。
自分用なので雑い。準備
Dockerの設定だったりしていきます。
ディレクトリ
プロジェクトディレクトリ配下に以下2つのディレクトリを作成。
- Docker
- server
docker-compose.yml
プロジェクトディレクトリ配下にdocker-compose.ymlファイルを作成。
docker-compose.ymlversion: '3' services: php: container_name: php build: ./docker/php volumes: - ./server:/var/www nginx: image: nginx container_name: nginx ports: - 80:80 volumes: - ./server:/var/www - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - php db: image: mysql:5.7 container_name: db environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: test_db TZ: 'Asia/Tokyo' command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - ./docker/db/data:/var/lib/mysql - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf - ./docker/db/sql:/docker-entrypoint-initdb.d ports: - 4306:3306Dockerfile
Dockerディレクトリ配下にphpフォルダを作成。
その中にDockerfileを作成。FROM php:7.3-fpm COPY php.ini /usr/local/etc/php/ RUN apt-get update \ && apt-get install -y zlib1g-dev libzip-dev mariadb-client \ && docker-php-ext-install zip pdo_mysql #Composer install COPY --from=composer:latest /usr/bin/composer /usr/bin/composer ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_HOME /composer ENV PATH $PATH:/composer/vendor/bin WORKDIR /var/www RUN composer global require "laravel/installer"PHPの設定
Dockerfileと同階層でphp.iniファイルを作成。
php.ini[Date] date.timezone = "Asia/Tokyo" [mbstring] mbstring.internal_encoding = "UTF-8" mbstring.language = "Japanese"nginx
Dockerディレクトリにnginxフォルダを作成。
その中にdefault.confファイルを作成。default.confserver { listen 80; root /var/www/public; index index.php; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }MySQL
Dockerディレクトリにdbフォルダを作成。
その中にmy.cnfファイルを作成。my.cnf[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set=utf8mb4Laravelプロジェクト
プロジェクトのルートディレクトリに移動。
以下コマンドを実行。docker-compose up -d docker-compose exec php bash laravel new確認
locallhostで画面が表示されれば成功。
やったね。DB設定
dockerで開発環境を作った場合、.envファイルとdocker-compose.ymlファイルの情報を合わせとかないとmigrateできなかったりとめんどくさいので今やっとく。
DB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=test_db DB_USERNAME=root DB_PASSWORD=rootこれでDBの登録も問題なし。
まとめ
自分用メモなのでめちゃくちゃざっくりしてますが参考になれば。
- 投稿日:2020-06-19T00:40:45+09:00
Dockerでソースコードをコンテナに入れる(マウントする)には?【Windows10Home】
はじめに
初めてDockerを扱う際、多くの素晴らしい記事やチュートリアルのおかげで、イメージやコンテナの起動、削除をすぐに実施することができました。
しかし、恥ずかしながら「コンテナは起動したけど結局どうやってソースコードをコンテナの中に反映すればよいの」という状態になり、すぐに理解できず苦しんでしまいました。
また、WindowsHome独特の問題にも躓きましたので備忘録も兼ねて、私と同じような悩みをもつ初心者の方を対象に、今回はその解決策についてご紹介したいと思います。以降の運用方法は、比較的小規模の開発を想定しています。(私自身、大規模なWebシステムで用いるというよりは、自前の機械学習環境の保存や共有に用いています。)
環境
- Windows10 Home 64bit
- Docker
- Client 19.03.1
- Server 19.03.5
WindowsHomeへのDockerインストールは下記の記事を参考にさせていただきました。
- windows 10 home で docker を導入するメモ設定ファイルの準備
実現したいことは、指定したディレクトリ配下の変更がコンテナにも反映される状態を作成したいということです。これは、コンテナのボリューム(メモリ領域)と、ホストPC(Dockerを起動しているPC)のメモリ領域を共有(マウント)させることで実現できます。
Dockerfileとdocker-compose.ymlという二種類のファイルを用意する必要があります。例として下図のようなファイル構成を想定します。ファイル構成|-Dockerfile |-docker-compose.yml |-hello.pyDockerfileの例
Dockerファイルは独自のDockerImageを作成するためのファイルです。ここではTensorFlowのイメージを用いることを想定して下記のように記述します。
DockerfileFROM tensorflow/tensorflow WORKDIR /usr/src/app COPY . .簡単に各コマンドを紹介します。
コマンド 概要 FROM DockerHubからダウンロードするイメージを指定します。 WORKDIR イメージ内の作業ディレクトリを指定します。 COPY HOST(今回の場合はWindowsHome)からコンテナにファイルをコピーします。一つ目の引数がホスト側のディレクトリ、二番目の引数がコンテナ側の作業ディレクトリ(直前に指定した/usr/src/app)を表しています。 docker-compose.ymlの例
続いてdocker-compose.ymlです。DockerComposeは複数のコンテナを並列して動作させる場合に使用するサービスですが、コンテナが単独の場合でもVolumeの設定を記述しておけるので便利です。
docker-compose.ymlversion: '3' services: app: build: . container_name: py-container volumes: - .:/usr/src/app tty: true簡単に各コマンドを紹介します。
コマンド 概要 build 使用するDockerfileの保存ディレクトリを指定しています。 container_name コンテナ名を指定しています。 volume 対応させるメモリ領域を指定します。一つ目の引数がホスト側のディレクトリ、二番目の引数がコンテナ側のディレクトリ(/usr/src/app)を表しています。 tty コンテナが起動した後に標準入力を受け付けられるようにしています。 pythonファイル
サンプルとして以下を用意しました。
hello.pydef greeting(): print("Hello World") if __name__ == "__main__": greeting()Windows Homeの際に注意すべきこと
WindowsHomeでDockerを起動する際は、Virtual Boxを介して起動していることに相当しています。そのため、マウントできるメモリ領域もVirtual Boxの設定に依存します。デフォルトではUserフォルダ配下がマウントできるようになっていますので、コンテナにマウントさせたいファイルはUserフォルダ配下に保存するようにするとよいです。なお、他のディレクトリをマウントさせる場合は、Virtual Boxの設定を変更する必要があります。
dockerの実行
Windows Homeの場合は、デスクトップにできている「Docker Quickstart Terminal」のショートカットから起動します。
ターミナル上ではLinuxライクな操作が可能です。以下の3ステップでコンテナを起動します。
作成した一連のファイルが保存されているディレクトリに移動します。(前節でも記載した通り、「C:\Users」配下であることを確認してください。)
まず、下記のコマンドで、docker-compose.ymlの情報をもとにコンテナを作成し、バックグランドで起動させます。
docker-compose up -d
- 次に、下記のコマンドでコンテナ内に入ります。(正確にはコンテナが標準入力を受けつけられる状態にします。)
docker exec -it <コンテナ名> bash<コンテナ名>には今回の場合、ymlファイルで記載したpy-containerが入ります。
コンテナ内のファイルを確認するために「ls」コマンドを実行すると、確かにファイルが認識されていることが分かります。
コンテナを起動したままで、ホスト側のhello.pyで出力される文字列を「Changed Hello World」変更すると、下図のようにその変更が正しく認識されていることを確認できます。
以上で、ホスト側のソースコードの変更がコンテナ内に反映される状態を実現できました。
まとめ
今回は、コンテナを作成した後ソースコードやその変更をコンテナ内に反映させる方法を紹介しました。
- Dockerfileとdocker-compose.ymlを用意すること。
- 特別な設定をしない限り、WindowsHomeの場合は、マウントするホスト側のディレクトリはC:\Users配下にする必要があること。を紹介しました。より効率的な方法などありましたら、教えていただけますと幸いです。
参考文献
- 投稿日:2020-06-19T00:40:12+09:00
EC2にdocker-ceとdocker-composeをインストールしてみる
EC2にdocker-ce、docker-composeをインストールしてみる。
EC2はt2.microのAmazonLinux2。EC2起動
適当にパブリックサブネットでインスタンス起動。
SGはインバウンドのSSHのみ。EC2ログイン
Instance Connectでログイン。
ユーザーはec2-user。Dockerインストール
$ sudo yum -y install docker Loaded plugins: extras_suggestions, langpacks, priorities, update-motd amzn2-core | 3.7 kB 00:00:00 Resolving Dependencies --> Running transaction check ---> Package docker.x86_64 0:19.03.6ce-4.amzn2 will be installed --> Processing Dependency: runc >= 1.0.0 for package: docker-19.03.6ce-4.amzn2.x86_64 --> Processing Dependency: containerd >= 1.3.2 for package: docker-19.03.6ce-4.amzn2.x86_64 --> Processing Dependency: pigz for package: docker-19.03.6ce-4.amzn2.x86_64 --> Processing Dependency: libcgroup for package: docker-19.03.6ce-4.amzn2.x86_64 --> Running transaction check ---> Package containerd.x86_64 0:1.3.2-1.amzn2 will be installed ---> Package libcgroup.x86_64 0:0.41-21.amzn2 will be installed ---> Package pigz.x86_64 0:2.3.4-1.amzn2.0.1 will be installed ---> Package runc.x86_64 0:1.0.0-0.1.20200204.gitdc9208a.amzn2 will be installed --> Finished Dependency Resolution Dependencies Resolved ====================================================================================================================== Package Arch Version Repository Size ====================================================================================================================== Installing: docker x86_64 19.03.6ce-4.amzn2 amzn2extra-docker 37 M Installing for dependencies: containerd x86_64 1.3.2-1.amzn2 amzn2extra-docker 24 M libcgroup x86_64 0.41-21.amzn2 amzn2-core 66 k pigz x86_64 2.3.4-1.amzn2.0.1 amzn2-core 81 k runc x86_64 1.0.0-0.1.20200204.gitdc9208a.amzn2 amzn2extra-docker 2.6 M Transaction Summary ====================================================================================================================== Install 1 Package (+4 Dependent packages) Total download size: 65 M Installed size: 271 M Downloading packages: (1/5): libcgroup-0.41-21.amzn2.x86_64.rpm | 66 kB 00:00:00 (2/5): pigz-2.3.4-1.amzn2.0.1.x86_64.rpm | 81 kB 00:00:00 (3/5): containerd-1.3.2-1.amzn2.x86_64.rpm | 24 MB 00:00:00 (4/5): docker-19.03.6ce-4.amzn2.x86_64.rpm | 37 MB 00:00:00 (5/5): runc-1.0.0-0.1.20200204.gitdc9208a.amzn2.x86_64.rpm | 2.6 MB 00:00:00 ---------------------------------------------------------------------------------------------------------------------- Total 67 MB/s | 65 MB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : runc-1.0.0-0.1.20200204.gitdc9208a.amzn2.x86_64 1/5 Installing : containerd-1.3.2-1.amzn2.x86_64 2/5 Installing : libcgroup-0.41-21.amzn2.x86_64 3/5 Installing : pigz-2.3.4-1.amzn2.0.1.x86_64 4/5 Installing : docker-19.03.6ce-4.amzn2.x86_64 5/5 Verifying : docker-19.03.6ce-4.amzn2.x86_64 1/5 Verifying : containerd-1.3.2-1.amzn2.x86_64 2/5 Verifying : pigz-2.3.4-1.amzn2.0.1.x86_64 3/5 Verifying : runc-1.0.0-0.1.20200204.gitdc9208a.amzn2.x86_64 4/5 Verifying : libcgroup-0.41-21.amzn2.x86_64 5/5 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! $起動
$ sudo systemctl start docker.service $ $ sudo systemctl status docker.service ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2020-06-17 15:53:56 UTC; 16s ago Docs: https://docs.docker.com Process: 4765 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS) Process: 4755 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS) Main PID: 4772 (dockerd) Tasks: 8 Memory: 35.8M CGroup: /system.slice/docker.service └─4772 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit nofile=1... Jun 17 15:53:55 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:55.8582692...c Jun 17 15:53:55 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:55.8582884...c Jun 17 15:53:55 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:55.8583027...c Jun 17 15:53:55 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:55.8813748..." Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:56.1582849..." Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:56.2082072..." Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:56.2355901...e Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:56.2360941..." Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal systemd[1]: Started Docker Application Container.... Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:56.2675511..." Hint: Some lines were ellipsized, use -l to show in full. $自動起動設定
$ sudo systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.serv ice. $ $ sudo systemctl list-unit-files | grep docker.service docker.service enabled $ec2-userのセカンダリグループにdockerを追加
root権限以外のユーザーでdockerコマンドを実行するには
毎回sudoするか、dockerグループに所属するかのいずれかが必要。
ここではグループ追加をしておく。$ sudo usermod -a -G docker ec2-user $ $ id uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal) $グループ追加がカレントシェルに反映されていない。
一旦ログアウトして接続し直してから再びidコマンド。$ id uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal),993(docker) $グループ追加が反映された。
dockerコマンドが実行できることの確認
$ docker --version Docker version 19.03.6-ce, build 369ce74 $docker-composeインストール
docker-composeは複数のコンテナのビルドや起動/停止をまとめて行うことが出来るツール。
使い方は ①dockerfile作成 ②docker-compose.yml作成 ③docker-compose実行 といった流れ。
まずはdocker公式に書かれているコマンドでインストール。
https://docs.docker.com/compose/install/$ sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compos e-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 638 100 638 0 0 2006 0 --:--:-- --:--:-- --:--:-- 2006 100 11.6M 100 11.6M 0 0 3325k 0 0:00:03 0:00:03 --:--:-- 4044k $ $ sudo chmod +x /usr/local/bin/docker-compose $docker-composeコマンドが実行できることの確認
$ dockser-compose --version docker-compose version 1.26.0, build d4451659 $
- 投稿日:2020-06-19T00:40:12+09:00
EC2にdockerとdocker-composeをインストールしてみる
EC2にdockerとdocker-composeをインストールしてみる。
EC2起動
パブリックサブネットで適当にインスタンス起動。
SSHログインができるようSGはインバウンドのSSHを空けておく。EC2ログイン
SSHクライアント(Teraterm等)でもInstant Conectでもやり方は何でもよいのでインスタンスにSSH接続する。ユーザーはec2-user。
Dockerインストール
$ sudo yum -y install docker Loaded plugins: extras_suggestions, langpacks, priorities, update-motd amzn2-core | 3.7 kB 00:00:00 Resolving Dependencies --> Running transaction check ---> Package docker.x86_64 0:19.03.6ce-4.amzn2 will be installed --> Processing Dependency: runc >= 1.0.0 for package: docker-19.03.6ce-4.amzn2.x86_64 --> Processing Dependency: containerd >= 1.3.2 for package: docker-19.03.6ce-4.amzn2.x86_64 --> Processing Dependency: pigz for package: docker-19.03.6ce-4.amzn2.x86_64 --> Processing Dependency: libcgroup for package: docker-19.03.6ce-4.amzn2.x86_64 --> Running transaction check ---> Package containerd.x86_64 0:1.3.2-1.amzn2 will be installed ---> Package libcgroup.x86_64 0:0.41-21.amzn2 will be installed ---> Package pigz.x86_64 0:2.3.4-1.amzn2.0.1 will be installed ---> Package runc.x86_64 0:1.0.0-0.1.20200204.gitdc9208a.amzn2 will be installed --> Finished Dependency Resolution Dependencies Resolved ====================================================================================================================== Package Arch Version Repository Size ====================================================================================================================== Installing: docker x86_64 19.03.6ce-4.amzn2 amzn2extra-docker 37 M Installing for dependencies: containerd x86_64 1.3.2-1.amzn2 amzn2extra-docker 24 M libcgroup x86_64 0.41-21.amzn2 amzn2-core 66 k pigz x86_64 2.3.4-1.amzn2.0.1 amzn2-core 81 k runc x86_64 1.0.0-0.1.20200204.gitdc9208a.amzn2 amzn2extra-docker 2.6 M Transaction Summary ====================================================================================================================== Install 1 Package (+4 Dependent packages) Total download size: 65 M Installed size: 271 M Downloading packages: (1/5): libcgroup-0.41-21.amzn2.x86_64.rpm | 66 kB 00:00:00 (2/5): pigz-2.3.4-1.amzn2.0.1.x86_64.rpm | 81 kB 00:00:00 (3/5): containerd-1.3.2-1.amzn2.x86_64.rpm | 24 MB 00:00:00 (4/5): docker-19.03.6ce-4.amzn2.x86_64.rpm | 37 MB 00:00:00 (5/5): runc-1.0.0-0.1.20200204.gitdc9208a.amzn2.x86_64.rpm | 2.6 MB 00:00:00 ---------------------------------------------------------------------------------------------------------------------- Total 67 MB/s | 65 MB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : runc-1.0.0-0.1.20200204.gitdc9208a.amzn2.x86_64 1/5 Installing : containerd-1.3.2-1.amzn2.x86_64 2/5 Installing : libcgroup-0.41-21.amzn2.x86_64 3/5 Installing : pigz-2.3.4-1.amzn2.0.1.x86_64 4/5 Installing : docker-19.03.6ce-4.amzn2.x86_64 5/5 Verifying : docker-19.03.6ce-4.amzn2.x86_64 1/5 Verifying : containerd-1.3.2-1.amzn2.x86_64 2/5 Verifying : pigz-2.3.4-1.amzn2.0.1.x86_64 3/5 Verifying : runc-1.0.0-0.1.20200204.gitdc9208a.amzn2.x86_64 4/5 Verifying : libcgroup-0.41-21.amzn2.x86_64 5/5 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! $起動
$ sudo systemctl start docker.service $ $ sudo systemctl status docker.service ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2020-06-17 15:53:56 UTC; 16s ago Docs: https://docs.docker.com Process: 4765 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS) Process: 4755 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS) Main PID: 4772 (dockerd) Tasks: 8 Memory: 35.8M CGroup: /system.slice/docker.service └─4772 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit nofile=1... Jun 17 15:53:55 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:55.8582692...c Jun 17 15:53:55 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:55.8582884...c Jun 17 15:53:55 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:55.8583027...c Jun 17 15:53:55 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:55.8813748..." Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:56.1582849..." Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:56.2082072..." Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:56.2355901...e Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:56.2360941..." Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal systemd[1]: Started Docker Application Container.... Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:56.2675511..." Hint: Some lines were ellipsized, use -l to show in full. $自動起動設定
$ sudo systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.serv ice. $ $ sudo systemctl list-unit-files | grep docker.service docker.service enabled $ec2-userのセカンダリグループにdockerを追加
root権限以外のユーザーでdockerコマンドを実行するには
毎回sudoするか、dockerグループに所属するかのいずれかが必要。
ここではグループ追加をしておく。$ sudo usermod -a -G docker ec2-user $ $ id uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal) $グループ追加がカレントシェルに反映されていない。
一旦ログアウトして接続し直してから再びidコマンド。$ id uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal),993(docker) $グループ追加が反映された。
dockerコマンドが実行できることの確認
$ docker --version Docker version 19.03.6-ce, build 369ce74 $docker-composeインストール
docker-composeは複数のコンテナのビルドや起動/停止をまとめて行うことが出来るツール。
使い方は ①dockerfile作成 ②docker-compose.yml作成 ③docker-compose実行 といった流れ。
まずはdocker公式に書かれているコマンドでインストール。
https://docs.docker.com/compose/install/$ sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compos e-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 638 100 638 0 0 2006 0 --:--:-- --:--:-- --:--:-- 2006 100 11.6M 100 11.6M 0 0 3325k 0 0:00:03 0:00:03 --:--:-- 4044k $ $ sudo chmod +x /usr/local/bin/docker-compose $docker-composeコマンドが実行できることの確認
$ dockser-compose --version docker-compose version 1.26.0, build d4451659 $
以上です。おつかれさまでした。
- 投稿日:2020-06-19T00:40:12+09:00
EC2(Amazon Linux 2)にdockerとdocker-composeをインストールしてみる
EC2にdockerとdocker-composeをインストールしてみる。
EC2起動
パブリックサブネットで適当にインスタンス起動。
SSHログインができるようSGはインバウンドのSSHを空けておく。EC2ログイン
SSHクライアント(Teraterm等)でもInstant Conectでもやり方は何でもよいのでインスタンスにSSH接続する。ユーザーはec2-user。
Dockerインストール
$ sudo yum -y install docker Loaded plugins: extras_suggestions, langpacks, priorities, update-motd amzn2-core | 3.7 kB 00:00:00 Resolving Dependencies --> Running transaction check ---> Package docker.x86_64 0:19.03.6ce-4.amzn2 will be installed --> Processing Dependency: runc >= 1.0.0 for package: docker-19.03.6ce-4.amzn2.x86_64 --> Processing Dependency: containerd >= 1.3.2 for package: docker-19.03.6ce-4.amzn2.x86_64 --> Processing Dependency: pigz for package: docker-19.03.6ce-4.amzn2.x86_64 --> Processing Dependency: libcgroup for package: docker-19.03.6ce-4.amzn2.x86_64 --> Running transaction check ---> Package containerd.x86_64 0:1.3.2-1.amzn2 will be installed ---> Package libcgroup.x86_64 0:0.41-21.amzn2 will be installed ---> Package pigz.x86_64 0:2.3.4-1.amzn2.0.1 will be installed ---> Package runc.x86_64 0:1.0.0-0.1.20200204.gitdc9208a.amzn2 will be installed --> Finished Dependency Resolution Dependencies Resolved ====================================================================================================================== Package Arch Version Repository Size ====================================================================================================================== Installing: docker x86_64 19.03.6ce-4.amzn2 amzn2extra-docker 37 M Installing for dependencies: containerd x86_64 1.3.2-1.amzn2 amzn2extra-docker 24 M libcgroup x86_64 0.41-21.amzn2 amzn2-core 66 k pigz x86_64 2.3.4-1.amzn2.0.1 amzn2-core 81 k runc x86_64 1.0.0-0.1.20200204.gitdc9208a.amzn2 amzn2extra-docker 2.6 M Transaction Summary ====================================================================================================================== Install 1 Package (+4 Dependent packages) Total download size: 65 M Installed size: 271 M Downloading packages: (1/5): libcgroup-0.41-21.amzn2.x86_64.rpm | 66 kB 00:00:00 (2/5): pigz-2.3.4-1.amzn2.0.1.x86_64.rpm | 81 kB 00:00:00 (3/5): containerd-1.3.2-1.amzn2.x86_64.rpm | 24 MB 00:00:00 (4/5): docker-19.03.6ce-4.amzn2.x86_64.rpm | 37 MB 00:00:00 (5/5): runc-1.0.0-0.1.20200204.gitdc9208a.amzn2.x86_64.rpm | 2.6 MB 00:00:00 ---------------------------------------------------------------------------------------------------------------------- Total 67 MB/s | 65 MB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : runc-1.0.0-0.1.20200204.gitdc9208a.amzn2.x86_64 1/5 Installing : containerd-1.3.2-1.amzn2.x86_64 2/5 Installing : libcgroup-0.41-21.amzn2.x86_64 3/5 Installing : pigz-2.3.4-1.amzn2.0.1.x86_64 4/5 Installing : docker-19.03.6ce-4.amzn2.x86_64 5/5 Verifying : docker-19.03.6ce-4.amzn2.x86_64 1/5 Verifying : containerd-1.3.2-1.amzn2.x86_64 2/5 Verifying : pigz-2.3.4-1.amzn2.0.1.x86_64 3/5 Verifying : runc-1.0.0-0.1.20200204.gitdc9208a.amzn2.x86_64 4/5 Verifying : libcgroup-0.41-21.amzn2.x86_64 5/5 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! $起動
$ sudo systemctl start docker.service $ $ sudo systemctl status docker.service ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2020-06-17 15:53:56 UTC; 16s ago Docs: https://docs.docker.com Process: 4765 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS) Process: 4755 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS) Main PID: 4772 (dockerd) Tasks: 8 Memory: 35.8M CGroup: /system.slice/docker.service └─4772 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit nofile=1... Jun 17 15:53:55 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:55.8582692...c Jun 17 15:53:55 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:55.8582884...c Jun 17 15:53:55 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:55.8583027...c Jun 17 15:53:55 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:55.8813748..." Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:56.1582849..." Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:56.2082072..." Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:56.2355901...e Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:56.2360941..." Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal systemd[1]: Started Docker Application Container.... Jun 17 15:53:56 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[4772]: time="2020-06-17T15:53:56.2675511..." Hint: Some lines were ellipsized, use -l to show in full. $自動起動設定
$ sudo systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.serv ice. $ $ sudo systemctl list-unit-files | grep docker.service docker.service enabled $ec2-userのセカンダリグループにdockerを追加
root権限以外のユーザーでdockerコマンドを実行するには
毎回sudoするか、dockerグループに所属するかのいずれかが必要。
ここではグループ追加をしておく。$ sudo usermod -a -G docker ec2-user $ $ id uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal) $グループ追加がカレントシェルに反映されていない。
一旦ログアウトして接続し直してから再びidコマンド。$ id uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal),993(docker) $グループ追加が反映された。
dockerコマンドが実行できることの確認
$ docker --version Docker version 19.03.6-ce, build 369ce74 $docker-composeインストール
docker-composeは複数のコンテナのビルドや起動/停止をまとめて行うことが出来るツール。
使い方は ①dockerfile作成 ②docker-compose.yml作成 ③docker-compose実行 といった流れ。
まずはdocker公式に書かれているコマンドでインストール。
https://docs.docker.com/compose/install/$ sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compos e-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 638 100 638 0 0 2006 0 --:--:-- --:--:-- --:--:-- 2006 100 11.6M 100 11.6M 0 0 3325k 0 0:00:03 0:00:03 --:--:-- 4044k $ $ sudo chmod +x /usr/local/bin/docker-compose $docker-composeコマンドが実行できることの確認
$ dockser-compose --version docker-compose version 1.26.0, build d4451659 $
以上です。おつかれさまでした。










