1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker入門

Last updated at Posted at 2024-09-01

Dockerとは

Dockerはアプリケーションをコンテナ化して管理や実行をするプラットフォームである

Dockerのメリット

・開発環境の共有や破棄が楽
・ノートパソコンの固有の問題やOSの影響を受けない
・開発者のローカル環境、テスト環境、本番環境の違いによる問題を最小限に抑えることができる

Dockerイメージとは

コンテナを作るための設計書

イメージを扱うコマンド

イメージを削除するコマンド

docker image rm <イメージ名>

イメージの一覧を表示するコマンド

docker image ls

イメージの詳細情報を表示するコマンド

docker image inspect <イメージ名>

イメージの容量を小さくするには

イメージの容量を小さくするにはレイヤー構造を意識してかくべきである

レイヤーとはソフトウェアやシステムを階層構造で分割したものである
レイヤー構造とはレイヤーが複数連なったもののことである

イメージのレイヤー構造を知るコマンド

docker image history <イメージ名>

Dockerfile1はレイヤーを意識せずに書いている

Dockerfile1
FROM ubuntu
RUN apt update
RUN apt install -y curl
CMD ["/bin/bash"]

レイヤー構造を意識してDockerfile1を書き直すと

Dockerfile2
FROM ubuntu
RUN apt update && apt install -y curl
CMD ["/bin/bash"]

&&を使うことでレイヤーが少なくなりDockerfile1で作ったイメージよりもDockerfile2で作ったイメージの方が容量が小さくなる

Dockerコンテナとは

イメージをもとに作られる開発環境

コンテナのライフサイクル

コンテナを作成したときはCreateの状態になる
コンテナを起動するとUpの状態になる
コンテナが終了するとExitedの状態になる

コンテナを扱うコマンド

コンテナの作成はここでは説明しない(コンテナを作る方法で詳しく書いている)

コンテナがExitedからUpにするコマンド

docker container restart <コンテナ名>

コンテナがUpからExitedにするコマンド

docker container stop <コンテナ名>

コンテナを削除するコマンド

docker container rm <コンテナ名>

Exitedになっているコンテナを一括で削除するコマンド

docker container prune

Upになっているコンテナを削除するコマンド

docker container container rm -f <コンテナ名>

コンテナを起動して任意のコマンドを実行させるコマンド

docker container run -it <イメージ名> <実行したいコマンド>

Upの状態のコンテナに対して任意のコマンドを実行させるコマンド

docker container exec -it <コンテナ名> <実行したいコマンド>

コンテナに好きな名前を付けるコマンド

docker container run --name <好きな名前> <イメージ名>

Upの状態のコンテナだけを一覧で見るコマンド

docker container ls

Upの状態のコンテナだけを一覧で見るコマンド

docker ps

すべてのコンテナを一覧で見るコマンド

docker container ls -a

すべてのコンテナを一覧で見るコマンド

docker ps -a

コンテナオプショ

-i:標準入力を受け付ける
-t:見た目をターミナルぽくする
-d:コンテナをデタッチモード(バックグラウンド)で実行する
--rm:コンテナを終了したらExited状態にならずコンテナを削除するコマンド
--name <コンテナ名>:コンテナに好きな名前を付けるコマンド

コンテナを作る方法

●1つ目は自分でDockerfileを作って実行する方法(一般的)
●2つ目はDockerhubからイメージを持ってくる方法

Dockerfileを作ってコンテナを作るやり方

①Dockerfileを作成
②イメージを作成
③イメージを確認
④コンテナ作成
⑤コンテナを確認

①Dockerfileを作成

Dockerfileとはイメージを作るための設定ファイルのこと

まず、プロジェクトディレクトリにDockerfileを作成する。
以下は、シンプルなPythonアプリケーションのDockerfileの例である。

Dockerfile
# ベースイメージを指定
FROM python:3.9-slim

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

# 必要なパッケージをインストール
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# アプリケーションコードをコピー
COPY . .

# コンテナ起動時のデフォルトのコマンド
CMD ["python", "app.py"]

②イメージを作成

ターミナルを開き、Dockerfileがあるディレクトリに移動する。
そして、以下のコマンドを実行してイメージを作成する。

docker image build -t <イメージ名> .

