🐳

【初学者向け】Dockerの基礎。

2024/12/14に公開

はじめに

Dockerの理解力を高めるために記事を書きます。
もし、間違っている箇所がありましたら、教えていただけると光栄です。

想定読者

Docker初学者。

Dockerとは

  • Dockerは、Docker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのオープンソースソフトウェアです。

メリット

  • 軽量のため高速に起動ができる。
  • 他の人が同じ環境で開発を簡単に行うことができる。
  • ホストOSを汚さずに環境構築ができる。
  • 可搬性が高い。
    • ライブラリごとパッケージするため、本番環境でライブラリが足りないなどの不具合を避けることができる。

デメリット

  • 学習コストが必要。
    • コンテナの作成、実行はすぐに行えるが、複数のコンテナを組み合わせたり、本番環境で使うときに深い知識が必要。
  • 可搬性はあるが、ホストOSのバージョンの違いにより動作しないことがある。

Containersとは

  • アプリとファイルシステムを隔離するプロセス。
    • プロセスとは動作中の個々のプログラム。
    • プロセスだけ別マシンで動いてる状態。
  • 1つの物理マシンで複数の仮想サーバーを作ることができる。

Imagesとは

  • コンテナを作るための型(テンプレート)のようなもの。
  • Docker Hub上からイメージを取得 (pull)することができる。
  • イメージの内容は Dockerfileに記載される。
    • 構築することを build という。
docker image pull イメージ名:タグ名

Volumesとは

  • コンテナ内のデータを永続化させる記憶領域。
    • データベースのようなイメージ。
  • docker compose down をした後もVolumeは保持される。

Dockerの環境構築

DockerFile

  • イメージを作る。
# 例

FROM ubuntu:20.04
# 必要なパッケージのインストールや設定を記述する
RUN apt-get update && \
    apt-get install -y build-essential \
                       curl 
# ワーキングディレクトリを設定する
WORKDIR /app
# コンテナ内で実行するコマンドを指定する
CMD ["/bin/bash"]

Dockerfileに記述できる命令

命令 説明
FROM 元となるイメージを指定。
RUN イメージのビルド時に実行するコマンド。
CMD コンテナ起動時に実行するデフォルトのコマンド。
COPY イメージにイメージにフォルダやファイルをコピーする。
ENTRYPOINT コンテナの起動時に実行。上書きはできない。
WORKDIR 作業ディレクトリを指定する。

docker-compose.yml

  • コンテナを起動するための外部設計。
  • 中身は application.yml に似ている。
    • application.ymlはアプリケーションの内部設計。
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:80"
    volumes:
      - .:/app
    command: bash
    stdin_open: true
    tty: true
  • build. を書くとカレントディレクトリにあるDockerfileを使ってイメージを作成する。

コマンド

  • 全てのコンテナを表示。
$ docker ps -a
  • 初めてのイメージの構築。(welcome-to-docker コンテナを使う。)
$ docker build -t welcome-to-docker .
  • コンテナの作成
$ docker-compose up
  • コンテナの停止
$ docker-compose down
  • コンテナを実行する。(welcome-to-docker コンテナを使う。)
$ docker run -p 8088:80 -d --name welcome-to-docker docker/welcome-to-docker
  • コンテナ内でコマンドを実行するとき。
$ docker compose exec コンテナ名 実行するコマンド
$ docker compose exec db mariadb --version

VSCodeの拡張機能「Docker」のメリット

  • Dockerfileやdocker-compose.ymlを書き換えるときに、予測変換を表示する。
  • テンプレートを作成する。
  • コンテナの開始、削除、操作が行える。

感想

私自身わからないことばかりで、アウトプット目的で記事を書きました。
誤りがあれば教えてください。

参考文献

Docker&仮想サーバー完全入門 Webクリエイター&エンジニアの作業がはかどる開発環境構築ガイド
https://docs.docker.jp/
https://qiita.com/takusan64/items/4d622ce1858c426719c7
https://docs.docker.com/guides/java/containerize/

Discussion