Help us understand the problem. What is going on with this article?

ssh接続先のdockerコンテナにVSCodeのRemote Developmentで繋ぐ

はじめに

Remote Developmentの登場によって、サーバやdockerコンテナにVSCodeで簡単に繋ぐことができるようになりました。
しかし、「サーバ上のdockerコンテナ」という二段階のリモート処理を実現する手段が見当たらなかったので、記事にしました。

サーバやdockerコンテナにVSCodeで繋ぐ

まずは基本であるサーバ or dockerコンテナにVSCodeで繋ぐ一段階のリモート処理について説明します。

サーバにVSCodeで繋ぐ

まずは~/.ssh/configを作ります。
例えば、こんな感じ。

Host aws
  Hostname 12.345.67.890
  User ubuntu
  IdentityFile ~/.ssh/hoge.pem

あとは、以下のページのようにRemote Developmentで繋ぐことができます。
https://dev.classmethod.jp/etc/vs-code-remote-development-ec2/

dockerコンテナにVSCodeで繋ぐ

dockerコンテナが作成された状態でRemote Developmentボタンをクリックすると、以下のようにコンテナ一覧が表示されるので、繋ぎたいコンテナを右クリック→"Connect to Container"でコンテナに接続できます。
Screenshot from 2019-11-05 22-46-47.png

dockerコンテナにssh接続

本記事では多段sshを利用してサーバ上のdockerコンテナに接続します。
なので、dockerコンテナにssh接続できるようにします。

まず、以下の記事を参考にDockerfileを作り、docker buildします。
https://qiita.com/YumaInaura/items/1d5c18a9e55484ccad89

その後、以下のようなコマンドでコンテナを走らせます。

docker run -d -p 10000:22 image_name

10000のところは任意のポート番号で、自由に変更可能です。
image_nameはdocker imageの名前です。

そして、以下のようなコマンドでssh接続します。

ssh root@127.0.0.1 -p 10000

rootの部分はDockerfileに書いたユーザ名、10000の部分はdocker run時に書いたポート番号で置き換えます。

以上の方法でdockerコンテナにssh接続できますが、この方法だとPATHが通っていない状態でdockerコンテナの中に入ってしまうので、以下のissueを参考に、/etc/profileにPATHをexportするようDockerfileに記述しておきます。
https://github.com/NVIDIA/nvidia-docker/issues/36

多段sshでサーバ上のdockerコンテナにVSCodeで繋ぐ

あとは以上の方法を組み合わせるだけです。
まず、~/.ssh/configに以下のように記述します。

Host aws
  Hostname 12.345.67.890
  User ubuntu
  IdentityFile ~/.ssh/hoge.pem

Host aws_docker
  Hostname 127.0.0.1
  User root
  Port 10000
  ProxyCommand ssh -W %h:%p aws

サーバー上でコンテナを走らせた上でVSCodeを見るとaws_dockerが見えるので、上記と同様に接続します。

おわりに

本記事では多段sshを利用して、サーバ上のdockerコンテナにVSCodeで繋ぐ方法を解説しました。
「もっと簡単な方法あるよ」という方は是非教えてください!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした