はじめに
現在の仕事で、Dockerに関する業務がありました。
開始当初はDockerというものが全くわからず大変苦戦していましたが、本屋で出会った神書籍によってDockerについての理解がかなり深まり、自分でDocker環境を構築することができるレベルまでになりました。
その書籍の紹介とその本で学んだDockerについての知識をまとめたいと思います。
書籍紹介
本屋でDockerについての本をいくつか手に取って読んでみて、イラストが多く1番わかりやすそうだったので購入しました。大当たりでした。
色んな記事でもランクインしている書籍なのでぜひおすすめです。
下記Amazonリンクです。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん
概要
Dockerとは
一言で表すと、「データやプログラムを隔離できる仕組み」
コンテナという箱を用いて、その中に環境を構築して使う感じです。
本来であれば1つのPCで1つの環境しか構築できません。(Pythonのバージョンは1個しか入れられないのと同じ)
Dockerを用いてコンテナごとに環境を管理することで、同じPythonでも違うバージョンの実効環境を共存させることができます。
Dockerを使うメリット・デメリット
メリットとしては
・複数の環境を1つのPCで扱うことができる。
・仮想環境と比べて軽量(原理は後回しで良い)
・コンテナ技術を用いて、別のPCでも開発環境をすぐに構築できる
デメリットは
・Dockerを使いこなすためには学習コストがかかること
・複数環境を使わない場合はあまりメリットを感じられない
イメージとコンテナ
イメージ
コンテナを作る元のようなもの
イメージだけでは何もできない。コンテナになって初めて環境が構築できる。
レシピのようなDockerFileからイメージを作成する。
コンテナ
環境を構築する箱のようなもの
イメージからコンテナを作成することで環境が構築できる
イメージの作成方法
めちゃくちゃ簡単。
DokerFile作成→Docker buildコマンド
DockerFileの内容は、作りたい環境に合わせてChatGPTを使うと一瞬で書いてくれる。
それか「作りたい環境 DockerFile」で検索したら大抵出てくる
# ベースイメージの指定
FROM python:3.9
# 環境変数の設定
ENV PYTHONUNBUFFERED 1
# 作業ディレクトリの設定
WORKDIR /app
# ホストのrequirements.txtをコンテナにコピー
COPY requirements.txt /app/
# Pythonパッケージのインストール
RUN pip install --no-cache-dir -r requirements.txt
# コンテナ内にコピーしたファイルをすべてコピー
COPY . /app/
コンテナの作成方法
Docker run
イメージからコンテナを作るためのコマンド
コンテナは作成した瞬間から稼働する。(稼働させたくない場合はdocker create)
Docker compose
DockerFileからイメージを作るのと似ている。
環境に関する設定が書かれたYAMLファイルを作る→Docker compose
YAMLもChatGPTに聞いたら作ってくれる。下記がPython環境をお願いした場合。
YAMLファイルの書き方を調べるとお作法が学べる。
version: '3.8'
services:
python_app:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./app:/app
ports:
- "8000:8000"
environment:
- PYTHONUNBUFFERED=1
DockerHub
Dockerイメージを保存しておく場所。(Githubみたいな感じ!)
公式のイメージを持ってきてコンテナ作成したりもできる。
これのおかげで、Dockerイメージをチームで共有してすぐに環境構築したりできる。
Dockerの使い方
実際に実行したいファイルが格納されているフォルダとリンクさせることができるので、リンクさせた後にそのファイルを実行すると構築した環境で実行ができる。
使い方としてはリンクさせたサーバー上に実行したいファイルを置く→DockerHubからイメージを持ってくる→サーバー上に環境構築→サーバー上のファイルを実行
Kubernetesについて
こちらについては、応用なので今回は省略します。
まとめ
この本のおかげで、Dockerについての理解が大変深まった。
まだ自分のローカルでDockerを使った自動化実行は行っていないので、DockerHubを用いて自動実行を行ってみようと思う。