1. ホーム
  2. コース一覧
  3. LinuC Level1 v10.0 対策コース(パート1)
  4. 仮想マシンとコンテナの操作方法

中級

LinuC Level1 v10.0 対策コース(パート1)

LinuC Level1 v10.0 対策コース(パート1)6/39

仮想マシンとコンテナの操作方法

こちらの記事では仮想マシンとコンテナの起動や停止などの操作方法について解説します。

※筆者の環境はCentOSです。

virshとは

KVM (Kernel-based Virtual Machine : Linuxカーネル上で動作する仮想化技術)上の仮想マシンの操作を行うコマンドです。

virshコマンドのセットアップ方法

1. 必要なツールをインストールします。

yum update -y && yum install -y qemu-kvm libvirt virt-install wget

2. 仮想化環境の管理用デーモンであるlibvirtdを起動します。

systemctl start libvirtd

# システムが立ち上がった際に自動で起動したい場合はこちらのコマンドを使用
systemctl enable libvirtd

3. virshコマンドが使用できるかを確認してください。

virsh list

virshコマンドが使用できるようになると以下のような表が表示されます。

Id   Name   State
--------------------

仮想マシンの作成方法

仮想マシンを作成するために以下のコマンドを実行していきます。

# 仮想マシンに使用するOSのISOファイルを配置するディレクトリに移動(どこに配置しても大丈夫です)
cd /usr/local/src/
# ISOファイルを取得(今回は理化学研究所からCentOSのISOファイルを取得)
wget https://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
# 仮想マシンを作成(オプションの詳細については後述)
virt-install \
--hvm \
--name=centos \
--location=/usr/local/src/CentOS-7-x86_64-Minimal-2009.iso \
--disk path=/var/lib/libvirt/images/centos.img,size=1 \
--vcpus=1 \
--memory=1024 \
--graphics none \
--extra-args="console=tty0 console=ttyS0,115200n8"

主に使用するvirt-installのオプション

オプション説明
—hvm, -v完全仮想化
—name, -nゲストOSの名前の指定
—location, -lインストールするCD ROMまたはISOファイルの指定
—disk使用するストレージの指定
—disk pathストレージとして使用するファイルを指定(存在しない場合は新規作成)
—disk sizeストレージのサイズ(GiB)の指定
—vcpus仮想マシンに割り当てるCPUのコア数の指定
—memory, —ram, -r仮想マシンに割り当てるメモリ量(MiB)の指定
—graphicsグラフィカル
—cdrom, -cインストールするCD ROMまたはISOファイルの指定
—extra-argsその他の詳細な設定を指定 console=tty0 console=ttyS0,115200n8 : Linuxカーネルへのシリアル接続用パラメータ

上記のコマンドを実行すると仮想マシンのコンソールへアタッチされ設定画面が表示されます。

> の部分が入力値になります。

Installation

 1) [x] Language settings                 2) [!] Time settings
        (English (United States))                (Timezone is not set.)
 3) [!] Installation source               4) [!] Software selection
        (Processing...)                          (Processing...)
 5) [!] Installation Destination          6) [x] Kdump
        (No disks selected)                      (Kdump is enabled)
 7) [ ] Network configuration             8) [!] Root password
        (Not connected)                          (Password is not set.)
 9) [!] User creation
        (No user will be created)

タイムゾーンの設定

タイムゾーンを設定するため以下のように順番に数字を入力していきます。ただ、地域や場所を選択する際は仕様によって数字が異なる可能性があるため表示内容を読んで入力してください。

# タイムゾーンの設定を行うため2を指定
> 2

Time settings

Timezone: not set

NTP servers:not configured

 1)  Set timezone
 2)  Configure NTP servers

# 直接タイムゾーンの設定を行うために1を指定
> 1

Available regions
 1)  Europe                 6)  Pacific               10)  Arctic
 2)  Asia                   7)  Australia             11)  US
 3)  America                8)  Atlantic              12)  Etc
 4)  Africa                 9)  Indian
 5)  Antarctica
Please select the timezone.

