【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アクセスができれば完了です。


関連記事


コメントを残す

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

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

ABOUTこの記事をかいた人

blank

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