🐳

初心者向けDockerの使い方

に公開

よくわからないDocker

周りから「Dockerは便利だよ」とよく聞くけれど、実際に使ってみると「Dockerって何?何をしているの?」と感じることはないでしょうか。私自身は、Dockerがわからず苦労しました。
この記事では、Dockerの基本から具体的な使い方まで、初心者でも理解しやすいように丁寧に解説していきます。Dockerを自在に操れるようになるための第一歩となれば幸いです。

Dockerのインストール
MacOSであればHomebrew経由でインストールするのがおすすめです。
本記事では、インストール方法については触れません。それぞれのOSと好みに合わせて適切にインストールしてください。

Dockerとは

Dockerは、「コンテナ」という技術を使って、「アプリケーション」をパッケージ化し、環境に依存せずにどこでも実行できるようにするツールです。あなたが開発したアプリが自分のパソコンで問題なく動いても、他のパソコンやサーバーでは動かないことがよくあります。これは「うちでは動くけど、あちらでは動かない」という一般的な問題になります。Dockerを使うと、このような環境の違いを気にせずに、アプリケーションをどこでも同じように動かすことができるよになります。

簡単にいえば、コンテナとは、アプリケーションが動作するために必要なコード、ライブラリ、設定ファイルなどを一つにまとめたもので、一つのお弁当だと考えると良いでしょう。コード、ライブラリ、設定ファイルなどは作る手順や具材になります。さらに、アプリケーションはお弁当を食べて得られる体験(おいしさ、よろこびなど)にあたります。

まとめると、お弁当(コンテナ)はいろいろなところに持ち運ぶことができます。つまり、ユーザーは好きな場所と時間に「おいしい」という体験(アプリケーションを利用する)ができるわけです。

Dockerを使う準備

Dockerを使うには、はじめにdockerfileを書かなければなりません。ここではPythonを動作させるdockerfileの例を示します。実際に使う場合は、カスタマイズしてください。

dockerfile
# ベースイメージの指定
FROM python:3.10.14-slim

# 作業ディレクトリの設定
WORKDIR /app

# 必要なパッケージのインストール
COPY requirements.txt ./
RUN pip install --upgrade pip && \
    pip install -r requirements.txt

# ソースコードをコンテナ内にコピー
COPY . .

# アプリケーションの実行
CMD ["python3", "main.py"]

主なDockerコマンド

ここからは、dockerの核心をなすコンテナを動作させるための主なコマンドを、利用する手順にしたがって解説していきます。Dockerを使うときには、この手順にしたがってコマンドを実行してください。

docker build:
Dockerfile の指示に従って「イメージ」を作成します。たとえば、

docker build -t my-image .

は現在のディレクトリの Dockerfile を使って my-image というタグのイメージを作成します。

イメージは、Dockerfileの各命令(FROM, WORKDIRなど)に基づいて構築される複数のレイヤーから構成されています。各レイヤーは読み取り専用であり、これらのレイヤーの積み重ねによってイメージが作られます。イメージは、コンテナを作成するためのテンプレートとして機能します。

例えるなら、イメージはコンテナを作るためのレシピのようなものです。これにはコンテナが動作するのに必要な全ての情報が含まれていて、何度も同じようにコンテナを作れるようにするためのものです(この機能を専門用語では、テンプレートといいます)。さらに、レシピは誰が読んでも同じ情報を得ることができ、内容が変わることはありません(専門用語で読み取り専用と言います)。このとき、レイヤーはレシピ本の各ページになります。

docker run:
新しいコンテナを作成して実行するコマンドです。最も単純な形式でのコマンドは以下のようになります。

docker run イメージ名

これでイメージ(レシピ)に基づいてコンテナ(お弁当)が作られ、それをユーザーがいつでも利用できるようになります。

追記:Dockerやめたくなったら

docker ps

でコンテナID、イメージ名、コマンド、作成からの経過時間、ステータス、ポートなどの情報を取得しましょう。そして

docker stop イメージ名

とすることでコンテナを停止することができます。

Discussion