EurekaMoments

This is my studying logs about Autonomous driving, Machine learning technologies and etc.

Dockerを理解するために不足している知識を補う

目次

背景・目的

こちらの記事で書いたようにLinuxの基本的な事を勉強したので、
自宅のPCでLinux環境を構築してみようとしています。

www.eureka-moments-blog.com

自宅のPCのOSはWindows10なので、今流行りのDockerを使って
構築してみようと思いDockerの勉強をし始めたのですが、それを
理解するための前提知識がいろいろ不足している事に気が付きました。
今回は、Dockerの勉強を通じて見つけた不明点について調べた事を
メモとして残しておきます。

参考資料

Dockerの勉強に関しては、こちらのシリーズ化された入門記事を
参考にしながら進めていきました。

knowledge.sakura.ad.jp

全6回に渡り、Dockerに関しての技術的な解説をしてくれています。

第一回: Dockerとは何か、何がいいのか より

DevOpsについて

冒頭で、「DockerはDevOps界隈で注目されている技術の一つ」と
紹介されるのですが、まず「DevOpsって何?」って思ったので
調べました。
DevOpsとは、開発手法やツールにより開発者(Development)と
運用者(Operations)が連携する事で柔軟かつスピーディーな開発を
する事です。今のソフトウェア開発のトレンドであるCIやCDといった
開発手法、Gitによるバージョン管理、Redmineによるチケット管理、
JenkinsのようなCIツールはDevOpsを実現する手段とされています。
ちなみに、DockerはCDツールの一つとして分類されるようです。
こちらの記事にて詳しく紹介されていました。

qiita.com

ハイパーバイザについて

よくVirtualBoxのような仮想マシンとの比較がされますが、仮想
マシンとはホストOS上でハイパーバイザを利用しゲストOSを
動かすもの、と説明されます。
ここで登場するハイパーバイザとは、仮想マシンを実現するための
制御プログラムの事です。ハイパーバイザは、こちらの記事で紹介
されているように、大きく2つの種類に分類されるようです。

ja.wikipedia.org

コンテナについて

Dockerとはコンテナ型の仮想環境を作成、配布、実行するための
プラットフォームと説明されますが、そもそもコンテナが良く分かって
いなかったので調べました。
コンテナ技術とは、実行環境を他のプロセスから隔離して、その中で
アプリを動作させる技術です。実行するアプリやライブラリを個別に
用意し、ホストOSのリソースを隔離・制限することで独立した実行
環境を構築する事が出来ます。
コンテナ技術を利用すれば、異なるサーバであっても簡単に同一構成の
開発環境や本番環境を構築できます。それを実現するための環境の一つが
Dockerという訳です。
こちらの記事が大変参考になりました。

www.atmarkit.co.jp

employment.en-japan.com

Kubernetesについて

Dockerについて調べると必ずと言っていいくらい一緒に紹介されるのが
Kunernetesです。Dockerによって複数のコンテナを同時に起動し、それらが
組み合わさって大きな一台のコンピュータのように振る舞う(クラスタリング)
際の構成などを管理するソフトウェアであり、オーケストレーションツールと
呼ばれています。こちらの記事を参考にさせていただきました。

bcblog.sios.jp

www.sbbit.jp

イメージについて

通常はOSをインストールするために使われるイメージファイルですが、
Dockerではいろんなパターンの実行環境を作るためにDockerイメージ
というファイルを利用します。
各環境に必要となるプログラミング言語やフレームワーク、アプリなど
の構成をコード化したものであり、これを管理、配布する事により環境
構築や変更が効率化されるという利点があります。
こちらの記事を参考にさせていただきました。

blog.codecamp.jp

第二回: Dockerセットアップ、コンテナ起動 より

knowledge.sakura.ad.jp

yumについて

UbuntuのようなLinuxのDebian系ディストリビューションにおける
aptに相当するパッケージ管理ツールだそうです。Ubuntuを使う予定の
自分には関係ないかと思いましたが、せっかくなのでメモしておきます。
CentOSやFedoraのようなRedHat系ディストリビューションで主に使わ
るものです。

uxmilk.jp

eng-entrance.com

Docker Hubについて

ユーザが作成したコンテナをアップロードして、公開・共有できる
Webサービスです。無料プランで一つのプライベートリポジトリを
持つ事ができ、有料プランにすると複数のプライベートリポジトリ
を持つことが出来ます。

