お知らせ
こんにちは、愛知工業大学システム工学研究会です。
この記事は、2019-10-07に書かれた記事です。
間違った内容や古い内容が紛れていますが、過去の記事を残す一環として記事を書きます。
よろしくおねがいします。
ざっくりdockerがどんなものか知ってもらえれば幸いです。Dockerとは、コンテナ技術を利用した仮想環境を構築...
ざっくりdockerがどんなものか知ってもらえれば幸いです。
Dockerとは?
![](https://i.imgur.com/ygHmAZH.jpg)Dockerとは、コンテナ技術を利用した仮想環境を構築、実行、管理するためプラットホームです。コンテナと呼ばれるコードや依存関係をまとめたものを、ホストOSのカーネルを利用して、隔離、制限させることで擬似的に独立した実行環境を構築することができます。
仮想マシンと似てますが、仮想マシンは実行環境ごとにゲストOSを動かします。
一方、コンテナはホストOSで実行するためより軽量で高速に実行停止することができます。
またDockerは、Dockerイメージを他者に渡すことができるのでチーム内の開発環境の共有が楽になります。
実行環境
macos 10.12.6
Dockerをインストール
実際にDockerを入れてみましょう!
2通り出しておきます。
他の方法じゃなくても問題ないです。
Homebrewからインストール
Homebrewとは、macOS用のパッケージ管理ツールです。
これを使えばアプリケーション、ソフトウェアを楽に管理できます。
ホームページは、下のurlから。
Homebrewをインストールするため以下のコマンドをターミナルで打ってください。
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
以下のコマンドでDockerインストールできます。
$ brew cask install docker
ディスクトップからインストール
mac版は下のURLから
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