この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
以前、以下の記事にてDockerイメージの開発環境にVisual Studio Codeで接続することについて書きました。 Amazon Linux 2 の Dockerイメージから開発環境を作り Visual Studio Codeで接続してみる
こちらの記事では作業用のユーザとして「ec2-user」を作成していますが、Visual Studio Codeから接続した時には「root」ユーザとして接続していました。また接続後にVisual Studio Codeのターミナルで「$ su - ec2-user」を実行して作業用ユーザに切り替えていましたが、(前回は触れませんでしたが)この状態でリモートデバッグをしてもデバッグプロセスのユーザは「root」のままでした。
この辺りが実際の開発だと不便だったため、少しだけ修正して作業用ユーザで最初から接続する & リモートデバッグできるようしてみました。
修正した所
まず修正した所ですが、「Dockerfile」の最後の方に「ec2-user」を使用するための文を追加しました(27行目)。修正箇所はこれだけとなります。以下に「Dockerfile」を載せておきます。
FROM amazonlinux:2
# install amazon-linux-extras install
RUN amazon-linux-extras install -y
# yum update & install
RUN yum update -y \
&& yum install \
systemd \
tar \
unzip \
sudo \
-y
# install aws cli v2
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \
&& unzip awscliv2.zip \
&& sudo ./aws/install
# create user
RUN useradd "ec2-user" && echo "ec2-user ALL=NOPASSWD: ALL" >> /etc/sudoers
# install for develop, etc.
RUN sudo amazon-linux-extras install golang1.11 -y
# change user
USER ec2-user
# init
CMD ["/sbin/init"]
動かしてみる
修正箇所はこれだけなのですが、実際に動かしてみたいと思います。前回同様、以下のコマンドでコンテナを起動します。
$ docker-compose up -d
コンテナを起動し、Visual Studio Codeの「Remote-Containers: Attach to Runnning Container...」よりコンテナに接続してターミナルを開きます。ターミナルを開いた直後にユーザを確認してみます。
$ echo $USER
ec2-user
ターミナル上ではユーザが作業用ユーザである「ec2-user」となっていることが分かるかと思います。
次にリモートデバッグをしてみます。前回は触れなかったのですが、Visual Studio Codeにはリモートでデバッグできる機能があります。今回は特に難しい設定をすることなく、右下に表示される以下のようなダイアログの「Install All」を押して、必要なコンポーネントが全てインストールされるのを待つだけで実行できました。(少し時間が掛かりました)
デバッグするコードは、以前と同じく「/share/src/sample.go」としてみました。
[ec2-user@xxxxxxxxxxxx ~]$ go version
go version go1.15.14 linux/amd64
[ec2-user@xxxxxxxxxxxx ~]$ mkdir /share/src
[ec2-user@xxxxxxxxxxxx ~]$ touch /share/src/sample.go
「sample.go」は今回はデバッグで実行しているユーザが分かるように以下のようにしてみました。
sample.go
package main
import (
"fmt"
"os/user"
)
func main() {
fmt.Println("ok")
user, err := user.Current()
if err != nil {
panic(err)
}
fmt.Printf("current user = %s\n", user.Username)
}
「Install All」にて全てのインストールが終わったら、「F5」キーなどでデバッガを起動し、以下のようにブレークポイントで止めてみると実行しているユーザが「ec2-user」であることが確認できました。
まとめ
たった一行を「Dockerfile」に追加しただけですが、作業効率がかなり上がったので記事として投稿いたしました。何かの役に立てば幸いです。