🐳
【初学者向け】Dockerの基礎。
はじめに
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を書き換えるときに、予測変換を表示する。
- テンプレートを作成する。
- コンテナの開始、削除、操作が行える。
感想
私自身わからないことばかりで、アウトプット目的で記事を書きました。
誤りがあれば教えてください。
Discussion