【Docker】AmazonLinuxコンテナ起動とSSHアクセスまで

AmazonLinuxコンテナを構築してSShアクセスができるまでをまとめました。
作業時間は5分くらいで簡単に完了します。

AmazonLinuxのバージョンは以下となります。(2021年7月時点)

bash-4.2# cat /etc/system-release
Amazon Linux release 2 (Karoo)

「AmazonLinux」でDockerコンテナ起動と構築

AmazonLinuxのDocker公式イメージは以下となります。
https://hub.docker.com/_/amazonlinux

公式ページ通り、以下コマンドでAmazonLinuxのイメージをダウンロードします。

$ docker pull amazonlinux                                
Using default tag: latest
latest: Pulling from library/amazonlinux
b19e557e673c: Pull complete 
Digest: sha256:2e42b5d170dbb6d54d35b3b64627480de9687b52cfbab2086267a0fd2acd7bef
Status: Downloaded newer image for amazonlinux:latest
docker.io/library/amazonlinux:latest

イメージがダウンロードされたことを以下コマンドで確認します。

$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED      SIZE
amazonlinux   latest    c8e1c3f1064f   8 days ago   193MB

AmazonLinuxコンテナ起動(※/sbin/initでの起動不可)

AmazonLinuxコンテナを起動し、systemctlコマンドを使える状態にしたいのですが、「docker run」ではエラーが発生するのでいったん起動し、yumアップデートで最新のOSの状態にします。¥

コンテナの起動は以下コマンドで実行します。

$ docker run -itd --privileged -p 2222:22 --name amazonlinux --hostname amazonlinux  amazonlinux:latest
09ea81bdeae7e4bd36e72e8e4edec8a675cbd7a58ecee12c1e13e89de5bf8cf5

AmazonLinuxのコンテナが起動したことを以下コマンドで確認できます。

$ docker ps        
CONTAINER ID   IMAGE                COMMAND       CREATED          STATUS          PORTS                                   NAMES
09ea81bdeae7   amazonlinux:latest   "/bin/bash"   12 seconds ago   Up 10 seconds   0.0.0.0:2222->22/tcp, :::2222->22/tcp   amazonlinux

次に起動したコンテナにアクセスします。

$ docker exec -it amazonlinux /bin/bash

バージョンも確認でき正常に起動していることが確認できます。

bash-4.2# cat /etc/system-release
Amazon Linux release 2 (Karoo)

AmazonLinuxコンテナを最新の状態にアップデート

今回、「systemd」コマンドが使えるようにするために、yumアップデートをすることで使用できるようになりました。

bash-4.2# yum -y update

ついでにSSHアクセスができるように「openssh-server」もインストールしておきます。

bash-4.2# yum -y install openssh-server

上記インストール後、コンテナからログアウトします。

コンテナイメージを別途コミットし、新しいイメージで起動

次に、「systemd」インストール済みのコンテナを/sbin/initで起動します。
現在のコンテナ(amazonlinux)からイメージ(amazonlx:latest)を作成します。

$ docker commit amazonlinux amazonlx:latest
sha256:3b0f728067d926d5665588a0fa8617eea8fbfb2eda9f236305f8cdca388babef

次に現在使用したコンテナはいったん削除します。

$ docker ps                                                                                                      
CONTAINER ID   IMAGE                COMMAND       CREATED         STATUS         PORTS                                   NAMES
8cf6c29744e8   amazonlinux:latest   "/bin/bash"   3 minutes ago   Up 3 minutes   0.0.0.0:2222->22/tcp, :::2222->22/tcp   amazonlinux
$ docker stop amazonlinux
amazonlinux
$ docker rm amazonlinux
amazonlinux

新規に作成したイメージからDockerコンテナを(/sbin/init)で起動

上記、commitコマンドで作成したイメージ(amazonlx:latest)からDockerコンテナを起動します。
ポート番号は2222にアクセスすると22番ポートへアクセスするように、あとはsysemdが使用できるように「/sbin/init」を追加します。

$ docker run -itd --privileged -p 2222:22 --name amazonlinux --hostname amazonlinux  amazonlx:latest /sbin/init 
a31fbc063a20a51fb81cc50b5c6cc20526f7fe31e8c734d75d7ca3c1c734a9d7

Dockerコンテナが正常に起動したら、以下コマンドでコンテナへアクセスします。

$ docker exec -it amazonlinux /bin/bash

AmazonLinuxコンテナへSSH接続

コンテナアクセスをした後は「systemctl」コマンドでsshdを起動します。

bash-4.2# systemctl start sshd
bash-4.2# systemctl enable sshd

以下コマンドでSSHサービスが起動していることを確認します。

bash-4.2# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2021-07-04 06:22:09 UTC; 26s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 86 (sshd)
   CGroup: /docker/a31fbc063a20a51fb81cc50b5c6cc20526f7fe31e8c734d75d7ca3c1c734a9d7/system.slice/sshd.service
           └─86 /usr/sbin/sshd -D
           ‣ 86 /usr/sbin/sshd -D

Jul 04 06:22:09 amazonlinux systemd[1]: Starting OpenSSH server daemon...
Jul 04 06:22:09 amazonlinux sshd[86]: Server listening on 0.0.0.0 port 22.
Jul 04 06:22:09 amazonlinux systemd[1]: Started OpenSSH server daemon.
Jul 04 06:22:09 amazonlinux sshd[86]: Server listening on :: port 22.

SSHアクセス用パスワード設定

SSHサービスが上がったことを確認した後はアクセス用のパスワードを設定します。
デフォルトで「passwd」コマンドがないためインストールをします。

bash-4.2# yum -y install passwd

インストール後、以下コマンドでrootパスワードを作成します。

bash-4.2# passwd 
Changing password for user root.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

上記パスワードを作成後、コンテナからログアウトし、コンテナへSSHアクセスを実施します。

$ ssh -p 2222 root@localhost                
The authenticity of host '[localhost]:2222 ([::1]:2222)' can't be established.
ECDSA key fingerprint is SHA256:vUiZ8TRUmwfosZkHcTM/W00oWbJMzpVr72rGOZVA56U.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[localhost]:2222' (ECDSA) to the list of known hosts.
root@localhost's password: 
-bash-4.2# 
-bash-4.2# 
-bash-4.2# 

正常にSSHアクセスができれば完了です。




エンジニアのオンライン学習

ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。

おすすめオンライン教材
自宅で学習ができるオンラインスクール

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUT US
げんき☆ひろき
インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!