蕁麻疹Docker

昨夜の帰宅後から急に蕁麻疹が全身に出てきて
びっくりして、とりあえず眠りました。
疲れていたのかなぁ。

今日も日中は眠って
午後から皮膚科に行ってきました。
風邪で免疫力が落ちていたので
蕁麻疹が出てしまったよう。
内服薬を貰ったよ。

夕方はスタバで少しだけ作業です。
docker-compose.ymlについて。
今まで結構誤解していた部分が多かったなぁ
って反省です。

流れとしては
docker-compose.ymlで
アプリケーションが使うミドルウェアの接続・起動をできるようにして
その状態で
Dockerfileを書き進めつつdocker buildでDocker imageをつくって
docker-compose upしてDocker imageを元にコンテナをつくるの。

 $ docker-compose ps

これでコマンドやState、Portsなどの確認ができるので
errorが起きている場合は

 $ docker-compose logs < Name >

などでlogを見て原因究明をしたり

$ docker-compose run --entrypoint /bin/sh  < application >

などでDocker内に入って実際にコマンドを打ってerrorログを読んだりすれば
地道なerror潰し作業で
Dockerfileを作りあげることが
理論上は出来る。

実際にはerrorログ読んでも
訳分からんくて詰むの多々あるかんじなので
わかりそうなひとにログとともに見せて教えを請う作業です。

趣味鯖でDocker上にアプリケーションを構築する際
動きそうなdocker-compose.ymlをgit cloneしてきて
こんな感じでerrorログを見ながら
ひたすら「わからん」と唱えていた記憶があったの。
わからんまま構築できてしまったのだけれども。

一度復習しようと思ってふむふむしていた。
Dockerfile内のRUNとCMDの違いだとか
docker-compose.ymlを書いたら
ローカルで接続・起動の確認をするのか
Docker上でそれらの確認をするのか
そもそもDocker imageとは
って、かなり初歩的なレベルで理解が浅かったなぁって気づけたの。

適当にソースコードgit cloneして構築できてしまうの便利だけれども
オリジナルの独自設定アプリケーションを動かせるような環境構築
きちんと理解して進めないと難しいのだなと感じた。

Django GirlsチュートリアルでつくったものでDockerfile作成

まずDocker Hubで使いたいイメージを探します。
公式のものなど、なるべく信頼できるイメージをつかった方が良さげです。
Django Girlsチュートリアルでつくったものはこちらです。

$ ls 
blog            manage.py        myvenv 
README.md        db.sqlite3        mysite            requirements.txt

元になるイメージはpython:3.7.5-slim-busterを選びました。
Django起動時に打ち込んでいるコマンドを
Dockerfileに書き込んでいきます。

$ vi Dockerfile 

FROM python:3.7.5-slim-buster 
COPY . /app/ 
WORKDIR /app 
RUN pip3 install -r requirements.txt 
RUN python3 manage.py collectstatic --noinput 
CMD python3 manage.py runserver 0.0.0.0:8000

イメージ名にはわかりやすい名前をつけて
タグにはバージョン(日付や0.1.0など)を指定してあげると良いです。
無記入だとlatestになります。

$ docker build -t [イメージ名]:[タグ] . 
例えば 
$ docker build -t djangogirls:0.1.0 .

最後のドットを忘れないように注意です。
一覧を出すには

$ docker images 
REPOSITORY        TAG          IMAGE ID             CREATED              SIZE 
djangogirls              latest        53a38ee83c1a      24 minutes ago 

Dockerを走らせる前に
ローカルで何か走っていないか確認します。
※特にローカルで走らせているものがなければ、以下読み飛ばしてもOKです。

$ ps -ef | grep runserver 
  502  2437   479   0 土02PM ttys000    0:00.60 /Library/Frameworks/Python.framework/Versions/3.7/Resources/Python.app/Contents/MacOS/Python manage.py runserver 
  502  2438  2437   0 土02PM ttys000   58:01.79 /Library/Frameworks/Python.framework/Versions/3.7/Resources/Python.app/Contents/MacOS/Python manage.py runserver 
  502 26677 13920   0  3:55PM ttys003    0:00.01 grep runserver

とても大まかに書くと

2437(子:Django)    479(親:shell) 
2438(子:Python)   2437(親:Django) 
26677 13920 => いま検索したgrepコマンドが走っているので無視

だいたいこんな感じです。
shellは殺さず、2437を殺せば親のDjangoもろとも子の2438も死ぬので
Djangoで走りっぱなしでいたrunserverをkillします。

$ kill 2437

killできたか確認。

