見出し画像

Docker の使い方

使い方をよく忘れるので備忘録。

1. Docker

Docker」は、「コンテナ」と呼ばれる仮想化環境を提供するプラットフォームです。

2. Dockerの用語

・Dockerイメージ :  コンテナ生成に必要な依存関係と情報を含むパッケージ。
・Dockerコンテナ : Dockerイメージのインスタンス。

3. Dockerのインストール

以下のサイトからインストーラをダウンロードしてインストールできます。

Docker Desktop for Mac - Docker Hub

Docker for Macはデフォルトでメモリ制限が2Gと少ないので、Preferenceでメモリの制限量を増やす。

画像2

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/」を開くことで動作確認できます。

画像1

パラメータ名は、次のとおりです。

・--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コンテナのログの表示。

この記事が気に入ったらサポートをしてみませんか?