初心者のためのDockerガイド ~mysqlコンテナを作ろう~

2020年4月15日未分類

ざっくりdockerがどんなものか知ってもらえれば幸いです。

Dockerとは?

Dockerとは、コンテナ技術を利用した仮想環境を構築、実行、管理するためプラットホームです。コンテナと呼ばれるコードや依存関係をまとめたものを、ホストOSのカーネルを利用して、隔離、制限させることで擬似的に独立した実行環境を構築することができます。
仮想マシンと似てますが、仮想マシンは実行環境ごとにゲストOSを動かします。
一方、コンテナはホストOSで実行するためより軽量で高速に実行停止することができます。

またDockerは、Dockerイメージを他者に渡すことができるのでチーム内の開発環境の共有が楽になります。

実行環境

macos 10.12.6

Dockerをインストール

実際にDockerを入れてみましょう!
2通り出しておきます。
他の方法じゃなくても問題ないです。

Homebrewからインストール

Homebrewとは、macOS用のパッケージ管理ツールです。
これを使えばアプリケーション、ソフトウェアを楽に管理できます。
ホームページは、下のurlから。
https://brew.sh/index_ja Homebrewをインストールするため以下のコマンドをターミナルで打ってください。
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 
以下のコマンドでDockerインストールできます。
$ brew cask install docker

ディスクトップからインストール

mac版は下のURLから
https://hub.docker.com/editions/community/docker-ce-desktop-mac

Dockerを使おう

Dockerのバージョンを見てみましょう

$ docker -vを打ってみましょう
Docker version 18.06.1-ce, build e68fc7a
上記のようにバージョンが表示されます

Dockerイメージを入手しよう

Dockerイメージとは、コンテナを動かすのに必要な設定ファイルをまとめたものです。
Dockerコンテナは、このDockerイメージがないと起動しません。
このイメージを共有することで、様々なマシンで同じコンテナを動作させることができます。
イメージはDockerHubで配布されてます。
イメージを取得するにはdocker pullコマンドを使います。
このコマンドの構文は次の通りです。
docker pull [option] image名[:タグ名]
タグ名とは、イメージのバージョンです。
今回は最新のMysqlベースのイメージをdockerhubからもらいましょう。
以下のコマンドを叩いてください。
$ docker image pull mysql:latest
また全タグを入手したい時は、$ docker image pull -a mysql

Dockerイメージの一覧表示

入手したイメージ一覧が見たいときは以下のコマンドから
$ docker image ls [option] [リポジトリ名] リポジトリ名に確認したいイメージ名を入れると、そのイメージのみ出力されます。
今回は、mysqlイメージが入ってるか確認したいので以下のコマンドを打ってください。
$ docker image ls mysql
以下のようにリスト形式で出力されます。
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               latest              656186fff20d        3 weeks ago         372MB
リストの各項目一覧です。
項目 内容
REPOSITORY イメージ名
TAG イメージのタグ名
IMAGE ID イメージID
イメージ特有の番号
CREATED 作成日
SIZE イメージのサイズ、容量
主なオプション一覧
オプション 内容
-a 全てのイメージを表示
–digests ダイジェストを表示する
–no-trunc 結果を全て表示
-q イメージのIDのみ出力

Dockerイメージを削除する

作成したイメージを削除するには、以下のコマンドから
$ docker image rm [option] イメージ名 主なオプション一覧
オプション 内容
-f 強制的にイメージを削除する
–no-prun 中間イメージを削除しない

Dockerコンテナを動かそう

Mysqlイメージを入手したのでコンテナを動かしましょう!
コンテナを動作するコマンドは以下の通り
docker run [option] image名:バージョン [COMMAND] 主なオプション一覧
option 内容
-i コンテナの STDIN にアタッチ
-t 疑似ターミナル (pseudo-TTY) を割り当て
-d バックグラウンド実行
-e 環境変数の設定
–name コンテナ名の設定
-p ポート指定 ホストマシンのポート番号:コンテナ内のポート番号
実際に以下のコマンドを叩いてください
$ docker run -it -d\
  -e MYSQL_ROOT_PASSWORD=mysql \
  --name "mysqltest"          \
  -p 43306:3306  mysql:latest     
