はじめ
本記事について、LPIC-3 305(Virtualization and Containerization)の取得を目指して学習を始めました。
本記事は、実際に手を動かしながら学習した内容を記録したものです。
記者の筆者のスペックと状態
筆者の経歴は以下の通りです。
- 経験:IT業界4年以上(ネットワーク運用)
- 現在:転職活動をしながらニート中
- 技術スペック:Server/AWS/プログラミングは独学で勉強、NWは業務経験もあり、特に通信網やバックボーンなどの知識は一定ある。
※基本的にはIT業務でよく言われる、下流工程を経験。
なぜ学習をしようとしたのか?
結論、LPIC3を取得しようと考えて、取り組みに至った。
理由としては、転職活動をしている中で、自分に目標としているところの近道として取得をしようと考えたから。
ただ、取得だけだと良くないとも思っていることから、知識以外のちょっとしたスキルを身につける観点から、今回このような取り組みを行おうと考えた。
学習環境
使用ツール
・Mac
・Docker Desktop
・Docker Compose
学習方針
・無料で実践的な環境を構築
・手を動かして理解する
・コンテナ技術を中心に学習
LPIC-3 305の試験範囲
LPIC-3 305は以下の分野をカバーしています:
| トピック | 内 容 |
|---|---|
| 351.1 | 仮想化の概念とツール |
| 351.2 | Xen |
| 351.3 | QEMU |
| 351.4 | libvirt仮想マシン管理 |
| 351.5 | libvirtネットワークとストレージ |
| 352.1 | コンテナ仮想化の概念 |
| 352.2 | LXC |
| 352.3 | Docker |
| 352.4 | コンテナオーケストレーション |
| 352.5 | コンテナイメージ |
| 353.1 | クラウド管理ツール |
| 353.2 | Packer |
| 353.3 | cloud-init |
| 353.4 | Terraform |
LPI Linux Professional Institute LPIC-3 Virtualization and Containerization
参考URL:https://www.lpi.org/ja/our-certifications/lpic-3-305-overview/
実践①:Docker学習環境の構築
1. プロジェクトディレクトリの作成
mkdir lpic305-lab ##ディレクトリ作成
cd lpic305-lab ##作成したディレクトリへ移動
mkdir workspace ##ディレクトリ作成
2. docker-compose.ymlの作成
version: '3.8'
services:
lpic-lab:
image: ubuntu:22.04
container_name: lpic305-lab
privileged: true
volumes:
- ./workspace:/workspace
- /var/run/docker.sock:/var/run/docker.sock
working_dir: /workspace
ports:
- "8083:8083"
- "8084:8084"
- "8085:8085"
command: tail -f /dev/null
3. 環境の起動
docker-compose up -d #コンテナ起動
docker-compose exec lpic-lab bash #コンテナに入る
学んだポイント
docker-compose.ymlとDockerfileの違い
- docker-compose.yml:コンテナの起動設定ファイル
どのコンテナをどう起動するか。
ポート、ボリューム、ネットワークなどを定義を行う。
- Dockerfile:イメージを作成するテンプレート(レシピ的な意味だと理解しやすい)
カスタムイメージを作成する際に使用。
独自のアプリやツールを追加できる。
実践②:Docker基礎コマンド
基本ツールのインストール
apt update && apt upgrade -y ##アップデート
apt install -y vim git curl wget net-tools iputils-ping docker.io ##
イメージ操作
docker pull nginx #イメージダウンロード
docker images #イメージ一覧
docker rmi nginx #イメージ削除
コンテナ操作
docker run -d --name web nginx #コンテナ起動(バックグラウンド)
docker ps #コンテナ一覧
docker exec -it web bash #コンテナ内に入る
docker logs web #ログ確認
docker rm -f web #コンテナ強制削除
ポート公開
docker run -d --name myweb -p 8080:80 nginx
#ポート8080でWebサーバー起動
#http://localhost:8080にてブラウザアクセス
実践③:Podmanの学習
Podmanとは?
Podman = コンテナ管理ツール(Dockerの代替)
| 項目 | Docker | Podman |
|---|---|---|
| デーモン | 必要 | 不要 |
| root権限 | root権限が必要 | 一般ユーザ |
| セキュリティ | 攻撃リスクあり | Dockerより安全性は高い |
| Pod機能 | なし | あり(Kubernetes互換) |
Podmanのインストール
apt install -y podman #podmanインストール
podman --version #バージョン確認
基本コマンド
podman pull docker.io/library/nginx #イメージダウンロード(フルパス指定)
podman run -d --name podweb docker.io/library/nginx #コンテナ起動
podman ps #コンテナ一覧
podman run -d --name myweb -p 8082:80 docker.io/library/nginx #ポート公開
学んだポイント
PodmanはDockerと独立している。また使い分けも同じく以下に記載。
- Dockerがなくても動作する
- Dockerの代替品として設計
- コマンドはほぼ同じ(互換性重視)
- Red Hat系:Podmanが標準
- Ubuntu/Debian系:Dockerが主流 ※基本的にはDockerが主流
実践④:ネットワークとボリューム
ネットワーク作成
docker network create appnet #カスタムネットワーク作成
docker run -d --name web --network appnet nginx #ネットワークにコンテナを接続
docker run -it --rm --network appnet alpine sh #疎通確認
ボリュームでデータ永続化
docker volume create mydata #ボリューム作成
docker run -d --name db -v mydata:/data alpine sleep 3600 #ボリュームをマウント
docker exec db sh -c "echo 'Hello LPIC' > /data/test.txt" #データ保存
docker rm -f db #コンテナ削除後もデータが残る
実践⑤:カスタムイメージの作成
Dockerfileの作成
FROM nginx:latest
RUN echo '<h1>My Custom Nginx!</h1>' > /usr/share/nginx/html/index.html #HTMLを記載
EXPOSE 80
ビルドと実行
docker build -t mycustom:1.0 /workspace #イメージをビルド
docker run -d --name custom -p 8085:80 mycustom:1.0 #実行
上記できたら、「http://localhost:8085」にアクセスしブラウザで確認。
学んだポイント
DockerとYAMLの必要性や違いついて。
- yamlのみ:既存イメージをそのまま使う(コンビニ弁当)
- Dockerfile:独自のカスタマイズが可能(自分で調理)
Dockerfileが必要な場面としては、以下が想定できる。
- 独自のアプリを入れたい
- 追加ソフトをインストールしたい
- 環境構築にコストと時間をかけたくない
- 環境変数や設定を変更したい
- その他
今回は、Macの上にDockerコンテナを構築し、その上に再度DockerコンテナとPodmanコンテナを構築。さらにPodmanコンテナにnginxをインストールしたので、割と興味惹かれながら学習できた。
さいご
最後に、Dockerを学習のために遊んでみたが、理解と興味惹かれました。
目的としては、資格取得のためですが、結果的に領域の理解度の向上にも繋がったので、とても良かったです。