おつかれさまです。Dです。
dockerってよく聞くんですが、実際に触ったことが無かったので
EC2で立てたAlmaLinux9にdockerをインストールして触ってみたいと思います。
内容
サーバー環境は新しめの「AlmaLinux9」で実施します。
# cat /etc/os-release
NAME="AlmaLinux"
VERSION="9.2 (Turquoise Kodkod)"
ID="almalinux"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.2"
PLATFORM_ID="platform:el9"
PRETTY_NAME="AlmaLinux 9.2 (Turquoise Kodkod)"
ANSI_COLOR="0;34"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:almalinux:almalinux:9::baseos"
HOME_URL="https://almalinux.org/"
DOCUMENTATION_URL="https://wiki.almalinux.org/"
BUG_REPORT_URL="https://bugs.almalinux.org/"
ALMALINUX_MANTISBT_PROJECT="AlmaLinux-9"
ALMALINUX_MANTISBT_PROJECT_VERSION="9.2"
REDHAT_SUPPORT_PRODUCT="AlmaLinux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.2"
まずはdockerのリポジトリを追加します。
# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
「docker-ce」ってやつがdockerを動かすみたいです。
インストールしていきます。
実行結果については長いので省略します。
問題無く完了すれば以下のように「Complete!」が出るはずです。
# dnf -y install docker-ce
~~
Installed:
container-selinux-3:2.205.0-1.el9_2.noarch containerd.io-1.6.24-3.1.el9.x86_64 docker-buildx-plugin-0.11.2-1.el9.x86_64 docker-ce-3:24.0.6-1.el9.x86_64
docker-ce-cli-1:24.0.6-1.el9.x86_64 docker-ce-rootless-extras-24.0.6-1.el9.x86_64 docker-compose-plugin-2.21.0-1.el9.x86_64 fuse-common-3.10.2-5.el9.x86_64
fuse-overlayfs-1.11-1.el9_2.x86_64 fuse3-3.10.2-5.el9.x86_64 fuse3-libs-3.10.2-5.el9.x86_64 iptables-libs-1.8.8-6.el9_1.x86_64
iptables-nft-1.8.8-6.el9_1.x86_64 libibverbs-44.0-2.el9.x86_64 libnetfilter_conntrack-1.0.9-1.el9.x86_64 libnfnetlink-1.0.1-21.el9.x86_64
libnftnl-1.2.2-1.el9.x86_64 libpcap-14:1.10.0-4.el9.x86_64 libslirp-4.4.0-7.el9.x86_64 policycoreutils-python-utils-3.5-1.el9.noarch
slirp4netns-1.2.0-3.el9.x86_64
Complete!
dockerのバージョンを確認してインストールされているか確認します。
ばっちり入ってますね。
# docker --version
Docker version 24.0.6, build ed223bc
何はともあれとりあえずdockerサービスを起動します。
# systemctl start docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
Active: active (running) since Tue 2023-09-19 11:19:38 UTC; 8s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 12236 (dockerd)
Tasks: 9
Memory: 30.0M
CPU: 350ms
CGroup: /system.slice/docker.service
mq12236 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
起動したらdockerコマンドが使えるので、試しに打ってみます。
以下のコマンドで実行中のコンテナが確認出来ますが、何も作っとらんので真っ白です。
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ということで、コンテナを作ってブラウザから簡単なページを表示させていきます。
まずはコンテナ実行に必要なイメージをダウンロードしていきます。
以下のコマンドでイメージがあるか確認出来ますが、まだ何もダウンロードしていないので表示無しです。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
今回はWebサーバーの機能が欲しいので、Apacheがインストールされているイメージをダウンロードします。
以下のコマンドでダウンロードが可能です。
※イメージ名に:タグ名を付けることで、任意のソフトウェアバージョンをダウンロードすることが可能なようです。
省略すると最新版を自動的にダウンロードしてくれます。
# docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
360eba32fa65: Pulling fs layer
2832a695827e: Pulling fs layer
b57c1299d233: Pulling fs layer
45a0ea29816d: Pulling fs layer
8c226ac2053e: Pulling fs layer
45a0ea29816d: Waiting
8c226ac2053e: Waiting
2832a695827e: Downloading [==================================================>] 176B/176B
2832a695827e: Verifying Checksum
2832a695827e: Download complete
360eba32fa65: Downloading [> ] 294.2kB/29.12MB
b57c1299d233: Downloading [> ] 42.35kB/4.194MB
b57c1299d233: Verifying Checksum
b57c1299d233: Download complete
360eba32fa65: Downloading [======================> ] 13.12MB/29.12MB
360eba32fa65: Downloading [==========================================> ] 25.02MB/29.12MB
360eba32fa65: Verifying Checksum
360eba32fa65: Download complete
360eba32fa65: Extracting [> ] 294.9kB/29.12MB
360eba32fa65: Extracting [=====> ] 3.244MB/29.12MB
360eba32fa65: Extracting [===========> ] 6.783MB/29.12MB
45a0ea29816d: Downloading [> ] 327kB/31.36MB
360eba32fa65: Extracting [================> ] 9.437MB/29.12MB
8c226ac2053e: Downloading [==================================================>] 294B/294B
8c226ac2053e: Verifying Checksum
8c226ac2053e: Download complete
45a0ea29816d: Downloading [===============> ] 10.03MB/31.36MB
360eba32fa65: Extracting [==================> ] 10.62MB/29.12MB
45a0ea29816d: Downloading [================================> ] 20.08MB/31.36MB
360eba32fa65: Extracting [=====================> ] 12.39MB/29.12MB
45a0ea29816d: Downloading [=================================================> ] 31.07MB/31.36MB
45a0ea29816d: Verifying Checksum
45a0ea29816d: Download complete
360eba32fa65: Extracting [===========================> ] 16.22MB/29.12MB
360eba32fa65: Extracting [====================================> ] 21.23MB/29.12MB
360eba32fa65: Extracting [==========================================> ] 24.48MB/29.12MB
360eba32fa65: Extracting [==========================================> ] 24.77MB/29.12MB
360eba32fa65: Extracting [===============================================> ] 27.72MB/29.12MB
360eba32fa65: Extracting [================================================> ] 28.31MB/29.12MB
360eba32fa65: Extracting [==================================================>] 29.12MB/29.12MB
360eba32fa65: Pull complete
2832a695827e: Extracting [==================================================>] 176B/176B
2832a695827e: Extracting [==================================================>] 176B/176B
2832a695827e: Pull complete
b57c1299d233: Extracting [> ] 65.54kB/4.194MB
b57c1299d233: Extracting [===================> ] 1.638MB/4.194MB
b57c1299d233: Extracting [=============================================> ] 3.801MB/4.194MB
b57c1299d233: Extracting [==================================================>] 4.194MB/4.194MB
b57c1299d233: Pull complete
45a0ea29816d: Extracting [> ] 327.7kB/31.36MB
45a0ea29816d: Extracting [=> ] 983kB/31.36MB
45a0ea29816d: Extracting [==> ] 1.638MB/31.36MB
45a0ea29816d: Extracting [===> ] 2.294MB/31.36MB
45a0ea29816d: Extracting [========> ] 5.571MB/31.36MB
45a0ea29816d: Extracting [================> ] 10.16MB/31.36MB
45a0ea29816d: Extracting [======================> ] 14.42MB/31.36MB
45a0ea29816d: Extracting [============================> ] 18.02MB/31.36MB
45a0ea29816d: Extracting [===================================> ] 21.95MB/31.36MB
45a0ea29816d: Extracting [=======================================> ] 24.9MB/31.36MB
45a0ea29816d: Extracting [========================================> ] 25.23MB/31.36MB
45a0ea29816d: Extracting [============================================> ] 28.18MB/31.36MB
45a0ea29816d: Extracting [==================================================>] 31.36MB/31.36MB
45a0ea29816d: Pull complete
8c226ac2053e: Extracting [==================================================>] 294B/294B
8c226ac2053e: Extracting [==================================================>] 294B/294B
8c226ac2053e: Pull complete Digest: sha256:0adbefbee65176b93e4135f5c133072e2fb963187b00df565e6c73814894af5c
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest
先ほどのコマンドで確認すると、問題無くダウンロード出来ていますね。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest 7860e7628717 2 weeks ago 168MB
ダウンロードしたイメージを使って、コンテナを立ち上げていきます。
コンテナを立ち上げるコマンドは「docker run」コマンドです。
# docker run -d -p 1234:80 httpd
aaf711f12ae74bb04d5442db17eaa8d9f344b932d308334bb98adc3293309097
オプションについての説明ですが、「-d」を付けることで、バックグラウンド実行になります。
「-d」を付けないと、その他のコマンド操作が出来なくなるので付与しています。
また、dockerコンテナでは待ち受けているポートとdockerソフトウェア自体がインストールされているベースサーバーのポートを紐づけてやる必要があります。
「-p」で紐づけのポート指定が出来ます。
今回はWebサーバーの機能を試すので、dockerコンテナ内で待ち受けている
Apacheのデフォルト待ち受けポート80番をベースサーバーのポート1234に紐づけて起動させています。
問題無く起動がされているかは、以下のコマンドで確認が可能です。
起動されていなければ表示がされません。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad2fa9db4a3a httpd "httpd-foreground" 14 minutes ago Up 14 minutes 0.0.0.0:1234->80/tcp, :::1234->80/tcp agitated_hopper
起動した後は、以下のようなURLでポート指定してやればデフォルトサイトが表示されるはずだったのですが
「このサイトにアクセスできません」と表示されました。
http://[EC2のパブリック IPv4 DNS]:1234
※EC2で立てたのでドメイン名は「パブリック IPv4 DNS」を指定しています。念のためDNS名は伏せています。
これはEC2側のポート1234をdockerコンテナの80番に紐づけしているので
外部からのアクセスはEC2の1234ポートを経由してdocker内の80番ポートにアクセスされるので
EC2側のセキュリティグループで1234ポートを解放しておく必要があります。
1234ポートをセキュリティグループで解放すればサイトが問題無く閲覧出来ました。
コンテナを停止する際は以下のコマンドで可能です。
「docker ps」コマンドで「CONTAINER ID」を確認して指定してやれば停止できます。
# docker stop ad2fa9db4a3a
ad2fa9db4a3a
再度、実行中コンテナを確認すると無くなっています。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
【まとめ】
dockerって結構とっかかるのに難しそうなイメージだったのですが
既に作成されているイメージを利用する場合はそこまで難しくありませんでした。
dockerファイルから自分のイメージをビルドして作成も出来るので
またの機会に試してみたいと思います。