$ ps -ef | grep runserver 
  502 26680 13920   0  3:55PM ttys003    0:00.01 grep runserver

Dockerを走らせます。djangogirlsはDocker IDでもOKです。

$ docker run -it --rm -p          djangogirls

下記にアクセス

http://127.0.0.1:8000/

できた👏

Tips
全体的に重かったので.dockerignoreを作成し、いったん無視するファイルを指定します。

$ vi .dockerignore 

myvenv 
db.sqlite3

myvenvは仮想環境なので不要です。
db.sqlite3はDockerに乗せるには今後重くなる可能性が高いので
もしデプロイする際にはMySQLなど外付けDBを使っても良いかもです。
ちなみにDBをignoreで無視するとDockerを走らせた際に赤文字で

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, blog, contenttypes, sessions. 
Run 'python manage.py migrate' to apply them.

このようにDBに問題ありなどと表示されます。
あえてignoreしている場合はスルーです。

Dockerfileまとめ

Dockerfileは管理しているリポジトリの.gitと同じ階層につくる 。


Dockerfileを書いてみる – Qiita

(上記サイトから引用)

Dockerfileの具体的な書き方をふむふむした 。

Dockerを使ってLaravel開発環境構築 – Qiita

Laravel開発環境構築につかえそうなDockerfileを探したの 。

FROM php:7.2-fpm 
COPY php.ini /usr/local/etc/php/ 

RUN apt-get update \ 
  && apt-get install -y zlib1g-dev mysql-client \ 
  && docker-php-ext-install zip pdo_mysql 

#Composer install 
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 
RUN php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" 
RUN php composer-setup.php 
RUN php -r "unlink('composer-setup.php');" 
RUN mv composer.phar /usr/local/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" 

実際にやってみた

$ mkdir testing 
$ cd testing 
$ vi Dockerfile   # viで上のDockerfileの中身をコピペ 
$ docker build -t [name]:[tag] .   # Docker imageのビルド
Sending build context to Docker daemon 3.072kB
Step 1/14 : FROM php:7.3-alpine
7.3-alpine: Pulling from library/php
9d48c3bd43c5: Pull complete
4bf02c0a37c8: Pull complete
9ce49f939c6f: Pull complete
2fa33c09831c: Pull complete
〜省略〜

※ タグを指定しないとlatestってタグがついちゃう

Docker ドキュメント

↑公式ドキュメントの日本語訳サイト


もうDockerをbuildしたの記憶の彼方で

K8Sのハンズオンも参加はしたけれども、なかなか構築厳しそうだなとおもうの。

AWSのEKSというK8Sのマネージドサービスも

最近までベータ版だったとのことなので、とりあえずDockerfileの復習していました。

初めて

[========> ]

って見たときは、矢印かわいい!って感動したなあ。

ちょっぴりなつかしいの

パーティション設計/media remove on Docker

最近言われて嬉しかった言葉は

「戦闘民族だよね。戦い生きるみたいな生き方をしている」

です。

精神的腕力のあるゴリラを目指している身としては身に余る言葉です。

なんか殺傷力高くて瞬発力ありそう。

media削除のコマンドを試す前に

「メディアストレージの容量を確認して、ビフォーアフター見てみたいなあ」

と、いうことで

postgresqlが稼働しているdisk容量を確認するコマンドを調べたの。

$ df -Th

dfコマンドにType付き&人に優しいhumanizeな表示で見ることができました。

/dev/xvda1       20G   13G  7.0G  65% /

ふむふむ。

ラズパイも見てみました。

/dev/mmcblk0p1 vfat       253M   41M  213M   16% /boot

mmcblk0p1で調べたらSDカードのパーティションとのこと。

ふん??

(下記サイトより引用)

ふむふむ。

fdiskの操作方法

また、重要なのが「swap」パーティションだ。
このパーティションはメインメモリが不足しているときにメインメモリのかわりとして使用できる領域のことだ。
これは高価なメインメモリを安価な記憶媒体で補うと同時に、メインメモリ以上の容量を確保するため、比較的に昔からある仕組みだ。とても便利だし、設定しない理由はない。
やたらと大きくしてもパフォーマンスは発揮されないので注意しよう。

Linuxのパーティションとは?とパーティションの区切り方を詳細解説
https://eng-entrance.com/linux-partition

パーティションの中でもswapって大事なんやなー

swap領域を確保する一番手っ取り早い方法として、EC2のインスタンスストアスワップボリュームがあります。
これは、EC2のインスタンスタイプがm1.smallとc1.mediumのときのみ
/dev/xvda3ないし/dev/xvde3という900MBのmkswap済みディスクが
EC2のブート時に自動で提供されます(デバイス名はAMIによりまちまちです)。
他のインタンスタイプではm1/c1ファミリーであっても提供されず、
またManagement ConsoleやAWS APIでは本ボリュームを確認できないことに注意しましょう。

