忍者ブログ

ブランクがあるインフラエンジニアの備忘録

サーバ構築のメモ

Podmanでコンテナ環境を作成する

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Podmanでコンテナ環境を作成する

◇コンテナとは?
 VMwareやKVMと言った物理的なコンピューターの上で仮想マシンを作成する技術の他、仮想化技術の一つとして近年発達した技術に「コンテナ」があります。物理的なコンピューター上で稼働するOSのリソースの一部を隔離し、仮想的に作り出された実行環境の事です。
 コンテナを利用すれば実行環境や依存関係、ソースコード、設定情報などをパッケージ化して、分離出来ます。それにより、どこの環境でも同じように素早く、効率的にプロセスを実行することが出来ます。
 仮想マシンとの違いは、ハイパーバイザーが存在しない事で、コンテナがインストールされている環境であればどこでも同じように起動する事が出来ますし、サーバーを効率よく、無駄なく使用出来ます。OSが共有されているので、OSの起動を待つ事も無く数秒で起動し、OSだけでなくBin/Libも必要に応じて共有します。
 本稿ではCentOS8からDockerに代わり提供されているPodmanでコンテナ環境を作成してみます。
◇本稿のPodmanの設定
・ホスト名:Docker.server
・アドレス:192.168.128.105/24
・DNS:192.168.128.1
・ゲートウェイ:192.168.128.1
*本稿では単体で検証を行うのでルーターのDNSを使用しています。仮想マシンのDNSを使用する場合はそちらのIPアドレスを指定してください。
◇Podmanのインストール
 以下の様に、Dockerをインストールしようとすると、互換のコンテナツールであるPodmanがインストールされますが、PodmanでもDocker同等の機能がサポートされているので、Podmanをインストールします。
[root@Docker ~]# dnf install -y docker
メタデータの期限切れの最終確認: 0:29:53 時間前の 2022年06月14日 15時22分31秒 に 実施しました。
依存関係が解決しました。
================================================================================
 パッケージ           Arch          バージョン           リポジトリー     サイズ
================================================================================
インストール:
 podman-docker        noarch        2:4.1.0-4.el9        appstream         41 k
トランザクションの概要
================================================================================
インストール  1 パッケージ
(略)
インストール済み:
  podman-docker-2:4.1.0-4.el9.noarch
完了しました!
[root@Docker ~]# docker -v
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
podman version 4.1.0
・Dockerのイメージを作成する。
 先ずはイメージを設置するディレクトリを作成します。
[root@Docker ~]# mkdir ~/work
[root@Docker ~]# mkdir ~/work/docker_test/
[root@Docker ~]# cd ~/work/docker_test/
 続いて以下の様にコンテナ構成情報を記載したファイルを作成します。OSはubuntuを指定しています。
[root@Docker docker_test]# cat > Dockerfile
FROM ubuntu
RUN apt-get update -y && apt-get install -y apache2
COPY index.html /var/www/html
EXPOSE 80
CMD ["apachectl", "-D", "FOREGOUND"]  ←ここまで入力したら改行しCtrl+D
[root@Docker docker_test]# echo -n 'First Container' > index.html
[root@Docker docker_test]# cat index.html
First Container
[root@Docker docker_test]# ls
Dockerfile  index.html  ←この二つのファイルを作成した事を確認。
[root@Docker docker_test]# podman build -t docker_test .  ←イメージのビルド
STEP 1/5: FROM ubuntu
Resolved "ubuntu" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/ubuntu:latest...
Getting image source signatures
Copying blob 405f018f9d1d done
Copying config 2794180907 done
Writing manifest to image destination
Storing signatures
STEP 2/5: RUN apt-get update -y && apt-get install -y apache2
Get:1 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
(略)
STEP 3/5: COPY index.html /var/www/html
--> 4fc1e777c61
STEP 4/5: EXPOSE 80
--> 81c8bfbbdbf
STEP 5/5: CMD ["apachectl", "-D", "FOREGOUND"]
COMMIT docker_test
--> 58b97fed61e
Successfully tagged localhost/docker_test:latest
58b97fed61e645ccf9b28d4ca55b3f281a459fef841d60d60699513fbc505e43
 上記でイメージの準備ができました。以下のコマンドでイメージを確認します。
