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の環境を汚すことなく開発をすることができ、非常に便利なのでぜひ使用してみてください。
記事の内容は理解できましたか?