Dockerを使ってみる



参考動画

【Docker入門】初心者向け!Dockerの基本を学んでコンテナ型の仮想環境を作ろう!

他にもDockerの解説動画はあったが、言葉の説明だけでは利用イメージがつかめなかった。
この動画は実際に手を動かしながら学んでいける形式でわかりやすかった。
こういった一緒に手を動かす系の動画は実際にやってみると前提としている知識がなさ過ぎたり、エラーが起きたりして置いていかれることが多い。
しかしこの動画は丁寧に一つ一つどのツールでどのように処理すればいいのかを解説してくれていてとてもわかりやすかった。


Dockerとは

仮想環境を作成配布実行するためのもの
ホストOS:PCがメインで動かしているOS
ゲストOS:ホストOS上で動かすOS
仮想化技術の種類としてはコンテナ型の他にハイパーバイザー型(仮想サーバまたは仮想マシン)が存在する

https://www.infraexpert.com/study/virtual1.html

コンテナ型はリソース消費が少ないが、OSがホストOSに制限されてしまう
DockerによってゲストOSがあるように見せかけているだけで本当にゲストOSが動いているわけではない

Dockerのメリット

  • どのPCでも全く同じ環境を作り出すことができる

  • インフラのコード化(infrastructure as code)

    • 再利用、バージョン管理、配布が容易

    • Docker Hubにいろいろなコンテナイメージが存在

  • クラウド上(AWS、Azure…)にサーバー構築をできる

    • Kubernetesを使うことがおおい


Dockerの扱い

ソフトウェアエンジニア
用意されたDockerファイル(コンテナイメージ)を取得、起動、接続、停止ができればOK。Dockerイメージ上でソフトウェアの開発を行うことがメイン。

インフラエンジニア
Dockerファイル自体を作成、保守する。



公式イメージを使ってみる : MySQL

  • Docker desktopインストール

  • Docker HubからMySQLの公式イメージをプル

    • windows PowerShell を開く

      • 「docker —version」でコマンドが動く(パスがつながっている)ことを確認

      • 「docker mysql pull」でイメージをプル

      • 「Docker images」でダウンロードされたイメージを確認

動作確認
公式イメージのプル
プルの内容確認


  • MySQLのコンテナを起動する

    • Docker hubに書かれている「Docker run」コマンドを実行する

    • 「—name(起動するMySQLイメージの個別コンテナ名称)」「—MYSQL_ROOT_PASSWARD(パスワード)」については固有のものを適当に設定する

runのコマンドはHubに使いかた説明あり
コンテナの起動を確認
  • MySQLを操作してみる

    • コンテナの中に入る「docker exec -it {コンテナ名} bash」

    • mysqlにログインする。「mysql -u root -p」

      • パスワードは設定したものを入力すると以下のように「mysql>」でコマンドが入力できるようになる

      • 後はCREATE、SELECT文などで通常通りMySQL操作が可能

  • コンテナを停止する

    • ローカルPCの操作に戻る

      • コンテナ内からローカルPCの操作に戻りたいときは「CNTL+Z」

    • 「docker ps」で稼働しているコンテナの確認

    • 「docker stop {コンテナ名}」を入力するとコンテナが停止する

    • 「docker ps -a」で停止コンテナも確認可能

StatusがUpからExitedになっている
  • コンテナの再稼働

    • 「docker start」コマンドを実行

      • ※「docker run」:コンテナイメージの作成&起動なのでrunは使えない

  • コンテナを削除する

    • 「docker rm {コンテナ名}」

  • Docker imageを削除する

    • 「docker rmi mysql:latest」

      • errorが出た場合は「docker images」コマンドなどでイメージ名やバージョン間違っていないか確認する



自分でDockerイメージを作ってみる

  • 適当な場所に「Dockerfile」という名前のファイル作成

    • 拡張子は消しておかないとエラー出るため注意!!

  • PowerSellで「Dockerfile」を作ったフォルダまで移動

  • 「docker build -t {コンテナ名} .」のコマンドを入力

    • ここの処理で少し時間がかかる

  • 成功したら「doker image ls」で作成されたイメージを確認できる

例)Dockerfie

FROM ubuntu:20.04
USER root

RUN apt update
RUN apt install -y python3.9
RUN apt install -y python3-pip

COPY requirements.txt .
RUN python3.9 -m pip install requirements.txt
  • PowerSellで「Dockerfile」を作ったフォルダまで移動

  • 「docker build -t {コンテナ名} .」のコマンドを入力

    • ここの処理で少し時間がかかる

  • 成功したら「doker image ls」で作成されたイメージを確認できる

  • イメージからコンテナを起動する

    • ※公式イメージと異なり処理完了するとイメージが停止してしまうため「-it」オプションをつける必要あり



感想

Dockerとは実行環境をパッケージ化していろんな環境から同じ環境(Dockerイメージ)で処理の実行を行ったりできるという説明的な部分は理解していた。

今回実際に公式イメージを使ってみたり、自分でイメージを作成してみたりしたことでより具体的なイメージを掴むことができた。


今までビッグデータ分析(Kaggle)、embulk、3Dモデル作成といろいろ気になったことを調べたり、いじったりしてきたが環境構築部分でエラーが出て詰まることが多かった。

Dockerイメージ化されていればイメージを起動するだけでそれらの環境構築が完了するというのはとても便利だと感じた。

各ライブラリなど細かいことを気にせずDockerの使い方さえ理解できれば用意したインフラ上で作業開始できるためインフラ知識を意識せず作業をできるというようなメリットもありそう。(別でDockerを管理できる人は必要だが…)

今回MySQLの公式Dockerイメージを使ってPython連携をしたが前回同じことをDockerなしでやったときはMySQLを使えるようにするまでの環境構築がとても大変だった。Dockerイメージ自体もテキストで簡潔に設定ができ使いやすいと感じた。

業務の引継ぎや新しい人がチームに参加したとき、PCの入れ替えがあったりすると毎回環境構築&エラー対応が必要になるのでそこでDockerを使えると楽になりそう。

テキストでのインフラ環境の管理ができるので会社全体のインフラファイル、部署、課など組織ごとに階層構造でイメージを整理しておいたりもできそう。

会社のセキュリティやマネジメントシステム系のインフラに関しては入社やPCインフラでしか扱わず、理解する必要もほぼないためDocker化してしまってもよさそう。

インフラ環境の導入簡易化やバージョン管理ができることでインフラに対してPDCAを回しやすくできると感じた。



DockerとTerraformのIaCにおける住み分けは?

Terraformは上記のハードウェア、ホスト部分の設定のIaC化
以下のようなEC2内でのゲートウェイ、VPC、サブネットなどの設定、ビルドを管理できる。

一方でDockerはTerraformで立ち上げたインフラ上で動かすミドルウェアなどの環境をそろえることができる。

この記事が気に入ったらサポートをしてみませんか?