💭

【インフラ_21日目】Docker_1冊目

2024/08/22に公開

こんにちは投資ロウトです。

背景

・過去に簡単にDockerの学習を行っておりましたが、環境構築を行なっていく必要があり、急ピッチでDockerを習熟してサービスをリリースしていかなければいけない背景があります。

Redmineの構築

LAMP環境・・・Linux + Apache + MySQL + PHPのこと
※「Linux + Webサーバ + データベース + プログラム実行環境」

Wordpressとほぼ一緒で、
①ネットワークの構築
②MySQLの構築
③Redmineを構築

これらを順番に行えば構築は可能とのこと。
※作成は省略

画面は以下

応用

Dockerを使う人と作る人で、習熟できなければならないレベルは違うとのこと。サーバエンジニアやセキュリティエンジニアは基礎だけではなく、応用部分も理解していく必要があるとのことでした。

ファイルのコピー

コンテナから別のマシンへや、別のマシンからコンテナにファイルをコピーする方法だそうです。

docker cp コピー元 コピー先

【余談】
Apacheはアクセスすると、初期画面が表示されるが、index.htmlを置くと、そちらが優先されて表示される。

まずはindex.htmlを作成
※作成内容は何でも良い

<html>
  <meta charset="utf-8" />
  <body>
    <div>Doshirote works!</div>
  </body>
</html>

Apacheコンテナの作成

docker run --name doshiapa001 -d -p 8081:80 httpd

コンテナが起動されているか確認

docker ps

localhost:8081にアクセス

Apacheのデフォルト画面が表示

Apacheに送信

docker cp /path/index.html doshiapa001:/usr/local/apache2/htdocs/

その後F5を押して画面を再度更新すると

きちんとApacheの表示ファイルが切り替わっておりました。

今度はコンテナからホストへコピーする

docker cp  doshiapa001:/usr/local/apache2/htdocs/index.html /path/index.html

無事ファイルが来ていることを確認しました。
※元のファイルと同じ場所に移動させる場合は、元のindex.htmlファイル名を変更する必要があります。

ボリュームのマウント

ボリューム・・・コンテナとホストマシンの間でデータを永続化および共有するためのメカニズム

今までコンテナを作ってきましたが、実際にコンテナを使いたいのであれば、記憶領域のマウントが必要になるとのことです。
※コンテナのバージョンが変わった時に、コンテナは作っては捨てるものなので、記憶領域は切り離しておく必要性があるため。

【Dockerには2種類のマウントがある】
・ボリュームマウント・・・Dockerが管理する専用のストレージを使ってコンテナとホストの間でデータを共有する方法
※直接操作しづらいデメリットあり。
※ただ慣れればとにかく手軽で、Docker社も推奨とのこと。
※ただし無理に変更を加えると、ボリュームが破損するかもしれないとのこと。

・バインドマウント・・・ホストマシン上の特定のディレクトリやファイルを、コンテナ内の特定のパスに直接マウントする方法
※頻繁に触りたいファイルはここにおく。

【マウントの手順】
①記憶領域を作る
②コンテナを作る時にマウントする

ボリュームの作成

docker volume create ボリューム名

バインドマウントをする

マウント用のフォルダを作成

mkdir 対象のフォルダ

# 対象フォルダに遷移
cd 対象フォルダ

# 現在のディレクトリを確認
pwd

Apacheを起動時にマウントも一緒にする

docker run --name doshi000ex1 -d -p 8081:80 -v 先ほど作成したフォルダ:/usr/local/apache2/htdocs httpd

ファイルが配置されていないので、以下が表示される。

再度そのフォルダにindex.htmlを配置する。その後F5で更新

と短いですが、以上で学習を区切りたいと思います。ご精読ありがとうございました。焦らずコツコツ頑張っていきたいと思います。

Discussion