##はじめに
Docker って雑誌とか技術書でよく聞くけど何かよくわからない....
仮想環境を構築するやつってくらいは知ってるけど...
Vagrantと何が違うの???
Vagrant+Dockerって何なんで仮想環境の上に仮想環境なんだよ!!
そんな私が1日かけてインストールからDockerfileを書けるようになったので
私みたいな初心者がDockerを使えるように記事にしました!!!
(また, 有識者の方々はこの記事に間違っていることがあればご指摘お願いしますm(._.)m
##環境
- macOS Catalina
##目次
- Dockerとは???
- インストール
- Dockerの用語
- Dockerを用いて環境構築!!
- 簡単な操作
- imageの作成
- Dockerfileでimage作成
- よく使うコマンドまとめ
- 参考文献
##Dockerとは???
Docker 日本語リファレンスには下記のような理念が述べられています.
Develop, Ship and Run Any Application, Anywhere ~ あらゆるアプリケーションを、どこでも開発、移動、実行できるように
うーん....よくわからないですね!!
次にDockerの説明を見てみましょう!
Docker とは、開発者やシステム管理者が、アプリケーションの開発、移動、実行するためのプラットフォームです。Docker は部品(コンポーネント)から迅速にアプリケーションを組み立てるため、コードの移動による摩擦を無くします。Docker はコードのテストやプロダクション(本番環境)に対する迅速な展開をもたらします。
ここでやっとどんなものか少しだけわかりましたね!
補足を加えつつ, 知って欲しいことをまとめるとこんな感じです.
- Docker はコンテナ型の仮想環境を作るシステム
- virtualboxと違い, OSの一部のみを仮想化
- アプリの実行環境をラップ
- ホストがライブラリとかで汚れない
- 実行環境をテキストファイルで共有できる
- 複数人で一瞬に実行環境を揃えることができる
- (重要)既に先人たちが便利なコンテナを作成!!
雰囲気がわかったので用語の勉強をしていきましょう
##用語のイメージ
- Image
- オブジェクト指向で言うと クラス
- ubuntu, centos, ...
- Container
- オブジェクト指向で言うと インスタンス
- Imageから生成する箱!
- Dockerfile
- 環境
- ライブラリやミドルウェアのインストールを記述
Dockerfileはほぼ自分で書くことはなく先人たちが
公開してくれている!!
Docker が何か雰囲気はわかったので次はとりあえずインストールしてみましょう.
##インストール
Macの場合 Dockerのインストールは簡単です.
DockerHubへアクセスして, インストールするだけです.
その際, アカウント登録を求められるので登録お願いします.
docker のインストールだけする場合, 無くてもできる方法があるのですが
あった方が便利なのでここで登録することをお勧めします.
下記のコマンドでインストールされているか確認!
$ docker version
Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:21:11 2020
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.8
API version: 1.40 (minimum version 1.12)
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:29:16 2020
OS/Arch: linux/amd64
Experimental: false
こんな感じで何か表示されていたら成功です!
次はDockerを用いて環境構築しましょう.
環境構築
ここではDockerを用いてubuntuの環境を作成しようと思います
(コマンドは最後にまとめています)
環境の検索
// ubuntuの環境の検索
$ sudo docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 10744 [OK]
dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 414 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 245 [OK]
consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 214 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 107 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 98 [OK]
neurodebian NeuroDebian provides neuroscience research s… 68 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 50 [OK]
ubuntu-debootstrap debootstrap --variant=minbase --components=m… 44 [OK]
......
コマンド以外にも公式サイトからでも検索できます
いろいろあるみたいですが, 今回は通常の一番上のものを利用します
環境(image)をpull
下記のコマンドでimageをpullできます
一応pullできたか確認もします.
//imageをpull
$ sudo docker pull ubuntu
//持っているimageを確認
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 4e5021d210f6 3 weeks ago 64.2MB
これだけでubuntuの環境の作成が終了です
ものすごく楽
次は実際にこの環境を使っていきましょう
##簡単な操作方法
作成した環境は下記のコマンドで利用できます
// sudo docker run [image] [コマンド]
$ sudo docker run ubuntu echo "Hello World"
実行するコマンドはなんでも良いのですが
今回は echo コマンドで "Hello World"を表示させています
次は実際に作成した環境の中に入っていきましょう
// sudo docker run -i -t [image] /bin/bash
$ sudo docker run -i -t ubuntu /bin/bash
//これで抜けることができます
$ exit
ここでは -itのオプションは説明しません, 気になった方は
Docker 日本語リファレンス へ行って勉強しましょう!!
このコマンドによりubuntu上のbashを起動しました
適当に ls とか cd とかして仮想環境できた!!
って気分を味わってください
次に自分で新しいimageを作成してみましょう
##imageの作成
下記のコマンドを打って見てください
//現在起動中のコンテナの確認
$ sudo docker ps
//起動していたコンテナも確認 (かこの物も見れる)
$ sudo docker ps -a
//上位5個表示
$ sudo docker ps -a -n=5
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4edd289ec92 ubuntu "/bin/bash" 7 minutes ago Exited (0) 7 minutes ago romantic_keller
bcc354262376 ubuntu "echo aiueo" 8 minutes ago Exited (0) 8 minutes ago loving_meitner
874c9664e320 ubuntu "ls" 8 minutes ago Exited (0) 8 minutes ago nice_spence
98e0bef0af52 ubuntu "ls" 15 minutes ago Exited (0) 15 minutes ago cool_chaum
6654170fc31f ubuntu "cd" 15 minutes ago Created quirky_kilby
現在立ち上げているコンテナはないため, 1個目のコマンドでは何も表示されないと思います.
2個目のコマンドは過去のものまで表示してくれるためいくつか表示されるとおもいます
見たらわかるやん!!って方もいるかとおもいますが, 表示されているものを説明すると
左からID, IMAGE, 行ったコマンド, どれくらい前に利用したかです
それでは実際にimageを作成してみましょう
下記のコマンドでimageを作成できます
この記事では上から二つ目の echo "aiueo" を実行するimageを作成します.
IDは全て打たなくてもいいです. (一意に決まれば)
今回の場合 bcc354262376の先頭の3文字bccだけを打っています
//sudo docker commit [ID] [new_image]
$ sudo docker commit bcc naoki/aiueo
//imageができてるか確認
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
naoki/aiueo latest 57c64991d8df 2 minutes ago 64.2MB
$sudo docker run naoki/aiueo
aiueo
しっかり実行できましたか??
##Dockerfile でimage作成
docker commitは, イメージを簡単に拡張できます.
しかし,チーム開発の際共有とかが大変なので, dockerfileを用いてimageの作成をします.
では, 実際にDockerfileを使ってimageを作成しましょう
$ mkdir Docker
$ cd Dcoker
$ touch Dockerfile
//適当なエディタでDockerfileを開いてください
下記のものをコピーしてください
#どのimageを元にしたか
FROM ubuntu
#作成者の情報
MAINTAINER Naoki Osako <email@exsample.com>
#build時に実行
RUN echo "now building..."
#run時に実行
# ["echo", "now running..."]=echo "now runnning" 慣習的にこの書き方をするらしい
CMD ["echo", "now running..."]
これを実行することで, ubuntuのイメージを更新することができます
まだ, よくわからないと思うのでとりあえず実行してみましょう
//buildできる (.はカレントディレクトリ 忘れないように)
sudo docker build -t ubuntu .
//runできる
sudo docker run ubuntu
now running...
ubuntuのimageが更新されているのがわかりましたか??
runをするだけでDockerfileに書かれているCMDを実行することができます
わかりにくい方はCMDの中身を ["echo", "hogehoge"]などに変えてもう一度build, runをやってみてください
imageが更新され出力される内容が変わっているとおもいます.
##よく使うコマンドまとめ
今回紹介していないコマンドいくつかあります
//imageを探す
$ sudo docker search [探したいもの]
//pull
$ sudo docker pull [image]
//image一覧
$ sudo docker images
//設定見る
$ sudo docker inspect [image]
//消す
$ sudo docker rmi [image]
//実行
$ sudo docker run [image] [CMD]
//実行中のコンテナ一覧
$ sudo docker ps
//終了したものを表示
$ sudo docker ps -a
//上位5のコンテナ表示
$ sudo docker ps -a -n=5
//コンテナ消す
$ sudo docker rm [image]
//実行中のコンテナを止める
$ sudo docker kill [image]
//再び実行させる
$ sudo docker start [image]
//bash起動
$ sudo docker run -i -t [image] /bin/bash
//commitでimage作成
$ sudo docker commit [ID] [new_image] (naoki/hello)
$ sudo docker run -i -t [new_image] /bin/bash
//Dockerfileを用いてimage更新
$ sudo docker build -t [image] .
//run
$ sudo docker run [image]
##最後に
ここまで記事をみてくださりありがとうございました.
ここに書いてあることは表現に誤りがあるかもしれません.
より詳しく勉強したい方は, 英語, 日本語の公式リファレンスをご覧ください.
どこよりも正確な情報が得られるとおもいます.
この記事でなんとなく雰囲気がわかった方は是非ご覧ください/
##参考文献
Docker 日本語リファレンス