Amazon EC2(Linux)のswap領域ベストプラクティス | DevelopersIO
https://dev.classmethod.jp/cloud/ec2linux-swap-bestpractice/

swapの設定しなきゃ!!

してた!!!

全く記憶にないけど、とりあえずコピペ頑張ったんだなってきもちです。

 $ sudo docker-compose run --rm web bundle exec bin/tootctl media remove --days=30 

↑いろいろ脇道にそれましたが、画像削除のコマンドを打ってみました。

error

移動したらできた。

確かにdocker-composeするときはDockerのあるところでやっていたわ。

Docker沈黙タイムです。

いまだかつてない沈黙です。

長いな?

Linuxディレクトリ構造でも読んで待とう。

・・・・・・・・・・・・・・・・

いま現在blog書きながら待っていますが、終わる気配がありません。

帰りたいんだけど😢

しかも散々脇道にそれてパーテーションについて調べて忘れかけていたけれど

メディアストレージはpostgresqlではなくAWSのs3使っているので

ビフォーアフターはs3のストレージを見よう。

厳しめモードDocker

朝から活動的でした。

デプロイの自動化は最優先で取得したい技術だなあとおもいました。

初対面のひとと沢山はなした!

本日も疲れる1日でしたが

厳しめモードでDockerです。

監視ツールからガンガンアラート来ていました。

以下、奮闘記。

streamingが二つあった証拠画像あります!

証拠を残せて満足です。

.

Docker再起動で糞重たいのが起動できたの

重すぎるのでsidekiqを止めた状態で再起動かけて、後から追加する作戦しました。

が、結局重くて全部落ちました。

Dockerふわふわどころじゃない。

.

結論:t2.microでdocker運用、そろそろきつい

Rubyはヒトカゲ

朝と午前中はuser scriptについて調べていました。

参考に見たQiita記事が軒並みjQueryで
UserScriptで楽しくJavaScriptを覚えよう

むぢゅい

JSわからない。

Chromeの拡張機能はとりあえず追加しました。

なかなか新しい記事を見つけられなかった。

type scriptも調べてみたい。

.

お昼は主にDockerとVagrantの違いについて調べていました。

Web系のDocker民から見たVagrantについて

(上記サイトから引用)

この画像を見て

Dockerコンテナ同士を結びつけるのがdocker-composeかなとおもったけれども

これOSが独立しているので

Kubernetesで結びつけるのが正確かな。

違いを以下にまとめました。

.

Docker
– OS以上を仮想化
– 軽い
– カーネル部分はホストマシンに依存するため、Windowsだと正常に作動しない場合がある
Vagrant
– カーネル以上を仮想化
– 重い
– カーネルから仮想化するため、そのぶんシミュレーションの精度がDockerよりも高い。
– Vagrant上にDocker構築も可能

実際にVagrantの構築も試したい。

VagrantとDockerについて名前しか知らなかったので試した

Qiita記事を参考にしつつ

動画を観ながら進めてみよう。

.

18のプログラミング言語をポケモンに例えてみた!

Rubyはヒトカゲで

Pythonはゼニガメっぽいなあ

ってイメージはあったの。

でも、ここではPythonをカイリューだと言っていて

確かにミニリュウ青いしカイリュー黄色くて

ロゴの色味的にも合っているし

育てるとまあまあ強い準伝なの納得感ある。

Lispよく知らないけれども

ラプラスの偉大で神聖な感じなのかあっておもった。

しかし、アローラではラプラス大量発生していてレア感薄いけれども。

.

ポケモンとプログラミングについて

知識の習得、コレクション

環境が変わると一から育成をし直す必要があって

ポケモンが成長するのと共にトレーナーも成長して強くなれるの

プログラミングとポケモン

親和性高いのでは、と感じた。

とりあえずRuby使えるようになりたい。

Rubyはリザードンらしいけれども

まだわたしは弱小なのでヒトカゲGETするところからです。

アイス3つたべた

平日で日中動けるの月曜日くらいなので

本当はAWSのLoftまた行きたいなあとおもっていたのだけれども

なんだかんだ昼近くなってしまったので

近場のTully’sでアイスを食べながら作業しました。

履歴書と職務経歴書は、大昔のExcelファイルを手直しして

.odtファイルに変換して保存しました。

MacでもExcelみたいなのあるのねえ。

今までの振り返りができて良かったです。

.

これは極秘中の極秘なのですが