# アジア(2)を指定
> 2

(省略)
 2)  Almaty                30)  Hovd                  57)  Pyongyang
 3)  Amman                 31)  Irkutsk               58)  Qatar
 4)  Anadyr                32)  Jakarta               59)  Qostanay
 5)  Aqtau                 33)  Jayapura              60)  Qyzylorda
 6)  Aqtobe                34)  Jerusalem             61)  Riyadh
 7)  Ashgabat              35)  Kabul                 62)  Sakhalin
 8)  Atyrau                36)  Kamchatka             63)  Samarkand
 9)  Baghdad               37)  Karachi               64)  Seoul
10)  Bahrain               38)  Kathmandu             65)  Shanghai
11)  Baku                  39)  Khandyga              66)  Singapore
12)  Bangkok               40)  Kolkata               67)  Srednekolymsk
13)  Barnaul               41)  Krasnoyarsk           68)  Taipei
14)  Beirut                42)  Kuala_Lumpur          69)  Tashkent
15)  Bishkek               43)  Kuching               70)  Tbilisi
16)  Brunei                44)  Kuwait                71)  Tehran
17)  Chita                 45)  Macau                 72)  Thimphu
18)  Choibalsan            46)  Magadan               73)  Tokyo
19)  Colombo               47)  Makassar              74)  Tomsk
20)  Damascus              48)  Manila                75)  Ulaanbaatar
21)  Dhaka                 49)  Muscat                76)  Urumqi
22)  Dili                  50)  Nicosia               77)  Ust-Nera

# 東京(73)を指定
> 73

インストール先の設定

# インストール先の設定を行うために5を指定
> 5

Installation Destination

[x] 1) : 1024 MiB (vda)

1 disk selected; 1024 MiB capacity; 1024 MiB free ...

# すでに設定してあるためcを指定
> c

Autopartitioning Options

[ ] 1) Replace Existing Linux system(s)

[x] 2) Use All Space

[ ] 3) Use Free Space

Installation requires partitioning of your hard drive. Select what space to use
for the install target.

> c

Partition Scheme Options

[ ] 1) Standard Partition

[ ] 2) Btrfs

[x] 3) LVM

[ ] 4) LVM Thin Provisioning

Select a partition scheme configuration.

> 1

Partition Scheme Options

[x] 1) Standard Partition

[ ] 2) Btrfs

[ ] 3) LVM

[ ] 4) LVM Thin Provisioning

Select a partition scheme configuration.

> c

ネットワークの設定

> 7

Network configuration

Wired (eth0) disconnected

Host name: localhost.localdomain

Current host name: localhost

 1)  Set host name
 2)  Configure device eth0

> 1

Enter new value for 'Host name' and press enter

> centos.local

Network configuration

Wired (eth0) disconnected

Host name: centos.local

Current host name: localhost

 1)  Set host name
 2)  Configure device eth0

> 2

Device configuration

 1) IPv4 address or "dhcp" for DHCP
    dhcp
 2) IPv4 netmask
 3) IPv4 gateway
 4) IPv6 address[/prefix] or "auto" for automatic, "dhcp" for DHCP, "ignore" to
    turn off
    auto
 5) IPv6 default gateway
 6) Nameservers (comma separated)
 7) [ ] Connect automatically after reboot
 8) [ ] Apply configuration in installer
Configuring device eth0.

> 7
> 8
> c
> c

Rootパスワードの設定

> 8

Please select new root password. You will have to type it twice.

Password: 
Password (confirm):

# ↑ 設定したいパスワードを入力

> yes

virshの使用方法

仮想マシンの作成が完了すると自動的に仮想マシンに接続されます。 ctrl + ] で一度ホストOSに戻り、以下のコマンドを実行するとシャットダウン中も含めた全ての仮想マシンの名前が表示されます。

virsh list --all

仮想マシンへ再度接続するには以下のコマンドのように仮想マシンの名前を指定して実行します。

virsh console centos

仮想マシンを停止するには以下のコマンドを使用します。

virsh shutdown centos
# 強制停止
virsh destroy centos