“-d"をつけずに実行しても可
停止させたかったら"ctrl + c"すれば止まるはず
エラーが出なかったら、次は以下のコマンドを打ってください
$ mysql -h 127.0.0.1 --port 43306 -uroot -pmysql
これでmysqlにログインできます 下記と似たような画面になったら成功!!
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
exitで脱出できます

動いてるDockerコンテナを確認しよう

どんなコンテナが動いてるか確認しよう
コンテナを動作するコマンドは以下の通り
docker ps [OPTIONS]
主なオプション一覧
命令 内容
-a 全てのコンテナを表示
停止してるコンテナも表示
-f Goテンプレートを使用したきれいな印刷コンテナ
-l 最新に作成されたコンテナを表示します(すべての状態を含みます)
-s 合計ファイルサイズを表示する
実際に以下のコマンドを叩いてください
docker ps
下記のような一覧が出るはずです。
docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES
3be4ac05b26b        mysql:latest        "docker-entrypoint.s…"   2 days ago          Up 4 seconds        33060/tcp, 0.0.0.0:43306->3306/tcp   mysqltest
リストの各項目一覧です。
項目 内容
CONTAINER ID コンテナID
IMAGE コンテナのベースイメージ
COMMAND コンテナ内で実行しているコマンド
CREATED コンテナ作成日
STATUS コンテナの状況
PORTS 割り当てられたポート番号
見方:ホスト側から見たときののポート番号->コンテナ内のポート番号
NAMES コンテナ名

Dockerコンテナを一時停止しよう

コンテナを一時停止するコマンドは以下の通り
docker pause コンテナ名 [コンテナ名(複数指定する場合)] 実際に実行
docker pause mysqltest
コンテナ名、コンテナIDどちらでも止めれます docker psで確認するとSTATUSがUp 2 hours (Paused)と同じようになってるはずです。

Dockerコンテナを再開しよう

再開するには以下のコマンドを打ちます
docker unpause コンテナ名 [コンテナ名(複数指定する場合)] 実際に実行
docker unpause mysqltest
こちらもコンテナ名、コンテナIDどちらでも止めれます。

Dockerコンテナを停止しよう

docker stop [OPTIONS] コンテナ名 [コンテナ名(複数指定する場合)]
終わったらちゃんとコンテナ止めましょう!
実際に以下のコマンドを打ってください
$ docker stop mysqltest
止まってるか確認できたら次へ行きましょう

Dockerコンテナを削除しよう

もう使わなくなったコンテナは消していきましょう。
コンテナを削除するコマンドは以下の通り
docker rm [option] コンテナ名 主なオプション一覧
オプション 内容
-f 強制的にコンテナを削除する
-l 指定されたリンクを削除する
-v コンテナに関連付けられているボリュームを削除します
実際に以下のコマンドを打ってください
$ docker rm mysqltest 消えてなかったら-f使いましょう

Dockerfileを使ったコンテナ作り

Dockerfileとは、コンテナのインフラ構成を記述したファイルのことです。
docker buildを使いDockerfileを元にコンテナを作ることができます。
他人に渡せば、同じコンテナが使えます。 Dockerfileの基本書式は、命令 引数を連ねるだけ。命令は大文字、小文字どちらでも動きます
よく使うDockerfileの命令の一覧
命令 内容
FROM ベースとなるイメージの指定
RUN 引数に書かれたコマンドの実行
ENV 環境変数の設定
ADD ファイル、ディレクトリの追加
詳しくはリファレンスを見てください。
http://docs.docker.jp/engine/reference/builder.html#expose
実際にDockerfileを作りましょう!
適当なディレクトリにDockerfileを作って内容を下からコピペしてください。
FROM mysql:latest
ENV MYSQL_ROOT_PASSWORD mysql
Dockerfileができたら以下のコマンド実行してください。
$ docker build -t mysqltest2:1.0
コンテナが作られてるはずなので$ docker image lsで確認してください
できてたらコンテナを起動しましょう。
$ docker container run -it -d\
  -p 43306:3306  mysqltest2:1.0  

参考文献

  • プログラマのためのDocker教科書-第2版-インフラの基礎知識-コードによる環境構築の自動化
    https://www.amazon.co.jp/dp/4798153222/
  • https://brew.sh/index_ja
  • https://hub.docker.com/_/mysql?ref=login
  • http://docs.docker.jp/engine/reference/builder.html#expose

2020年4月15日未分類

Posted by T.A