Dockerエンジンをゼロから構築してみた 2023/10/18 渡辺 源
アジェンダ • はじめに • Dockerエンジン導入 • コンテナイメージ登録 • コンテナへのアクセス • 感想
はじめに • 自己紹介 オンプレ、クラウド(サーバーレス)の基盤の設計・運用 ここ最近はクラウド案件が増えてきてる。 特にコンテナは必須になってる。
はじめに • 今回、やったこと Linux(CentOS9)上にDockerエンジン構築 コンテナイメージ( nginx )を作成し、Dockerエンジン上で稼働 コンテナ内部へのアクセス ・今回、やってないこと・発表から割愛したもの コンテナイメージの移設・運用 Dockerfile作成 冗長化構成(クラスター)を考慮した設計、運用 Linuxの設計、運用 k8s
Dockerエンジン導入 • Linux環境の準備 今回はCentOS9をDockerエンジン導入先にした。 検証時の最新版のStream release 9 [root@centos ~]# cat /etc/system-release CentOS Stream release 9 CentOS等のRedHat系LinuxにはDockerエンジン互換のpodmanが導入 されている。 Dockerエンジンとの競合を防ぐため、今回は削除する。 [root@centos ~]# dnf -y remove podman runc
Dockerエンジン導入 • Dockerエンジンインストール yumリポジトリ設定 [root@centos ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo [root@centos ~]# sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/docker-ce.repo Dockerパッケージ導入 [root@centos ~]# dnf --enablerepo=docker-ce-stable -y install docker-ce ※dnf…yumの後継となるパッケージ管理ソフト CentOS8以降はdnfが使用される。
Dockerエンジン導入 • Dockerエンジンインストール サービス登録(systemdに登録) [root@centos ~]# systemctl enable --now docker Dockerエンジンパッケージ確認 [root@centos ~]# rpm -q docker-ce docker-ce-23.0.1-1.el9.x86_64 以上でLinuxへの導入は完了
Dockerエンジン導入 • Dockerのバージョン確認 [root@centos ~]# docker version Client: Docker Engine - Community Version: 23.0.1 API version: 1.42 Go version: go1.19.5 Git commit: a5ee5b1 Built: Thu Feb 9 19:49:35 2023 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 23.0.1 API version: 1.42 (minimum version 1.12) Go version: go1.19.5 Git commit: bc3805a Built: Thu Feb 9 19:46:32 2023 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.18 GitCommit: 2456e983eb9e37e47538f59ea18f2043c9a73640 runc: Version: 1.1.4 GitCommit: v1.1.4-0-g5fd4c4d docker-init: Version: 0.19.0 GitCommit: de40ad0
コンテナイメージ登録 • イメージ作成前 Dockerイメージ一覧 [root@centos ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE test-httpd v1 c1c691c533d0 5 months ago 262MB node-app v1 78ed242958ec 6 months ago 169MB public.ecr.aws/ubuntu/ubuntu 18.04 3941d3b032a8 7 months ago 63.1MB ※スクリーンショットは試行時に作成したイメージがあるが、 インストール直後は何もない。
コンテナイメージ登録 • 最新イメージからのインストール 最新イメージ(CentOS)にhttpサーバ(nginx)をインストール [root@centos ~]# docker run quay.io/centos/centos:stream9 /bin/bash -c "dnf -y install nginx" Unable to find image 'quay.io/centos/centos:stream9' locally stream9: Pulling from centos/centos a4542beb2221: Pull complete Digest: sha256:aeca8aee6df1e62c25f306396dc6631520dc350fe90d48cf30f45272ffeb2c61 Status: Downloaded newer image for quay.io/centos/centos:stream9 CentOS Stream 9 - BaseOS 3.0 MB/s | 7.9 MB 00:02 CentOS Stream 9 - AppStream 4.4 MB/s | 18 MB 00:04 CentOS Stream 9 - Extras packages 18 kB/s | 14 kB 00:00 Dependencies resolved. ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: nginx x86_64 1:1.22.1-2.el9 appstream 39 k Installing dependencies: acl x86_64 2.3.1-3.el9 baseos 73 k ~~~~~~~~~(中略)~~~~~~~~~~~~~~~~~~~~~~~~~~ Verifying : nginx-filesystem-1:1.22.1-2.el9.noarch systemd-pam-252-18.el9.x86_64 util-linux-2.37.4-15.el9.x86_64 Complete! 26/26 systemd-rpm-macros-252-18.el9.noarch util-linux-core-2.37.4-15.el9.x86_64 最新イメージで指定しているCentOSは、 Dockerエンジンを導入したCentOSとは別物。 コンテナイメージのベースにCentOSを指定し ている。
コンテナイメージ登録 • イメージ作成後の登録 httpサーバー(nginx)をインストール後のコンテナ稼働状況 [root@centos ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5797acddb008 quay.io/centos/centos:stream9 "/bin/bash -c 'dnf -…" 5 minutes ago Exited (0) 5 minutes ago strange_wilson この時点ではイメージは登録されてないのでイメージを登録 [root@centos ~]# docker commit 5797acddb008 cnetos-nginx sha256:790567f598c4856ec8af18516e8c344a44cdcce1bd906b115853aac47c03ed5c
コンテナイメージ登録 • イメージ登録後 httpサーバ(nginx)イメージ確認 [root@centos ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE cnetos-nginx latest 790567f598c4 About a minute ago 259MB quay.io/centos/centos stream9 0dc5b436b6ca 8 hours ago 155MB test-httpd v1 c1c691c533d0 5 months ago 262MB node-app v1 78ed242958ec 6 months ago 169MB public.ecr.aws/ubuntu/ubuntu 18.04 3941d3b032a8 7 months ago 63.1MB [root@centos ~]# イメージの登録が確認出来た。
コンテナへのアクセス
• httpサーバのコンテナ起動
httpサーバ(nginx)を起動
[root@centos ~]# docker run -t -d -p 8081:80 cnetos-nginx /usr/sbin/nginx -g "daemon off;"
205aeaa9172b158349a762675d17a332087c4b7ea9691d0aced41114e7c3d810
コンテナ起動の確認
[root@centos ~]# docker ps
CONTAINER ID IMAGE
COMMAND
CREATED
STATUS
PORTS
NAMES
205aeaa9172b cnetos-nginx "/usr/sbin/nginx -g …" About a minute ago Up About a minute 0.0.0.0:8081->80/tcp, :::8081->80/tcp sleepy_bhaskara
コンテナ内にhttpアクセス確認用ページを作成(コンテナ環境へ接続)
[root@centos ~]# docker exec 205aeaa9172b /bin/bash -c 'echo "nginx on Docker Container" > /usr/share/nginx/html/index.html'
※docker execにてコンテナ内部(今回はnginxがインストールされたCentOSコンテナ)に対してコマンドを実行し、
index.htmlファイルを作成(リダイレクト)している。
コンテナへのアクセス • コンテナ上のhttpサーバへアクセス curlコマンドで確認用ページを表示 [root@centos ~]# curl 10.16.10.229:8081 nginx on Docker Container コンテナ内にアクセスして作成したページを確認
感想 • 得られた事 1. 2. 3. 4. 5. Dockerの基本的な仕組み 構築する段取り コンテナの基本的な操作 自前でDockerエンジンを導入するにはLinuxの知見は不可欠 クラウド(フルマネージドサービス)の利便性を痛感 • さらに検証したい事 1. 実運用に耐える設計手法(OS設計・冗長化等々) 2. 定期的なアップデートの運用(継続的なDockerアップデート) 3. k8sでの運用
ご清聴ありがとうございました。