初心者のためのDockerガイド ~mysqlコンテナを作ろう~
目次
Dockerとは?
Dockerとは、コンテナ技術を利用した仮想環境を構築、実行、管理するためプラットホームです。コンテナと呼ばれるコードや依存関係をまとめたものを、ホストOSのカーネルを利用して、隔離、制限させることで擬似的に独立した実行環境を構築することができます。仮想マシンと似てますが、仮想マシンは実行環境ごとにゲストOSを動かします。
一方、コンテナはホストOSで実行するためより軽量で高速に実行停止することができます。
またDockerは、Dockerイメージを他者に渡すことができるのでチーム内の開発環境の共有が楽になります。
実行環境
macos 10.12.6Dockerをインストール
実際に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
を作って内容を下からコピペしてください。
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
ディスカッション
コメント一覧
まだ、コメントがありません