docker image build:Dockerイメージを作成するコマンド
-t <イメージ名>:イメージに好きなイメージ名を付けることのできるコマンド
.:現在のディレクトリにDockerfileがあることを示すコマンド

③Dockerイメージを確認

イメージが作成できたら、以下のコマンドを実行してイメージが作成されたことを確認する。

docker image ls

④コンテナ作成

以下のコマンドで先ほどのイメージをもとにコンテナを作成する。

docker container run -itd --name <コンテナ名> <イメージ名>

⑤コンテナ作成されたか確認

コンテナが作成できたら、以下のコマンドを実行してコンテナが作成されたことを確認する。

docker container ls

Dockerhubからイメージを取ってきてコンテナを作成する方法

DockerhubとはDockerイメージをホストし、共有できる公式のリポジトリサービスである。

①Dockerhubからイメージを取得する
②イメージを確認
③コンテナ作成
④コンテナを確認

①Dockerhubからイメージを取得する

Dockerhubで使いたいイメージを見つけて、以下のコマンドでイメージを取得する

docker image pull <イメージ名>

②イメージを確認

イメージが取得できたら、以下のコマンドを実行してイメージが作成されたことを確認する。

docker image ls

④コンテナ作成

以下のコマンドでイメージからコンテナを作成する。

docker container run --name <アプリ名> -itd <イメージ名>

⑤コンテナを確認

コンテナが作成できたら、以下のコマンドを実行してコンテナが作成されたことを確認する。

docker container ls

Dockerfileでの環境変数の設定方法

ENVやARGで設定できる。

Dockerfile
FROM ubuntu:20.04

ENV password="sakura"

ARG message

#messageの変数の中身をmessage.txtに入れる
RUN echo $message > message.txt

#catコマンドでmessage.txtの中身を出力する
CMD ["cat", "message.txt"]

ENVの実行方法

コンテナを作成してコンテナの中に入りbashで以下のコマンドを実行する

echo $password

これでsakuraが出力される

ARGの実行方法

イメージを作成するときにARGのmessageの中に文字を入れる

docker image build --build-arg message="Hello" .

そしてコンテナを作成する

docker container run -it <イメージ名>

これを実行するとmessageの内容のHelloが表示される

ENVARGの違い

ENVはコンテナの中でも実行することができる
ARGはイメージをビルドするときしか使用できない

ビルドコンテキストの理解

docker image build .

.はビルドコンテキストとしてdockerデーモンに送られている
もしDokerfileでCOPYコマンドを書いたがコピーしたいファイルがDokerfileと同じディレクトリに存在しないとき、コピーしたいファイルのあるディレクトリにいき以下のコマンドを実行する.

docker image build -f <Dockerfileがあるディレクトリの場所を指定> .

例 tmpファイルのしたにDockerfileがある場合

docker image build -f tmp/Dockerfile .

これによりイメージを作成することができる

COPYしたくないファイルがあったときの対処法

DockerfileでCOPYを使ってファイルをコピーしたいときにコピーしたくないファイルだけ除外するには.dockerignoreファイルを作成してその中にコピーしたくないファイル名を書く.

例 hello.txtをコピーしたくないとする

まず.dockerignoreファイルを作成する

touch .dockerignore

そして.dockerignoreの中にコピーしたくないファイルの名前を書く

.dockerignore
hello.txt

そして、ターミナルで以下のコマンドでイメージを実行する

docker image build .
docker container run -it <イメージ名>

これにより、COPYしたくないファイルを除外することができる

マルチステージビルドの使い方

開発環境本番環境で環境を変えたい
しかし、Dockerfileを開発環境本番環境で2つ用意するのは管理がめんどくさい
そんなときにマルチステージビルドなら1つのDockerfileで開発環境と本番環境を書くことができる。

Dockerfile
FROM ubuntu:20.04 AS base #共通部分
RUN apt update  #共通部分
CMD ["sh", "-c", "echo Hello $my_name"]  #共通部分

FROM base AS dev #開発環境部分
ENV my_name=TEST

FROM base AS prod #本番環境部分
ENV my_name=Bob

イメージを作成するときにどの環境を使うのかを指定する

docker image build --target <環境名> .

例 本番環境を作りたいときは以下のコマンドを打つ

docker image build --target prod .

まとめ

これによりdockerでコンテナを作成することができる

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?