Help us understand the problem. What is going on with this article?

【Docker修行①】基礎を把握して、これからの遥か遠い道のりのサーバー技術学習の体力作り

More than 1 year has passed since last update.
  • 1年にも満たないエンジニア生活のため、雲の上の存在だと思っていて距離を取っていた「Docker」の習得を目指す記事第一弾。
  • 「身分をわきまえる感情」が大きく欠落した私は、「自分にはまだ早いかな」という概念を持たず、すかさず飛びつき、気分に深く酔いしれる生活。
  • 今回は、仮想環境化技術の「Docker」の概要から各サーバーの起動までをしっかり抑えて、長い道のりの基盤作りをすることにしよう。

今回の目的やゴール

  • 概要や特徴を把握する。
  • 導入手順を把握する。
  • Hello World環境の作成と起動
  • ubuntu環境とNginx環境とMySQL環境の作成と起動
  • コンテナ内容確認や削除の基礎的なやり方
  • Doker fileやDocker Composeの概要把握
    • 今回はDocker fileやDocker composeを利用した環境作成は行わない。

概要

  • シンプルで軽量なコンテナ環境のことであり、Linux上で動作している。
    • コンテナとは、仮想OS環境のこと。
    • コンテナを使うことで、一台のコンピュータに、複数の環境を作成することができる。
    • コンテナ以外の仮想環境として、下記のような仮想マシンがある。
      • VMware
      • Virtual Box
      • Xen
      • KVM
    • コンテナと仮想マシンの違いは、下記。
      • 独立性重視の仮想マシン
      • 軽量性重視のコンテナ
  • 各環境毎の構成は下記。
    • 左が物理マシン型環境
    • 真ん中が仮想マシン型環境
    • 右がコンテナ型環境

test

  • 具体的な構成は下記。
    • 物理マシン : 1つのOSが動作して、その上で複数のプロセスが動作している。CPUやメモリなどのリソースを共有。
    • 仮想マシン : ハードウェアを分割後、複数の仮想コンピュータを作成する。CPU・メモリなどは、各仮想マシン独自のものとして認識。
    • コンテナ : 論理的に分割後、仮想Linuxを作成する。CPU・メモリなどは、コンテナから見ると各コンテナ独自のものとして認識。
  • コンテナと仮想マシンの違いは下記。
コンテナ 仮想マシン
起動速度 高速 低速
構築 シンプル 複雑
リソース消費 少ない 多い
OS Linux 自由

特徴

各マシン間のコンテナ稼働

  • アプリケーションや依存ファイルを1つのイメージにまとめることができるため、実行環境が同じであることが保証される。

最適な自動化

  • イメージの構築をコードとして記述することができるため、自動的にデプロイやビルドが可能。

バージョン管理

  • バージョン管理機能を提供していて、履歴や差分の更新等が可能。

再利用

  • イメージは、手動または設定ファイルからの自動作成で気軽に再利用できる
  • ベース環境を1個用意できたら、それを元にした別のアプリケーション環境の複数構築が可能。

共有

  • Docker Hubというクラウド上のサービスで、様々なイメージを提供しているため、コンテナ環境の共有が容易。
  • また、自分で作成したイメージをアップロードすることもできる。

インストール

Mac

Docker for Mac

  • こちらのサイトにいき、「Download」をクリックして、インストール。
  • ※インストール時は、Docker Hubアカウントでのログインが求められるため、登録をする。

Windows

Linux

  • ubuntuやcentOS等の各ディストリビューションごとに異なる。
  • 各インストール方法はこちらのサイトを参考。

チュートリアル

バージョン確認

  • ターミナル(コマンドプロンプト)を起動。
  • 下記のコマンドをうち、Dockerのバージョンを確認。
$ docker version
Client:
 Version:      XXXX
 API version:  XXXX

# 簡易的なバージョン確認の場合はこちら
$ docker -v
Docker version XXXX,build XXXX

Hello World環境作成

  • ターミナル(コマンドプロンプト)を起動
  • 下記のコマンドをうち、Hello World環境を作成。