cronはDockerコマンドでpg_dumpさせているの。

.

@女子部で講師の寺田さんが

“Design for Failurea”

–障害発生を前提としてシステムを設計しましょう–

という言葉を引用しつつ

「Docker上にDBを置いてはいけません」

と話していて

docker-composeでコンテナ上にpostgreSQL置いているの

アッてなったあ🐰

しかも実際に不安定で数週間に一度Dockerに入れなくなる、笑

とりあえずcronでdocker再起動かける?

みたいな暫定的対応策で凌ごうとしているのだけれども

しかしながらトラブル多いほうが

むしろ勉強になるので

わたしとしてはwelcomeな感じですᐠ( ᐛ )ᐟ

Kubernetesハンズオン

朝起きてKubernetesの女子限定ハンズオンに行ってきました。

会場に辿り着くまでに一時間近く迷って

まあまあ遅刻しました。

30分くらい余裕もって出たんだけどなあ。

.

Kubernetes

Dockerってコンテナ(仮想環境)の機能を利用して

それらをより複雑に組み合わせることができるの

.

5〜6人のチームに別れて

それぞれ課題に取り組む形で行われたのだけれども

今までチームで何か開発や作業をした経験ってなかったので

かなり新鮮でした。

.

Azureやインフラ未経験の方々もいて

それでも何とかなったし、楽しかったの。

ランチもチームメンバーと食べて

わちゃわちゃ話せたの良かった。

.

後半助っ人で来てくれた方が

問題解決能力とても高い方で

頼りになるなあ、凄いなあとおもった。

わたしも問題解決能力の高い

最強のエンジニアになりたいとおもいました。

.

講師の方は寺田さん (@yoshioterada) https://twitter.com/yoshioterada?s=09

でした。

https://github.com/yoshioterada/k8s-Azure-Container-Service-AKS–on-Azure

教材は上記GitHub

後半はこちらのスライドも利用していた。

.

帰り道すがらお祭りにふらっと寄りました。

提灯が綺麗。

.

帰宅して復習したよ。

とりあえずババーっと書いたものを貼ります。

30階以上の階だったので

窓からの眺めが良かったの。

postgreSQL修了/Kubernetes予習

お昼はpostgreSQLの動画を観ていたよ。

一通り全て見終わりました。

わーい˙˚ʚ(。・-・。)ɞ˚˙

手を動かして実際にデータベースつくったり触ったりしたいので

もう少し動画にはお世話になりそう。

Fab Cafeのサラダお気に入りなの。

金曜日の楽しみだよ。

草ってかんじ。

土曜日はKubernetesの女子限定ハンズオンで

参加型の座学なのだけれども

不安過ぎて入門書を衝動買いしそうになった写真です。

なので帰宅して少し予習しました。

https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/

この内容を実際にやってみた。

DockerのアイコンからPreferenceでKubernetesを使うことできるのね。

Nginxを3つDeploymentをつかってたてたけれども

自動修復機能で、1つを消しても代わりのNginxが生まれるの。

最初は

「消したのにNginx!」

とおもったけれども

「私が死んでも代わりはいるもの」

ってことかあ、と納得しました。

どんすわ復活/postgreSQL

どんすわピンチでメンテナンスページにしていたの。

とりあえずデータ保全を最優先してから

docker-compose restartしてみた。

Dockerのstatusを見てみたけれども

unhealthyから、なかなかhealthyにならず不安定な状態が続いて

泣く泣く師匠に相談したら

DockerのIDが何故か重複しているとのこと。

普通なら同じIDが二つ立ち上がる状況なさそうだけれども

重すぎてそういった状態になったのかなあってかんじ。

.

なので重複したものを一つ削除して

docker-composeのdownとupしたら

時間をおいて正常化したので

どんすわメンテナンス終了しました。

.

今回、何がうまくいっていないのか

まではわかったけれども

その原因まではわからなかったし

.

少し問題がややこしくなるとやっぱりわからないなあ。

冷静に素早く対処できる最強のエンジニアになりたいです。

.

あと、PCが触れない移動時間には

postgreSQLについて動画をみた。

見た内容まとめ。

データベース楽しい、また復習したい。

使いこなせたら万能感すごそう。

なんでも出来てしまう感じする。

.

データはとても大切で

データが吹っ飛ぶと会社が吹っ飛ぶレベルの事故に繋がるし

もし何かあったときには

データの保全を最優先に動くことを意識していくと良い

とアドバイスされた。

.

そしてデータベースにおける

本当にあった怖い話を聞いたの。

ヒヤリハットから、やらかしまで

怖い話こわかった。