knowledge.sakura.ad.jp

Proxyについて

Proxy配下でDockerを利用するには、専用の設定がいくつかあるそうです。
ちなみにProxyとは、ルータの外にインターネットに自由にアクセス出来る
コンピュータを用意して、外へのアクセスを代理させる方法です。
Proxyサーバを通してサイトを閲覧する場合、閲覧したサイトに残される
アクセスログは、Proxyサーバの情報しか渡されないため、自分のプロバイダの
情報は知られず、匿名性を高める事ができます。

第三回: 各種dockerコマンドとDockerイメージ作成について より

knowledge.sakura.ad.jp

Jenkinsを使う

CI/CDのツールのJenkinsをDockerで使う方法を解説した記事。
qiita.com

cloudbees.techmatrix.jp

MySQLを使う

データベースの管理システムであるMySQLをDockerで使う方法を解説した記事。

www.kagoya.jp

mmtomitomimm.blogspot.com

WordPressを使う

MySQLをデータベース管理システムとして利用しているWordPressをDockerで
使う方法を解説した記事。ついでに、WordPressについても良く知らなかった
ので調べました。

ja.wikipedia.org

qiita.com

ブログやWebサービスのようなサイト作成に使われる無料のソフトウェアであり、
CMS(コンテンツ管理システム)と呼ばれています。HTMLやCSSのようなWeb
プログラミングに詳しくなくても扱えるというメリットがあり、世界中のサイト
の4分の1がWordPressで作られていると言われているようです。

Redmineを使う

プロジェクト管理のためのオープンソースソフトウェアであるRedmineを
Dockerで使う方法を解説した記事。

redmine.jp

qiita.com

第四回: Dockerfileについて より

knowledge.sakura.ad.jp

書く際のコツ

Dockerfileでビルドをする際は、キャッシュを意識してビルド時間を短縮する
というアドバイスが書いてあります。作成する際にはいろいろ気を付けるべき
ポイントがありそうなので、参考になりそうな情報を探してみました。
こちらでは、Dockerfileを改善するためのテクニックが沢山紹介されています。

www.slideshare.net

ビルドした際は、Dockerfileの各コマンドごとにレイヤーが作成されるために、
イメージのサイズがどんどん大きくなってしまいます。こういったしくみは
事前にちゃんと理解しておいた方が良いと思い、こちらの記事を参考にさせて
いただきました。

www.techscore.com

第五回: コンテナ間通信より

knowledge.sakura.ad.jp

link機能について

コンテナ間で通信をさせる方法の一つとしてlink機能というものがあります。
docker runコマンドで--linkオプションを付けるというものですが、どうやら
今後は削除される予定のレガシー機能のようで、推奨されていない方法なんだ
とか。
そもそも、link機能とはどういうものなのか気になったので調べたところ、
こちらの記事で詳しく説明されていました。コンテナ間で通信させる機能
という訳ではないんですね。お互いのIPアドレスを調べて記述するといった
細かい手間を省くのが本来の目的だそうな。

dqn.sakusakutto.jp

Dockerコンテナ・ネットワークの仕組み

こちらでDockerのコンテナ間通信の仕組みについて詳しく説明されています。
いろいろ出来る事がありそうだなと感じる一方で、この記事で解説されている
ような基本を正しく理解した上で取り組まないと、使いこなすのは難しそうです。
docs.docker.jp

第六回: Docker Compose より

knowledge.sakura.ad.jp

YAMLについて

Dockerビルドやコンテナ起動のオプションなどを含め、複数のコンテナの定義を
ymlファイルに書くようになっています。YAMLとは、構造化されたデータを表現
するためのフォーマットです。 magazine.rubyist.net

データ構造のフォーマットといえば、他にはXMLやJSONなどがありますが、
これらとの違いとして、読みやすい、書きやすい、分かりやすいといった
利点があります。

nonbiri-tereka.hatenablog.com

まとめ

Dockerを理解しようとする中で、そのための前提知識がいろいろ足りていなかった
のですが、それらを大雑把ですが調べながら学習を進めたおかげで、今までさっぱり
理解できていなかったDockerの事を少しだけ理解できた気がします。また、CI/CD、
ネットワーク、データベースなどの知識についてもざっくりと触れる事ができた
ので、とても有意義な学習の時間になりました。
今回学んだ知識を参考に、今度は自分でDockerを使った環境構築をいろいろ
試していこうと思います。