LoginSignup
0
0

More than 1 year has passed since last update.

【随時更新】メモ〜Dockerとコンテナ【自分用】

Last updated at Posted at 2021-11-23

コンテナとは

OSの中に別のOSを作成する技術の一つ。

似たような概念として仮想化があげられる。

仮想化とコンテナの違い

仮想化ではホストOS上で仮想化ソフトを起動し、その上に立てられたゲストOSの中でプロセスが起動する。

この際、ライブラリ・コマンド・カーネルなどは全てゲストOS上に専用のものが作成され、プロセスからはそちらが参照される。

一方コンテナにおいてはライブラリやコマンドは都度作成されるものの、カーネルに関してはホストOSのものが参照される。

仮想化とコンテナを比較すると前者はホストOS>仮想化マシン>ゲストOS>プロセスという4段階になっているのに対し、後者ではホストOS>ライブラリやコマンド>プロセスという3段階となっている。

すなわち仮想化マシンを挟まないために処理が早くなるという特徴がある。

ライブラリ・コマンド・カーネルとは

コマンドとはlscdなどのターミナルコマンドのことを指す。

ライブラリはプロセスが起動するためのライブラリ群で、MacであればLibraryディレクトリに格納されている。

カーネルはコンピュータの基本的な操作を行うための機能を格納したライブラリ群であり(システムコールと呼ばれる)、コマンドに応じて呼び出され処理を行う。

つまり、プロセスが起動した際にはまずコマンドやライブラリが呼び出され、最終的にはシステムコールが実行されることになる。

Dockerとは

コンテナを簡単に作成するための機能の一つ。

通常であればコンテナの作成のためにはそのコンテナで使用されるコマンドやライブラリを定義・作成する必要がある。

Dockerと呼ばれるツールをインストールしDockerコマンドを使うことで、コンテナの作成に必要なコマンド・ライブラリの導入を簡単に行うことができる。

DockerHubとは

コンテナを作成するのに必要なコマンドやライブラリのセット(OSイメージ)が保管されているリポジトリのこと。

例えばLinuxOSであればCentOSやDebianなどのディストリビューションごとにOSイメージが用意されている。

Dockerfileとは

DockerHubから取り寄せたDockerイメージに追加の情報を付与するためのファイル。

例えばDocker上でCenstOSのコンテナを作りその中でphpアプリを走らせることを考えた場合、本来であれば以下の作業が必要になる。

  • CentOSのDockerイメージをもとにコンテナを作成する
  • コンテナの中に入る
  • サーバー(apacheなど)をインストールする
  • phpをインストールする
  • サーバーを起動する
  • 適当なphpファイルを作ってコンテナ上にコピーする
  • 8080番ポートにアクセスして動作確認をする

つまり、Dockerイメージにはコンテナの情報しかないため、実際の開発の際には追加で様々なプログラムが必要になりその都度ターミナルを走らせることになる。

Dockerファイルはこれらの一連のコマンドをファイルに記録したものであり、これをイメージ化してそれをもとにコンテナを作成することで必要な手順が全て自動で実行されるようになる。

詳細は以下。

Dockerコマンド達

dockerイメージのpull
% docker pull centos7:centos7
コンテナの作成
% docker run -it --name centos7 centos:centos7 
# M1Macで実行するときには以下のようにプラットフォームの指定が必要
% docker run -it -d --platform=linux/amd64 --name centos7 centos:centos7

# 必要なdockerイメージがpullされていなければ自動ダウンロードが入る
# --name centosは省略可能(コンテナ名をつけているだけ)
# -dはコンテナをデーモン(バックグラウンド)で起動するためのオプション(省略可能)
# 公式は docker run [オプション] --name コンテナ名 [イメージ名][タグ名] [コンテナ起動後に実行するコマンド]
コンテナに入る
% docker exec -it centos7 /bin/bash
# 成功するとプロンプトが以下のように変化する
[root@8d8ca2646e59 /]#
# @以下はコンテナID "/"はディレクトリ、"#"がプロンプト
起動しているコンテナの確認
% docker ps
# 結果
CONTAINER ID   IMAGE            COMMAND       CREATED          STATUS          PORTS     NAMES
8d8ca2646e59   centos:centos7   "/bin/bash"   50 minutes ago   Up 50 minutes             centos7

# -aオプションをつけることで停止中のコンテナも確認できるようになる
CONTAINER ID   IMAGE            COMMAND       CREATED          STATUS          PORTS            NAMES
8d8ca2646e59   centos:centos7   "/bin/bash"   54 minutes ago   Exited (137) 19 seconds ago   centos7
コンテナの停止
% docker stop コンテナ名またはID
コンテナの再開
% docker start コンテナ名またはID
dockerイメージの作成
% docker commit コンテナ名 イメージ名
>> sha256:33fd144ef6171206b545f23cafe6bb7c877df2386618c53e2e6011e0214b6284
dockerイメージの一覧表示
% docker images
>>
REPOSITORY                    TAG       IMAGE ID       CREATED          SIZE
test1                         latest    33fd144ef617   11 seconds ago   204MB
コンテナの削除
% docker rm コンテナ名もしくはID
Dockerイメージの作成・削除
# DockerfileというファイルからDockerファイルが作られる
% docker build -t dockerイメージ名 dockerイメージのパス

# イメージの削除
% docker rmi イメージ名
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0