新たに技術を理解するにはともかく実際に使ってみるのが最も効率的だと思います。
そこで、この記事ではDockerの使い方を理解したい人向けに、DockerのインストールからDockerコンテナの起動までを具体例と共に紹介していきます。
記事に記載の手順を実施していくことで、Python3.9のDockerコンテナ環境が起動できる構成になっています。それでは早速始めて行きます。
Dockerのインストール
環境
- MacBook Air
Dockerのインストールは公式HPにしたがって簡単に行えます。ここではMacにDockerをインストールする方法を紹介しますが、Windowsでもほぼ同じ手順でインストール可能です。
まず公式HPにアクセスし、Get Dockerをクリックします。そうすると"Docker.dmg"がダウンロードされます。
※Windowsの場合はこちらから取得してください。
ダウンロードされた"Docker.dmg"をクリックして実行するとインストールが開始されます。以下の画面が出てきたら"Docker.app"のアイコンを右の"Applicaation"へdrag and dropしましょう。
その後、Applicationにある、Docker.appをダブルクリックするとDockerが起動します。※関連ツールのインストールのためMacのパスワードを求められることがあります。
docker versionコマンドを実行して、正しくインストールされたか確認します。
# docker version
Client: Docker Engine - Community
Cloud integration: 1.0.2
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 16:58:31 2020
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:07:04 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
無事Dockerがインストールされましたので、次はDockerイメージを作成しコンテナを起動していきます。
Dockerを実践する
以下の手順①〜④に沿ってイメージの作成からコンテナの起動まで、順に実施していきます。
① Dockerイメージの作成
Dockerイメージの作成は、Dockerfileと呼ばれるDockerイメージ作成用の設計書を用いて行います。Dockerfile作成後に、"docker image build"コマンドを実行することで、Dockerfileの記述に従って、Docker イメージが作成されます。
ちなみに、Dockerfileはテキストファイルなのですが、ファイル名は”Dockerfile”にしておきましょう。
- Dockerイメージの作成には"Dockerfile"と呼ばれる、Docker イメージの設計書を利用する。
- Dockerイメージを作成するコマンドは、"docker image build"
Dockerfileには、使用するベースイメージ、追加でインストールするパッケージやライブラリ、コンテナ起動時の実行コマンドなどを上から順に記載していきます。
公式サイトにDockerfileのベストプラクティスがありますので、詳しく知りたい方はそちらもご参照ください。
それではDockerfileの具体例を見ていきましょう。
# ベースイメージを指定。
# DockerHubに登録されているpython 3.9.0のイメージを取得。
FROM python:3.9.0-buster
# aptパッケージの更新、エディタ(vim)のインストール
RUN apt update -y && apt upgrade -y && \
apt install -y vim
# python関連ライブラリのインストール
RUN pip install numpy matplotlib jupyter
# コンテナ起動時にbashを起動
CMD ["/bin/bash"]
以下は、Dockerfileの基本的な命令文です。ENV命令は今回使用していませんが、実際の業務ではDockerイメージに入れるパッケージのバージョンを明示するために、環境変数でバージョンを指定するという使い方がよく用いられます。
他の命令文も知りたい方はこちらの公式サイトから参照できます。
Dockerfileの命令文 | 説明 | 構文/例 |
FROM | Dockerイメージを作成する際のベースイメージを指定する。 Docker hubにあるイメージを指定するのが一般的。 | - 構文 FROM <image>:<tag> - 例 FROM ubuntu:20.04 |
COPY | Docker内部にファイルをコピーする。 | - 例:カレントディレクトリのファイルを/tmp/にコピー COPY . /tmp/ |
RUN | Dockerイメージ上で実行するコマンドを指定する。 | - 例 RUN apt install vim |
CMD | コンテナ内部で実行するコマンドを指定する。 | - 例:コンテナ作成時にbashを起動 CMD ["/bin/bash"] |
ENV | 環境変数を設定する | - 例 ENV PYTHON_VERSION=3.9 |
Dockerfileを記述したので、イメージを作成していきます。
Dockerfileを用いてDockerイメージを作成するには、docker image buildコマンドを用います。
# Dockerイメージを作成するコマンド
# 構文:docker image build [OPTIONS] PATH | URL | -
# 頻出オプション
-t: イメージの名前を指定。コロン(:)区切りでタブ名も指定可能。
# 具体例
$ docker image build -t py39 .
このコマンドによって、カレントディレクトリのDockerfileを読み込み、Dockerイメージの作成(build)が行われます。
例では、py39という名前でDockerイメージを作成しています。実行結果は次の通りです。
$ docker image build -t py39 .
[+] Building 110.6s (9/9) FINISHED
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 414B 0.0s
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/python:3.9.0-buster 2.2s
=> CACHED [1/4] FROM docker.io/library/python:3.9.0-buster@sha256:ac5489b6fffc671a0880dc44d791944f9bdece5331c07e22af424d46ef264b36 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 64B 0.0s
=> [2/4] RUN apt update -y && apt upgrade -y && apt install -y vim 48.2s
=> [3/4] RUN pip install numpy matplotlib jupyter 55.0s
=> [4/4] COPY ./file /root 0.1s
=> exporting to image 5.0s
=> => exporting layers 4.9s
=> => writing image sha256:e06e263baca1f1b05de9d1a6690b23a85cbcce545763058ce1fb68c25c87296a 0.0s
=> => naming to docker.io/library/py39
$
② Dockerイメージを確認
docker buildコマンドで作成したイメージを確認します。イメージの確認はdocker image ls コマンドを使用します。後述しますが、コンテナ一覧を確認するにはdocker container lsコマンドを使用します。
# Dockerイメージの一覧を確認するコマンド
# 構文:docker image ls [OPTIONS] [REPOSITORY[:TAG]]
# 具体例
$ docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
py39 latest e06e263baca1 25 seconds ago 1.23GB
先ほど作成したDockerイメージ(py39)が、IMAGE ID: e06e263baca1で、25秒前に作成されたことがわかります。
ちなみに、このイメージを削除するにはdocker image rm コマンドを使用します。以下に例を載せますが、イメージはまだ使用するためここでは実行しません。
# Dockerイメージを削除するコマンド
# 構文:docker image rm [OPTIONS] IMAGE [IMAGE...]
# 具体例
$ docker image rm e06e263baca1
では次にDockerコンテナを起動しましょう。
③ Dockerコンテナの起動
作成したDockerイメージを用いてコンテナを起動します。コンテナの起動はdocker container runコマンドを使用します。
# Dockerコンテナを起動するコマンド
# 構文:docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 頻出オプション:
# -it: コンテナ内に標準入力と接続されたTTYを用意します。
# —rm: コンテナ終了時に自動的に削除する。
# 具体例
$ docker container run -it —-rm e06e263baca1
root@c1dfe7a9bb7f:/# python --version
Python 3.9.0
root@c1dfe7a9bb7f:/# exit
exit
$
コンテナ起動時に2つのオプション(実際は-i, -tオプションをまとめて-itとしているため3つですが)を指定しています。このコマンドを実行するとコンテナが起動し、インタラクティブシェルが起動します。
コンテナの中でpythonのバージョンを確認するとpython 3.9.0となっており、期待したイメージが動作していることが分かります。
この例では、docker run実行時にフォアグラウンドで、コンテナが起動していますが、バックグラウンドで実行する場合は-dオプションを使用します。
# コンテナをバックグラウンドで起動する。(-d オプション)
# 具体例
$ docker container run -it -d e06e263baca1
1848b929d74a8634669bde19f710c1d9a2b28b4801108d066537c32c36dcd277
$
バックグラウンドで起動しているコンテナに入るには、docker container execコマンドを利用し、コンテナ内でシェルコマンドを実行することで実現可能です。
# Dockerコンテナ内でコマンドを実行する
# 構文:docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]
# 頻出オプション:
# -it: コンテナ内に標準入力と接続されたTTYを用意します。
# 具体例
$ docker container exec -it 1848b929d74a /bin/bash
root@1848b929d74a:/#
④ Dockerコンテナの確認
バックグラウンドで起動しているコンテナを確認するにはdocker container lsコマンドを使用します。
# Dockerコンテナの一覧を表示するコマンド
# 構文:docker container ls [OPTIONS]
# 具体例
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1848b929d74a e06e263baca1 "/bin/bash" 8 seconds ago Up 7 seconds practical_shamir
イメージID e06e263baca1のコンテナ1848b929d74aが、8秒前に作成(CREATED)され、7秒間起動している状態(STATUS)であることが分かります。
ちなみに、オプションの-aを付けないと起動しているコンテナのみが表示されます。
コンテナを停止するにはdocker container stopコマンドを使用します。
# Dockerコンテナを停止するコマンド
# 構文:docker container stop [OPTIONS] CONTAINER [CONTAINER...]
# 具体例
$ docker container stop 1848b929d74a
1848b929d74a
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1848b929d74a e06e263baca1 "/bin/bash" 27 minutes ago Exited (0) 4 seconds ago practical_shamir
$
最後に停止したコンテナを削除します。コンテナを削除するにはdocker container rmコマンドを使用します。
# Dockerコンテナを削除するコマンド
# 構文:docker container rm [OPTIONS] CONTAINER [CONTAINER...]
# 具体例
docker container rm 1848b929d74a
終わりに
Dockerのインストールから、Dockerコンテナの起動までの一連の流れを実践してきました。今回は基本的な全体像を紹介したので、今後は項目ごとに深掘りした内容も記載していく予定です。
最後に、今回使用したDockerコマンドを表にまとめておきます。
Dockerコマンドまとめ
Dockerコマンド | 説明 |
docker image build | DockerfileからDockerイメージを作成する。 ◆構文 docker image build [OPTIONS] PATH | URL | - ◆代表的なオプション -t: イメージの名前を指定。コロン(:)区切りでタブ名も指定可能。 ◆実行例 $ docker image build -t py39 . |
docker image ls | Dockerイメージの一覧を表示する。 ◆構文 docker image ls [OPTIONS] [REPOSITORY[:TAG]] ◆具体例 $ docker image ls -a |
docker container run | イメージからコンテナを起動する。 ◆構文 docker container run <option> <docker image> ◆実行例 docker container run -it -d —name test ◆代表的なオプション -it: コンテナ内に標準入力と接続されたTTYを用意します。 -d: dockerコンテナをバックグラウンドで実行する —name: コンテナの名前を設定 -v: コンテナ内のディレクトリとコンテナ外のディレクトリを紐づけます。 —rm: コンテナ終了時に自動的に削除する。 |
docker container ls | Docker コンテナの一覧を表示する。 ◆構文 docker container ls [OPTIONS] ◆具体例 $ docker container ls -a |
docker container exec | Dockerコンテナ内でコマンドを実行する。 ◆構文 docker container exec [OPTIONS] CONTAINER COMMAND [ARG…] ◆頻出オプション -it: コンテナ内に標準入力と接続されたTTYを用意します。 ◆具体例 $ docker container exec -it 1848b929d74a /bin/bash |
docker container stop | 起動しているDockerコンテナを停止する。 ◆構文 docker container stop [OPTIONS] CONTAINER [CONTAINER…] ◆具体例 $ docker container stop 1848b929d74a |
docker container rm | Dockerコンテナを削除する。 ◆構文 docker container rm [OPTIONS] CONTAINER [CONTAINER…] ◆具体例 docker container rm 1848b929d74a |
docker image rm | Dockerイメージを削除する。 ◆構文 docker image rm [OPTIONS] IMAGE [IMAGE...] |
コメント