[root@Docker docker_test]# cd
[root@Docker ~]# podman images
REPOSITORY                TAG         IMAGE ID      CREATED         SIZE
localhost/docker_test     latest      58b97fed61e6  36 seconds ago  225 MB
docker.io/library/ubuntu  latest      27941809078c  7 days ago      80.3 MB
 以上でイメージを確認出来ました。
・コンテナの起動。
 続いてイメージからコンテナを起動します。
[root@Docker ~]# podman run --name docker_test -d -p 80:80 docker_test:latest
432a6806a2778fa0029416de8d4133d60a637226a055aeca3253adc3bf6b2b50
・コンテナが起動の確認します。
[root@Docker ~]# podman ps -a
CONTAINER ID  IMAGE                         COMMAND               CREATED         STATUS                     PORTS               NAMES
432a6806a277  localhost/docker_test:latest  apachectl -D FORE...  20 seconds ago  Exited (0) 20 seconds ago  0.0.0.0:80->80/tcp  docker_test
・イメージの操作
 イメージからコンテナを作成して bash を起動してログインします。
 -it オプションで作成したコンテナへのコマンド⼊⼒と実⾏結果の出⼒ができるようになります。
[root@Docker ~]# podman run -i -t docker_test:latest /bin/bash
root@10510ad7faaf:/#   ←この様に表示されればbashにログイン出来ました。
root@10510ad7faaf:/# cat /etc/issue
Ubuntu 22.04 LTS \n \l   ←Ubuntuがインストールされている事を確認。
root@10510ad7faaf:/# cat /var/www/html/index.html
First Container    ←ローカルで作成されたindex.htmlファイルの設置を確認。
root@10510ad7faaf:/# exit
exit          ←exit を実⾏するとコンテナは停⽌してホスト OS に操作が戻ります。
[root@Docker ~]#
 以下のコマンドでコンテナが停止している事が分かります。
[root@Docker ~]# podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
〇podman(docker)各種コマンド
・起動中のコンテナ⼀覧を表⽰
[root@Docker ~]# docker ps
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
・停⽌中も含めたコンテナ⼀覧を表⽰
[root@Docker ~]# podman ps -a
CONTAINER ID  IMAGE                         COMMAND               CREATED         STATUS                     PORTS               NAMES
432a6806a277  localhost/docker_test:latest  apachectl -D FORE...  17 minutes ago  Exited (0) 17 minutes ago  0.0.0.0:80->80/tcp  docker_test
10510ad7faaf  localhost/docker_test:latest  /bin/bash             16 minutes ago  Exited (0) 12 minutes ago                      hungry_euclid
1188cc052d13  localhost/docker_test:latest  /bin/bash             10 minutes ago  Exited (0) 9 minutes ago                       vibrant_shaw
・停⽌中のコンテナを起動
podman start [CONTAINER ID]
[root@Docker ~]# podman start 1188cc052d13
1188cc052d13
・コンテナの停止
 podman stop [CONTAINER ID]
[root@Docker ~]# podman stop 1188cc052d13
1188cc052d13
・コンテナの再起動
 podman restart [CONTAINER ID]