仮想マシンを起動するには以下のコマンドを使用します。

virsh start centos

Dockerとは

Dockerとはコンテナ技術を用いた仮想化によりアプリケーションの実行環境を管理するためのオープンソースソフトウェアです。

【利点】

  • 環境構築・破棄が容易
  • 作成した環境の配布が容易
  • 環境の設定をコードで管理することで同じ環境を構築することが容易

※コンテナについてや仮想マシンとコンテナの比較についての解説はこちらの記事をご参照ください。

Dockerのセットアップ方法

以下のコマンドを実行してDockerのインストールと起動を行なってください。

# Dockerをインストールするためのスクリプトを実行
curl -fsSL https://get.docker.com/ | sh
# Dockerを起動
systemctl start docker
# システムが立ち上がった際に自動で起動したい場合はこちらのコマンドを使用
systemctl enable docker

上記のコマンドを実行してセットアップが完了したら以下のコマンドを実行してみてください。command not foundと表示されずコマンドの説明一覧が表示されれば正常にインストールできています。

docker

Dockerを用いたコンテナの起動と停止

今回はDockerを用いてCentOS7を動かしてみます。

まずは以下のコマンドを使用して設計図であるDockerイメージをDocker Hubというサイトから取得します。

docker pull centos:centos7

上記のコマンドを実行できたら、本当にDockerイメージを取得することができたかを以下のコマンドで確認します。Dockerイメージの取得が成功していればDockerイメージ一覧が表示されます。

docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
centos        centos7   eeb6ee3f44bd   7 months ago   204MB

Dockerイメージを取得することができたので、次は取得したDockerイメージをもとに以下のコマンドを実行して実体であるDockerコンテナを起動します。

docker run -itd --name centos7 centos:centos7

docker run コマンドの主なオプションと説明

オプション説明
-i, —interactiveコンテナの標準入力にアタッチ
-t, —tty擬似TTYの割り当て
-d, —detachコンテナ内に入らず、バックグラウンド実行
—nameコンテナ名の指定

Dockerコンテナが起動できたらこちらも本当に起動できたか以下のコマンドを実行することで確認することができます。

docker ps
CONTAINER ID   IMAGE            COMMAND       CREATED         STATUS         PORTS     NAMES
61c24f4ee1ee   centos:centos7   "/bin/bash"   6 seconds ago   Up 5 seconds             centos7

上記のコマンドを実行したことで仮想環境であるDockerコンテナを起動できました。次は起動したDockerコンテナの中に入る方法として docker exec について説明します。元々 docker exec は指定したコンテナ内でコマンドを実行するためのコマンドですが、以下のように -it オプションと使用するシェルを指定することでコンテナの中で作業することができます。また、オプションで指定した -it の意味は docker run と同じです。

docker exec -it centos7 bash

上記のコマンドを実行することで自由にDockerコンテナ内で作業することができるようになりました。次は起動したDockerコンテナを停止するための方法について説明します。現在Dockerコンテナ内で作業しているため、以下のコマンドを実行してホストOSに戻ります。

exit

起動しているDockerコンテナを停止させるには以下のようにDockerコンテナの名前を指定することで停止させることができます。

docker stop centos7

実際にDockerコンテナが停止したかどうかは以下のコマンドで確認することができます。ここで注意したいのは -aオプションを指定する必要があるということです。-a オプションを指定しないと起動しているDockerコンテナの情報のみを出力してしまうからです。

docker ps -a

次に、停止しているDockerコンテナを起動する方法について説明します。こちらはDockerコンテナを停止させた時と同様に起動したいDockerコンテナの名前を指定することで起動できます。

docker start centos7

Dockerコンテナを起動することができたら以下のコマンドを実行して、起動したDockerコンテナの情報が表示されるか確認してみてください。

docker ps

まとめ

この記事では仮想マシンとコンテナの操作方法について解説しました。仮想化技術を使用することでホストOSの環境を汚すことなく開発をすることができ、非常に便利なのでぜひ使用してみてください。

記事の内容は理解できましたか?