KVM ゲストマシン立ち上げ時の実行コマンド一覧
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
Discussion