【Docker超入門】秒でdockerを理解する

docker

道を歩けばドッカー、ドッカーと聞くようになりましたね。

僕はずっとdockerを使うつもりはなかったのですが、ようやく今のプロジェクトで使用強制命令が下されました。

凄い苦手意識が強かったけど、とりあえずやりながら低スペックな頭で理解できたことをまとめておきます。

(docker精通者は読まないでください。docker超初心者向けの内容です。)

秒でdockerに必要なものを理解する

おさえておくべき要素はたったの3つ

エンジン

Dockerを動かす本体。Docker for Windows、Docker for Macがある。

イメージ

コンテナの元になるもの。

Dockerコンテナ(アプリケーションの実行環境)を起動するのに必要な設定ファイル。

Docker hubやdocker-compose.ymlで定義される。

コンテナ

イメージから作られるアプリケーションの実行環境。

起動・停止が可能。「あっ、間違えた」で消去も可能。

秒で使い方をおさえる

1.PCを立ち上げます

2.Docker for Windows か Docker for Mac を立ち上げます(設定によってはPC立ち上げ時に自動起動)

3.イメージからコンテナを起動

$ docker start コンテナ名
$ docker-compose -d up

※ docker-composeとはdockerコマンドを良い感じでまとめてくれている上位互換のようなもの。
※ -d オプションはバックグラウンドで実行という意味

4.使った後は停止

$ docker stop コンテナ名
$ docker-compose down

docker-composeを秒でおさえる

複数のコンテナから成るサービスを構築・実行する手順を自動的にし、管理を容易にする機能。
テキストで書かれるdocker-compose.ymlファイルから設定を読み込んですべてのコンテナサービスを起動することができる。

実業務での使い方サンプル

では実際にプロジェクトとかでどういう感じにdockerを使うのか。

docker-compose.yml、Dockerfile、.envにそれぞれ定義を書いたりします。
以下サンプルです。

# docker-compose.yml (docker-composeを実行するディレクトリにおくこと)
version: "3"

services:
  server:
    container_name: "${APP_CODE}_server" # ${APP_CODE}の中身は.envに書く
    build:
      context: ./amazonlinux2 # 同じディレクトリにamazonlinux2/Dockefileを読み込む
# Dockerfile
FROM amazonlinux:2

ARG APP_CODE_PATH_CONTAINER
ARG CHROME_DRIVER_VERSION
ARG CHROME_VERSION

# インストール済みのパッケージを最新版にアップデート
RUN yum -y update \
  # 追加で必要なパッケージをインストール
  && yum -y install \
      sudo \
      shadow-utils \
      procps \
      wget \
      openssh-server \
      openssh-clients \
      which \
      iproute \
      e2fsprogs \
      unzip \
      nginx \
      glibc-locale-source \
      glibc-langpack-ja \
      bind-utils \
# .env
APP_CODE=SAMPLE
APP_PORT=80

MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=XXXXXX
MYSQL_DATABASE=XXXXXX
MYSQL_USER=XXXXXX
MYSQL_PASSWORD=XXXXXX
MYSQL_TIMEZONE=Asia/Tokyo

やってることは以下
・docker-compose.yml に立ち上げる複数のコンテナを定義
・docker-compose.ymlの中で動的に変わりそうな部分を.envファイルで抜き出し
・docker-compose.ymlからサーバー立ち上げ時のパッケージをインストールするコマンドなどを記載したDockerfileを読み込む

で、定義ファイルができたら最後にコマンドで

$ docker-compose up -d

を実行すればコンテナ(たち)が立ち上げます。

最後に、dockerで作った

  • ネットワーク
  • イメージ
  • コンテナ
  • ボリューム(コンテナ内で作ったストレージ)

を一括して消す呪文でお別れしましょう。

$ docker system prune -a

systemはネットワーク、イメージ、コンテナ、ボリュームをすべて含みます。
pruneは削除
-a オプションは全てという意味です。
$ docker system prune
でも削除はできますが、未使用ボリュームは残り続けます。

要約(まとめ)

dockerを秒で理解するためには

エンジン起動→イメージ作成→コンテナ起動(複数コンテナ一発起動はdocker-composeが便利)

だけおさえておけばOK。

なんとなくdockerの概略がわかってこれから使ってみようと思う人は、より深く調べてみましょう。

わかりやすく使い方を紹介してるWebページはたくさんあります。

この記事に関する非難・中傷は受け付けておりません😤

以上、dockerの超入門編でした。