Docker の使い方
使い方をよく忘れるので備忘録。
1. Docker
「Docker」は、「コンテナ」と呼ばれる仮想化環境を提供するプラットフォームです。
2. Dockerの用語
・Dockerイメージ : コンテナ生成に必要な依存関係と情報を含むパッケージ。
・Dockerコンテナ : Dockerイメージのインスタンス。
3. Dockerのインストール
以下のサイトからインストーラをダウンロードしてインストールできます。
・Docker Desktop for Mac - Docker Hub
Docker for Macはデフォルトでメモリ制限が2Gと少ないので、Preferenceでメモリの制限量を増やす。
4. Dockerのチュートリアル
◎ Dockerイメージの取得
(1) Dockerイメージの一覧表示。
$ docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
(2) Dockerイメージの取得と一覧表示。
「Docker Hub」のubuntuリポジトリからDockerイメージを取得します。
$ docker pull ubuntu
$ docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest f643c72bc252 7 weeks ago 72.9MB
(2) 起動中のDockerコンテナの一覧表示。
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
◎ Dockerコンテナの生成
(1) Dockerコンテナの生成。
Ubuntuが起動し、プロンプトが表示されます。
$ docker run -it ubuntu
root@fc8d4da7aa60:/#
(2) 「Ctrl+P+Q」でDockerコンテナの切断後、起動中のDockerコンテナの一覧表示。
$ docker container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc8d4da7aa60 ubuntu "/bin/bash" 5 minutes ago Up 5 minutes infallible_gates
(3) Dockerコンテナの接続。
$ docker attach fc8d4da7aa60
root@fc8d4da7aa60:/#
(4) 「exit」でDockerコンテナの終了後、起動中のDockerコンテナの一覧表示。
root@fc8d4da7aa60:/# exit
exit
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
◎ Dockerコンテナの起動と停止
(1) Dockerコンテナの一覧表示。
$ docker container list -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc8d4da7aa60 ubuntu "/bin/bash" 25 minutes ago Exited (0) 6 minutes ago infallible_gates
(2) Dockerコンテナの起動後、起動中のDockerコンテナの一覧表示。
$ docker start fc8d4da7aa60
fc8d4da7aa60
$ docker container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc8d4da7aa60 ubuntu "/bin/bash" 27 minutes ago Up 7 seconds infallible_gates
(3) Dockerコンテナの停止後、起動中のDockerコンテナの一覧表示。
$ docker stop fc8d4da7aa60
fc8d4da7aa60
$ docker container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
◎ DockerコンテナとDockerイメージの削除
(1) DockerコンテナとDockerイメージの削除。
$ docker container rm fc8d4da7aa60
$ docker image rm f643c72bc252
(2) DockerコンテナとDockerイメージの一覧表示。
$ docker container list -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
5. 様々なDockerコンテナの利用
◎ Nginx (Webサーバ)
(1) Nginxコンテナの生成。
$ docker run --name my_nginx -d -p 8080:80 nginx
ブラウザで「http://localhost:8080/」を開くことで動作確認できます。
パラメータ名は、次のとおりです。
・--name : コンテナ名。
・--detach, -d : コンテナをバックグラウンドで実行。
・--publish=[], -p : ホスト側ポート番号:コンテナ側ポート番号。
◎ Python
(1) Pythonコンテナの生成。
$ docker run -it --name my_python python:3.6 /bin/bash
パラメータ名は、次のとおりです。
・--interactive, -i : コンテナの標準入力に接続。
・--tty, -t : 疑似ターミナル(pseudo-TTY)の割り当て。
(2) 起動中のPythonコンテナの利用。
$ docker exec -it my_python /bin/bash
6. Dockerイメージの生成
「Hello World!」と表示するPythonサーバーを実行するコンテナの「Dockerイメージ」を生成します。
◎ 手作業でのPythonサーバーコンテナの実行
(1) main.pyの準備。
import os
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
name = os.environ.get('NAME', 'World')
return 'Hello {}!'.format(name)
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=int(os.environ.get('PORT', 8080)))
(2) Pythonパッケージのコンテナの生成。
$ docker run -d -it -p 8080:8080 --name my_python python:3.9-slim
(2) main.pyをPythonコンテナにコピー。
$ docker cp main.py my_python:./
(3) Dockerコンテナの接続。
$ docker exec -it my_python /bin/bash
(4) 依存関係のインストールとmain.pyの実行
# pip install Flask
# python main.py
◎ DockerイメージからのPythonサーバーコンテナの実行
(1) main.pyと同じフォルダに「Dockerfile」を作成。
# 軽量Pythonイメージベース
FROM python:3.9-slim
# ステートメントとログをKnativeログに出力
ENV PYTHONUNBUFFERED True
# appフォルダにファイルをコピー
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . ./
# 依存関係のインストール
RUN pip install Flask gunicorn
# main.pyの実行
CMD python main.py
Dockerfileの命令は、次のとおりです。
・FROM <image> : ベースイメージの指定。
・ENV <key> <value> : 環境変数の指定。
・WORKDIR <dir> : ワークディレクトリの指定。
・COPY <src> <dest> : Dockerイメージにファイルコピー。
・RUN <command> : Dockerコンテナ生成時のコマンドの実行。
・CMD <command> <param1> <param2> : Dockerコンテナ起動時のコマンド実行。
(2) main.pyと同じフォルダに「.dockerignore」を作成。
Dockerイメージに含めないファイルを記述します。
Dockerfile
README.md
*.pyc
*.pyo
*.pyd
__pycache__
.pytest_cache
(3) Dockerイメージの生成。
$ docker build -t helloworld .
$ docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
helloworld latest e1d84335f51a 5 seconds ago 125MB
python 3.9-slim edd87973afe0 6 days ago 114MB
(4) Dockerコンテナの生成。
$ docker run -d -p 8080:8080 --name my_helloworld helloworld:latest
【おまけ】 Dockerの主要コマンド
◎ バージョン
・docker version : バージョンの確認。
◎ Dockerイメージ
・docker image list : Dockerイメージの一覧表示。
・docker pull [REPOSITORY] : Dockerイメージの取得。
・docker image rm [IMAGE-ID] : Dockerイメージの削除。
◎ Dockerコンテナ
・docker container ls : 起動中のDockerコンテナの一覧表示。
・docker container ls -a : Dockerコンテナの一覧表示。
・docker run [REPOSITORY] : Dockerコンテナの生成。
・docker attach [CONTAINER-ID] : Dockerコンテナの接続。
・docker exec -it [CONTAINER-ID] /bin/bash : Dockerコンテナの接続。
・docker start [CONTAINER-ID] : Dockerコンテナの起動。
・docker stop [CONTAINER-ID] : Dockerコンテナの停止。
・docker container rm [CONTAINER-ID] : Dockerコンテナの削除。
・docker logs [CONTAINER-ID] : Dockerコンテナのログの表示。
この記事が気に入ったらサポートをしてみませんか?