0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntuコンテナの作成とコマンド実行及びサービスの追加

Last updated at Posted at 2024-10-04

ホストOSからコンテナ内のUbuntuにSSH接続できるようにするための手順です。

1. Ubuntuコンテナの作成

まず、DockerでUbuntuコンテナを作成し、ホストのポート1022をコンテナの22番ポートにフォワーディングして、SSH接続できるようにします。

コマンド

docker run -d -p 1022:22 --name ubuntu-ssh ubuntu:latest bash -c "apt update && apt install -y openssh-server && service ssh start && /usr/sbin/sshd -D"

※sudo docker run -d -p 1022:22 --name ubuntu-ssh ubuntu:latest tail -f /dev/null
  sudo docker exec -it ubuntu-ssh bash
  apt-get update
  apt-get install -y openssh-server
  #apt-get install sudo
  #usermod -aG sudo <username>
  service ssh start
 こちのほうがうまくいく

  • docker run -d: バックグラウンドでコンテナを起動します。
  • -p 1022:22: ホストのポート1022をコンテナの22番ポートにフォワーディングします(SSH接続用)。
  • --name ubuntu-ssh: コンテナにubuntu-sshという名前を付けます。
  • bash -c: コンテナ起動時に以下のコマンドを順番に実行します:
    • apt update: パッケージリストを更新
    • apt install -y openssh-server: OpenSSHサーバーをインストール
    • service ssh start: SSHサーバーを起動
    • /usr/sbin/sshd -D: SSHデーモンをフォアグラウンドで起動し続ける(これによりコンテナが停止しません)

2. ユーザーの作成とパスワード設定

SSHで接続するために、新しいユーザーを作成し、パスワードを設定します。

2.1 コンテナ内に入る

まず、コンテナ内にアクセスします。

docker exec -it ubuntu-ssh bash
※ sshサービスが起動されない場合は、次のコマンドで起動する。
 service ssh start

2.2 ユーザーの作成

次に、SSH接続用のユーザーを作成します。

adduser yourusername

ここで、yourusernameを好きなユーザー名に置き換えてください。パスワードを設定するように求められます。


3. ホストからコンテナにSSH接続

ホストマシンからSSHクライアントを使用して、コンテナに接続します。ポート1022を指定して接続します。

SSH接続コマンド

ssh -p 1022 yourusername@localhost
  • -p 1022: ホストのポート1022を指定します(コンテナの22番ポートにフォワードされています)。
  • yourusername: 先ほど作成したユーザー名です。

接続すると、先ほど設定したパスワードを求められるので、入力してログインします。


4. コンテナ再起動時に自動でSSHサーバーを起動する

コンテナを再起動しても、SSHサーバーが自動的に起動するように設定します。

再起動ポリシーの設定

コンテナを再起動してもSSHサーバーが起動するようにするため、--restartオプションを追加します。例えば、次のようにコンテナを起動します。

docker run -d -p 1022:22 --name ubuntu-ssh --restart unless-stopped ubuntu:latest bash -c "apt update && apt install -y openssh-server && service ssh start && /usr/sbin/sshd -D"
  • --restart unless-stopped: コンテナが手動で停止されない限り、自動的に再起動します。

これにより、ホストマシンの再起動後でも、コンテナは自動的に再起動し、SSHサーバーが動作するようになります。


5. 動作確認とトラブルシューティング

5.1 コンテナのステータス確認

コンテナが正常に動作しているか確認するには、以下のコマンドを使用します。

docker ps

ubuntu-sshが一覧に表示されていれば、コンテナは正常に動作しています。

5.2 SSH接続テスト

ホストから再度SSH接続を試して、問題がないか確認します。

ssh -p 1022 yourusername@localhost

もし接続できない場合、以下を確認してください。

  • ポートフォワーディングの設定が正しいか (1022:22)
  • コンテナ内でSSHサーバーが正しく起動しているか (service ssh status)
  • 作成したユーザーのパスワードが正しく設定されているか

まとめ

  1. Ubuntuコンテナの作成とSSHサーバーのインストール:

    • docker runでコンテナを作成し、SSHサーバーをインストールして起動。
    • フォアグラウンドでsshdを起動し、コンテナが停止しないように設定。
  2. ユーザー作成とパスワード設定:

    • adduserコマンドでSSH接続用のユーザーを作成し、パスワードを設定。
  3. ホストからSSH接続:

    • ホストのポート1022経由で、SSHクライアントを使って接続。
  4. 自動再起動設定:

    • コンテナを再起動した際にSSHサーバーが自動的に再起動するように設定。

これで、ホストOSからSSHでUbuntuコンテナに接続できる環境が整い、コンテナが停止することなく常に動作する状態になります。

追伸:再起動ポリシーの設定は以下で良かったかも。
docker run -d -p 1022:22 --name ubuntu-ssh --restart unless-stopped ubuntu:latest bash

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?