[root@Docker ~]# podman restart 1188cc052d13
1188cc052d13f6e175bd4992f9261446876e8f74b7cdb435f0bc00017b05d0b3
・コンテナの一時停止
podman pause [CONTAINER ID]
[root@Docker ~]# podman pause 1188cc052d13
1188cc052d13f6e175bd4992f9261446876e8f74b7cdb435f0bc00017b05d0b3
[root@Docker ~]# podman ps -a
CONTAINER ID  IMAGE                         COMMAND               CREATED         STATUS                     PORTS               NAMES
1188cc052d13  localhost/docker_test:latest  /bin/bash             20 minutes ago  Paused                                         vibrant_shaw  ←STATUSがPausedである事を確認出来ます。
・一時停止したコンテナの再開
podman unpause [CONTAINER ID]
[root@Docker ~]# podman unpause 1188cc052d13
1188cc052d13f6e175bd4992f9261446876e8f74b7cdb435f0bc00017b05d0b3
[root@Docker ~]# podman ps -a
CONTAINER ID  IMAGE                         COMMAND               CREATED         STATUS                     PORTS               NAMES
432a6806a277  localhost/docker_test:latest  apachectl -D FORE...  28 minutes ago  Exited (0) 28 minutes ago  0.0.0.0:80->80/tcp  docker_test
10510ad7faaf  localhost/docker_test:latest  /bin/bash             27 minutes ago  Exited (0) 23 minutes ago                      hungry_euclid
1188cc052d13  localhost/docker_test:latest  /bin/bash             21 minutes ago  Up 4 minutes ago                               vibrant_shaw ←STATUSがUPである事を確認出来ます。
・起動中のコンテナの強制停止
podman kill [CONTAINER ID]
[root@Docker ~]# podman kill 1188cc052d13
1188cc052d13
[root@Docker ~]# podman ps -a
CONTAINER ID  IMAGE                         COMMAND               CREATED         STATUS                      PORTS               NAMES
1188cc052d13  localhost/docker_test:latest  /bin/bash             23 minutes ago  Exited (137) 5 seconds ago                      vibrant_shaw   ←STATUSがExitedである事を確認出来ます。
・コンテナへ接続
podman attach [CONTAINER ID]
[root@Docker ~]# podman attach 1188cc052d13
root@1188cc052d13:/#
root@1188cc052d13:/# ps a
 PID TTY      STAT   TIME COMMAND
   1 pts/0    Ss     0:00 /bin/bash ←PID1で/bin/bash実行中
   4 pts/0    R+     0:00 ps a
 attach状態でexitするとコンテナも終了しますが、Ctrl+p,Ctrl+q を押すことでコンテナを終了させず、切断してホストOSに戻る事が出来ます。
root@1188cc052d13:/# ←Ctrl+p,Ctrl+q を押すと
[root@Docker ~]#  ←ホスト OS に戻りました。
[root@Docker ~]# docker ps
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE                         COMMAND     CREATED         STATUS             PORTS       NAMES
1188cc052d13  localhost/docker_test:latest  /bin/bash   31 minutes ago  Up 36 seconds ago              vibrant_shaw ←コンテナがUP状態である事を確認
[root@Docker ~]# podman exec -it 1188cc052d13 /bin/bash 新規にbin/bashでログイン。
root@1188cc052d13:/# ps ax
  PID TTY      STAT   TIME COMMAND
  1 pts/0    Ss+    0:00 /bin/bash
  4 pts/1    Ss     0:00 /bin/bash  ←PID1とは別のIDでログインしています。
  7 pts/1    R+     0:00 ps ax
 この状態でexitしてもPID4がexitされる為、コンテナは停止しません。
root@1188cc052d13:/# exit
exit
[root@Docker ~]# docker ps
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE                         COMMAND     CREATED         STATUS            PORTS       NAMES
1188cc052d13  localhost/docker_test:latest  /bin/bash   38 minutes ago  Up 8 minutes ago              vibrant_shaw ←コンテナがUP状態である事を確認出来ます。
・コンテナの削除
 稼働中のコンテナを終了後に削除します。
[root@Docker ~]# podman stop 1188cc052d13
1188cc052d13
 続いてpodman attach [CONTAINER ID]でコンテナを削除します。
[root@Docker ~]# podman rm 1188cc052d13
1188cc052d13f6e175bd4992f9261446876e8f74b7cdb435f0bc00017b05d0b3
[root@Docker ~]# podman ps -a
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES    ←コンテナの情報が無くなっている事が確認出来ます。
PR

コメント

プロフィール

HN:
のらくら
性別:
非公開
自己紹介:
介護と自身の手術でブランクが出来たインフラエンジニアの学習メモ。VirtualBOXで仮想サーバーを建て、GNS3でCiscoルーター&スイッチによるネットワークのエミュレーションもしています。GNS3ネットワーク内に仮想サーバーと連携させて、実際のネットワーク環境におけるサーバーをシミュレートする他、LinuC level3 300の対策もしています。

P R