$ docker run hello-world
-------------------
Hello from Docker.
  • 実行後のメッセージで、「Hello from Docker」が表示されれば、完了。
  • docker run」の動作の仕組みは下記。
    • 1. docker pull : 該当イメージが、ローカルにあるか確認して、なければリモート(Docker Hub)からダウンロード。
    • 2. docker create : 該当のコンテナ環境を作成
    • 3. docker start : 該当のコンテナ環境を実行

ubuntu起動

  • 下記のコマンドをうち、ubuntu環境を作成して、そのコンテナ環境にはいる。
$ docker run -i -t ubuntu /bin/bash
----------------------
root@XXXXX :/#
  • 下記のコマンドをうち、ubuntu起動を確認。
root@XXX :/# cat /etc/lsb-release
--------------------
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=XX.XX
  • テストフォルダとファイルの作成
root@XXX :/# mkdir test
root@XXX :/# ll
---------
test
---------
root@XXX :/# echo hello > test/hello.txt
root@XXX :/# cat test/hello.txt
---------
hello
  • 「Ctrl + D」でコンテナ終了

  • 下記のコマンドで、再度コンテナ起動。

$ docker run -i -t ubuntu /bin/bash
root@XXX :/# ll
------------
  • testフォルダがなくなっていればOK。

  • 再度「Ctrl + D」でコンテナ終了。

Nginxの起動

  • 下記のコマンドをうち、Nginxイメージでの起動。
$ docker run -p 8080:80 nginx
  • ブラウザを起動して、localhost:8080にアクセス。

  • ページ内に「Welcome to nginx」と表示されていれば、完了。

  • 「Ctrl + C」でWebサーバーの終了をする。

test

MySQLの起動

  • 下記のコマンドをうち、データベースサーバーを動かす。
# eオプションは、環境変数の指定。MUSQL_ROOT_PASSWORDを指定
# name オプションは、コンテナ名の指定。例では「db」と指定。
# dオプションは、コンテナのバックグラウンド動作指定。
$ docker run -d -e MYSQL_ROOT_PASSWORD=password --name db mysql
  • 下記のコマンドをうち、動作確認。
$ docker ps
  • コンテナIDや名前が設定されていれば、完了。

コンテナ内容確認や削除等の基礎

コンテナ状態確認

  • 下記のコマンドをうち、コンテナの状態を確認する。
# 起動コンテナの確認
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS    
XXXXXXXXX

# 終了コンテナも含めた全コンテナの確認
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS    
XXXXXXXXX

コンテナの終了

  • 下記のコマンドをうち、コンテナを終了する。
# 該当のコンテナの終了
$ docker kill コンテナID
# 全てのコンテナの終了
docker kill $(docker ps -a)

コンテナの削除

  • 下記のコマンドをうち、コンテナを削除する。
# 該当のコンテナを削除する
$ docker rm コンテナID
# 該当の複数コンテナを削除する
$ docker rm コンテナID コンテナID
# 全ての終了コンテナを削除する
$ docker rm $(docker ps -a -q)

Docker file

概要

  • コンテナーの構成や手順を記述することができるテキスト形式のファイル
  • このファイルをビルド(変換)して、自動的に環境を作成することができる。
  • コンテナ内で環境構築の作業をする必要がなくなる。
  • このファイルを作成しておけば、誰でも簡単に共有して、同じ環境を作成することができる。

docker-compose

概要

  • 複数のDockerコンテナを連携させて動作させるためのツール。
  • 設定ファイルをコードで記述することで、ウェブサーバーやデータベースサーバなど複数のコンテナを動作、連携して、ウェブアプリケーション環境などを簡単に構築・実行できる。

まとめ

  • 今回はDockerの概要や基礎の学習ということで、「サーバー技術に触れた優越感」にこの上なく浸りながら、記事を書く。
  • 「たくさん作っても大丈夫」という文言が、様々なサイトや文献に載っていたため、盲信して100個作成するという従順行為。
  • それでも軽量に動作する環境に、驚愕の感情よりも先に、作成数倍増をたくらむ、お構いなし行為。
  • 次回は、「Dockerfileを利用した環境作成」「docker-composeを利用した環境作成」を学習することにしよう。

参考サイト

参考テキスト

t_o_d
2年目のWebエンジニア。 沖縄在住。 よろしくお願いいたします。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした