💾

KVM ゲストマシン立ち上げ時の実行コマンド一覧

2024/08/08に公開

0. INTRODUCTION

DataScience用dockerコンテナを立ち上げるため、KVM のゲストマシン立ち上げ時に実施するプロセスをまとめた
ホストOSのインストールや、(ホスト側での)KVMのインストールは対象外とする。

0.1. Environment

  • host OS: ubuntu 24.04 LTS Desktop
  • VM hypervisor: KVM
  • guest OS: ubuntu 24.04 LTS Server

0.2. Prerequisite

本記事では、以下の前提条件のもと記載を進める。読者の環境によってはIPやユーザー名が変わるため、適宜読み替えて実施のこと

  • guest OS のユーザー: bigbrother
  • NFS server: 192.168.122.1:/loc0/kousuke/repositories
  • Zenn の編集用ディレクトリ: /loc0/bigbrother/repositories/0015_zenn/

1. apt update & upgrade

sudo apt update
sudo apt upgrade

2. NFS のマウント

2.1. マウント先ディレクトリの作成

sudo mkdir -p /loc0/bigbrother/repositories
sudo chown -R bigbrother:bigbrother /loc0/bigbrother/
ls -ld /loc0/bigbrother/repositories

2.2. nfsクライアントパッケージの導入

sudo apt install nfs-common

2.3. マウント

sudo mount -t nfs 192.168.122.1:/loc0/kousuke/repositories /loc0/bigbrother/repositories/

3. npm, zenn-cli のインストール

3.1. npmのインストール

sudo apt install npm

3.2. zenn 編集用 ディレクトリへの移動、ならびに古い設定ファイルの削除

cd /loc0/bigbrother/repositories/0015_zenn
rm package-lock.json package.json  

3.3. zenn-cli のインストール

npm install  zenn-cli
  • 新規記事作成
npx zenn new:article

4. git repository の pull

4.1. ssh key の作成

cd /home/bigbrother/.ssh/
ssh-keygen -t rsa -C [github に登録してあるメールアドレス]

pass phrase を聞かれるが、今回は設定せずからのまま Enter key を押下

$ ssh-keygen -t rsa -C [XXX@yyy.com]

Generating public/private rsa key pair.
Enter file in which to save the key (/home/bigbrother/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/bigbrother/.ssh/id_rsa
Your public key has been saved in /home/bigbrother/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:hogehoge [XXX@yyy.com]
The key's randomart image is:
+---[RSA 3072]----+
|   .....  .....  |
|   .....  .....  |
|   .....  .....  |
|   .....  .....  |
|   .....  .....  |
|   .....  .....  |
|   .....  .....  |
|   .....  .....  |
+----[SHA256]-----+

ファイルの確認、並びにセキュリティのため、オーナーのみ読書可能な状態にしておく

ls -altr
chmod 600 id_rsa.pub 
ls -altr

出力結果

$ ls -altr

total 16
...
-rw-r--r-- 1 bigbrother bigbrother  587 Aug  8 05:34 id_rsa.pub
...

$ chmod 600 id_rsa.pub 

$ ls -altr
total 16
...
-rw------- 1 bigbrother bigbrother  587 Aug  8 05:34 id_rsa.pub
...

4.2. id_rst.pub の内容の github ssh-key への登録

id_rsa.pub の内容を出力する

cat ~/.ssh/id_rsa.pub 

rsa の内容のうち、 "[github に登録してあるメールアドレス]" については除外して、github ssh-key に登録、メールアドレス直前の空白も除外し登録する

ssh-rsa LOIOYOJYTYoMIUHLIUGIFYLJHgJHFKUGFFYKGFLJHGLyG (....) = [github に登録してあるメールアドレス]

4.3. git config の設定

以下を設定する

  • ユーザー名の設定
  • メールアドレスの設定
  • デフォルトブランチの名称設定("main" に設定)
git config --global [github に登録してあるユーザー名]
git config --global [github に登録してあるメールアドレス]
git config --global init.defaultBranch main
cat ~/.gitconfig 

出力結果

$ cat ~/.gitconfig 

[user]
	name = [github に登録してあるユーザー名]
	email = [github に登録してあるメールアドレス]
[init]
	defaultBranch = main

4.4. git の開始、並びにpull

cd /loc0/bigbrother/repositories/0015_zenn
git init
git remote add [remote_repository_name] git@github.com:[github に登録してあるユーザー名]/[remote_repository_name].git
git pull [remote_repository_name] main

出力結果(2回目の実行結果なので、Already up to date. と出ている)

$ git pull 0015_zenn main

The authenticity of host 'github.com (20.27.177.113)' can't be established.
ED25519 key fingerprint is SHA256:hogehoge
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
From github.com:[github に登録してあるユーザー名]/[remote_repository_name]
 * branch            main       -> FETCH_HEAD
Already up to date.

5. docker の設定

5.1. 作業用ディレクトリへの移動

cd ~
mkdir -p docker/0015_zenn
cd docker/0015_zenn
pwd
ls -altr

5.2. docker-composed.yaml の作成

vi docker-compose.yaml 

ファイルの中身は以下の通り

services:
  # サービス名を'notebook_0015'に指定、他のコンテナも立ち上げる際に別のdocker-composeを記載することになるが、コンテナ間でサービス名は一意になるようにする
  notebook_0015:
    # Dockerfileを指定(docker-compose.ymlと同ディレクトリ)
    build:
      context: .
      dockerfile: Dockerfile
    # ポート番号を指定
    ports:
      - "10015:8888" ## ポート番号は任意のものを記載
    environment:
      - JUPYTER_ENABLE_LAB=yes # Jupyter Labを有効化
      - TZ=Asia/Tokyo # タイムゾーンを指定
    # ホストとコンテナでデータ共有するためにworkフォルダをマウント
    volumes: ## volumes 名もコンテナ間で一意になるようにする。重複した場合は先に立ち上げたvolumes名称が割り当てられる
      - repository_0015:/home/jovyan/work ## NFSマウントを行うため、Volumesのエイリアスを作成する
    # トークン認証を無効化
    command: start-notebook.sh --NotebookApp.token=''

volumes:
  repository_0015:
    driver_opts:
      type: nfs
      o: "addr=192.168.122.1,soft,nfsvers=4" ## NFS の設定。ここの部分はNFS Server 側の設定と一致させる
      device: ":/loc0/kousuke/repositories/0015_zenn" ## NFS の設定。ここの部分はNFS Server 側の設定と一致させる

5.3. Dockerfile の作成

vi Dockerfile

ファイルの中身は以下の通り。latest 指定による container image の変更を避けるため、docker image のダイジェストを指定している

# ベースイメージとしてjupyter/datascience-notebookの最新版を使用

## # latest @ 2024/08/06
## FROM jupyter/datascience-notebook@sha256:476c6e673e7d5d8b5059f8680b1c6a988942a79263da651bf302dc696ab311f2

## # x86_64-ubuntu-22.04 latest @ 2024/08/06
FROM jupyter/datascience-notebook@sha256:98c2b44b4e44e044a8670ac27b201704e5222f8a7d748eb7cfd94a2cdad52e7d

# 以降のRUNコマンドを実行するためにユーザーをrootに変更
USER root

# jovyanユーザーに対してパスワードなしでsudoを許可する設定を/etc/sudoersに追加
RUN echo "jovyan ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

# ユーザーをjovyanに戻す
USER jovyan

5.4. docker-compose によるコンテナの起動

current directory に docker-compose.yaml が格納されているディレクトリかどうか確認する

pwd
ls -altr

出力結果

$ pwd

/home/bigbrother/docker/0015_zenn

$ ls -altr

total 16
drwxrwxr-x 3 bigbrother bigbrother 4096 Aug  8 05:46 ..
-rw-rw-r-- 1 bigbrother bigbrother 1057 Aug  8 05:47 docker-compose.yaml
-rw-rw-r-- 1 bigbrother bigbrother  670 Aug  8 05:47 Dockerfile
drwxrwxr-x 2 bigbrother bigbrother 4096 Aug  8 05:47 .

docker-composed により container を起動する(初回は docker image を pull するため時間がかかる)

sudo docker-compose up -d

起動結果を確認する

sudo sudo docker-compose ls
sudo docker container ps

以下のように、起動したコンテナが表示されれば良い

$ sudo docker-compose ls
 
NAME                STATUS              CONFIG FILES
0015_zenn           running(1)          /home/bigbrother/docker/0015_zenn/docker-compose.yaml
bigbrother@mandam:~/docker/0015_zenn$ sudo docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED       STATUS                 PORTS                                         NAMES
620c2adf130c   0015_zenn-notebook   "tini -g -- start-no…"   3 hours ago   Up 3 hours (healthy)   0.0.0.0:10015->8888/tcp, :::10015->8888/tcp   0015_zenn-notebook-1
GitHubで編集を提案

Discussion