今度は客先でコンテナ勉強会
今日すること
こんにちはふるてつです。
最近客先にて勉強会がスタートしまして、Dockerを勉強することになりました。
備忘録として勉強した内容や使用したコマンドなどを公開できる範囲で書いていきたいと思います。
まずは入門ということでこちらのサイト「入門Docker」を勉強します。
https://y-ohgi.com/introduction-docker/
今日は「はじめに」と「コンポーネント」の image までを勉強しました。
1. はじめに
1-1. Dockerとは
まずはDockerとは
Dockerはコンテナと呼ばれる仮想化のための技術になります。
ちなみにわたしはVirtualBoxの経験はあるのですが、Dockerはほぼありません。
ではなぜDockerを使うのでしょうか?
理由は3つあります。
1つめはポータビリティからです。
どの環境でも動くポータビリティを保証されています。
2つ目はオーバヘッド。
DockerはLinuxカーネルの機能を用いて1プロセスとして隔離された環境を実現します。
そのため仮想化レイヤーが少なく、VMと比較して少ないオーバーヘッドで環境を実現することができます。
3つめはImmutable Infrastructure
インフラを不変なものとして扱うのがImmutable Infrastructureというアプローチです。
1-2. VMとDocker
VMとDockerはなにがちがうのでしょうか。
VMとDockerはどちらも隔離された環境を提供するための 仮想化技術 です。
結論から言うと、VMは コンピュータ自体を仮想化するのに対して、Dockerは プロセス の仮想化を行います。
1-3. Hello Docker !
まずはDockerコマンドを使用してnginxサーバーを構築してみます。
本サイトでは「Play with Docker」を使用するように書いてありますが、いったんローカルのDockerで試します。
わたしはWindowsを使用していますので「Docker for Windows」を使用します。
docker run -P nginx
このコマンドは「nginxを起動( docker run nginx )し、設定されているポートを公開( -P )。」という意味になります。
ブラウザで32768番ポートにアクセスhttp://localhost:32768
するとnginxの画面が表示されます。
nginxを停止するときはCtrl
+ c
です。
このくらいはさすがにしたことがありますけど、言われたおりにしました。
2. コンポーネント
1. image
Imageは "環境のスナップショット" としての役割を持っています。
例えばCentOSやUbuntuやAlpineなどのOS、NginxやMySQLのようなソフトウェア、PHPやRubyのようなランタイムなどの環境を提供してくれます。
DockerではUbuntuのようなOSも立ち上げることも可能です。
Docker Image はDockerの公式が DockerHub と呼ばれるサービス上で様々なOS・ソフトウェアを公開しています。
まずはUbuntuのDocker ImageをDockerHub上から取得します。
docker pull ubuntu
わたしのマシンでは下記のようなログが表示されました。
最後に:latest
とあるのでUbuntsu最新バージョンのDocker imageがダウンロードされたようです。
docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
7413c47ba209: Pull complete
0fe7e7cbb2e8: Pull complete
1d425c982345: Pull complete
344da5c95cec: Pull complete
Digest: sha256:c303f19cfe9ee92badbbbd7567bc1ca47789f79303ddcef56f77687d4744cd7a
Status: Downloaded newer image for ubuntu:latest
docker run
コマンドで先ほど取得したImageを起動することができます。
下記のようにrun
コマンドの引数としてcat /etc/hosts
を渡します。
docker run ubuntu cat /etc/issue
すると下記のような結果が返ってきます。
Ubuntuが起動し/etcにあるissueファイルの中身"Ubuntu 18.04.2 LTS"が表示されました。
最後に変な改行コードのようなものが出てきましたがそこは気にしない。
Macだと出ていないのでWindowsだけの現象と思いますけど。
docker run ubuntu cat /etc/issue
Ubuntu 18.04.2 LTS \n \l
bash
のような対話的な入力が必要なプロセスも実行が可能です。
対話的に使用するためには-i -t
オプションを使用します。
docker run -i -t ubuntu bash
実行すると下記のようにUbuntuのコマンド入力待ちになりました。
なるほど。
docker run -i -t ubuntu bash
root@d9dddcfe7a04:/#
最後にtag
の使用ですが基本的にはバージョンの指定に使用されるようです。
Pythonの2.7を使いたい場合は公式イメージで2.7がホストされているか確認します。
https://hub.docker.com/_/python
2.7 というタグが存在することが確認できました。
そこでdocker run python:2.7 python --version
を実行します。
docker run python:2.7 python --version
Python 2.7.16
Python 2.7.16のイメージが起動されそのバージョンが返ってきました。
感想
勉強した「入門Docker」の内容をそのまままとめたような内容になりました。
次回以降も若干同じ感じになりそうですが、こうやってブログに書くとわりと頭に残るのでこういう感じも良いかなと思いました。
それではまた