Linux版workspacesに開発環境を作る
概要
AWSのLinux版のworkpsacesに開発環境を作ってみます。
前提として、DockerとVSCodeを用いて快適に開発できる環境を目指します。
対応内容
- 日本語入力できるように設定
- Dockerのインストール
- Chromeのインストール
- VSCodeのインストール
- Remote Containerの設定
- 参考:Nodeのインストール
- 参考:プロキシ利用の設定
Workspaces環境(インスタンス)の作成
- AWSコンソールから
workspaces
を選択し、WorkSpacesの起動
を行います。 - バンドルの選択で、任意のサイズの
Amazon Linux 2
を選択します。この際言語は、Japanese(日本語)
を選択します。 - そのままディスクサイズなどを選択してマシンを作成します。
- 20分程度待つとマシンが完成するので、WorkSpacesクライアントから接続します。(AWSの手順に従います)
補足情報:AD連携でログインした場合のログインユーザ
Workspacesで使用するディレクトリでAD連携している場合、ユーザ名は次のようになっています。
[ドメイン名の一部]\[ユーザ名]
例えば、testuser@testdomain.com
の場合、testdomain\testuser
のようなユーザ名となるようです。
補足情報:Linux版WorkspacesのOSの構成
Workspaces起動時に、ルートボリューム
とユーザボリューム
を選択していると思いますが、
ルートボリューム
のボリューム容量が/
にマウントされ、ユーザボリューム
のボリューム容量が、volumes/user
にマウントされています。
volumes/user/home/[ユーザ名]
ボリュームが、/home/[ユーザ名]
にマウントされているようです。
日本語入力する方法
画面右下にJA
というアイコンがあり、ここを押下して「日本語 Kana - Kanji」を選択すると、日本語入力ができるようになります。
Dockerのインストール
コマンド操作は画面下にアイコンが表示されているMATE端末
で行います。
まず、Dockerのインストールを行います。
sudo yum install -y docker
ログインユーザーにDockerの使用を許可
ログインユーザーでDockerの操作を行えるように設定します。
sudo gpasswd -a $USER docker
システム起動時にDockerを起動するように設定
端末再起動時にDockerが立ち上がるように設定します。
sudo systemctl enable docker
DNSをGoogle Public DNSに設定
デフォルト設定だと、WorkspacesのDNS設定がVPCのネットワークアドレスを指しているため、コンテナ内から到達できず、名前解決がタイムアウトするため、Dockerの規定のDNSを変更します。
sudo vi /etc/docker/daemon.json
設定内容
{
"dns": ["8.8.8.8", "8.8.4.4"],
"dns-search": ["."]
}
Dockerの起動
Dockerを起動します。
sudo systemctl start docker
WorkspacesのOSに入りなおす
WorkspacesのOSからいったんログアウト(システム
-[ユーザ名]のログアウト
)して、再度接続しなおします。
コンテナを立ち上げコマンドを実行してみる
次のコマンドを実行します。
docker run --rm amazonlinux:2 curl -s https://github.com/status
GitHub lives!
が返ってくれば成功です。
docker-composeのインストール
docker-composeの最新版のバージョンを調べる
docker-composeの最新バージョンを調べます。
インストール
上記で調べた最新バージョンを指定して、以下コマンドを実行します。(2.2.3の部分にバージョン番号を設定します。※Docker V2から、V1までのインストール方法とは違うので注意します。
sudo mkdir /usr/local/lib/docker
sudo mkdir /usr/local/lib/docker/cli-plugins
sudo curl -SL https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose
docker-composeに実行権限を付与します。
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
動作確認
次のコマンドを実行します。
docker compose version
次のように返ってくれば成功です
Docker Compose version v2.2.3
Compose-Switchの導入(V1コマンドと互換性を持たせる場合)
以下はDockerV1とV2の互換性のための対応です。docker-compose
コマンドはdocker compose
という-
無しのコマンドに変わっています。
元の、docker-compose
でも動くようにする場合、以下の手順を行います。
sudo curl -fL https://github.com/docker/compose-switch/releases/download/v1.0.4/docker-compose-linux-amd64 -o /usr/local/bin/compose-switch
sudo chmod +x /usr/local/bin/compose-switch
sudo update-alternatives --install /usr/local/bin/docker-compose docker-compose /usr/local/bin/compose-switch 99
反映確認
update-alternatives --display docker-compose
次のように表示されれば反映されています。
docker-compose -ステータスは自動です。
リンクは現在 /usr/local/bin/compose-switch を指しています。
/usr/local/bin/compose-switch - 優先度 99
現在の「最適」バージョンは /usr/local/bin/compose-switch です。
Chromeをインストールする
端末にはデフォルトでFireFoxがインストールされています。
JS系開発などでは、Chromeのほうがやりやすいと思いますので、Chromeをインストールしておきます。
まず、Chromeを取得しに行くリポジトリの設定を行います。
sudo vi /etc/yum.repos.d/google.chrome.repo
設定内容
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
以下のコマンドを実行することでChromeがインストールされます。
sudo yum update
sudo yum install google-chrome-stable
VSCodeをインストールする
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
sudo yum -y install code
以下のコマンドでVSCodeが起動するようになります。
code
VSCodeにエクステンションをインストールする
VSコードの拡張(エクステンション)を検索して、次のものをインストールします。
- Docker
- Remote Development(3つの拡張パックが内包されています。Remote Containerだけでもよいです)
そのほか開発上の必要に応じて、エクステンションを導入します。
- Prettier
- ESLint
- Markdown All In One
など
コンテナを立ち上げてみる
試しに、プロジェクトを1つ作ってコンテナを立ち上げてみます。
Reactのプロジェクトを下記に作成してみます。
/home/[ユーザ名]/react-sample
cd ~
mkdir react-sample
cd react-sample
mkdir node
vi docker-compose.yml
version: '3'
services:
node:
build: ./
volumes:
- ./node:/usr/src/app
command: sh -c "cd sample && yarn start"
ports:
- "3000:3000"
vi Dockerfile
FROM node:17-alpine
WORKDIR /usr/src/app
docker-compose run --rm node sh -c "npm install -g create-react-app && create-react-app sample"
docker-compose up -d
ブラウザで以下のURLにアクセスします。
http://localhost:3000/
以下のような画面が表示されたらOKです。
VSCodeからRemote Containerで接続してコード編集できるようにする
このままだと、VSCodeを使ってうまくプロジェクト編集できないので(Dockerがファイルをroot権限で作成するのに対して、VSCodeは一般ユーザ権限で動くので)、VSCodeが別のコンテナ経由でroot権限で操作できるように、接続を構成します。
-
sudo chown username:username node/sample
のような形で、sample
フォルダの権限を一般ユーザ権限に変更する。(username
の箇所は自身のユーザ名を設定。 - VSCodeの左下の緑アイコンから、
Open Folder in Container...
を選択します。 - 先ほど作成した、
react-sample
-node
-sample
フォルダを選択します。 -
alpine
-3.14
を選択します。 - コンテナが起動します。(起動しない・反応しない場合は、対象のフォルダに対するファイルの作成権限がない可能性がありますので、
chown
による権限設定を見直してください) - VSCode上で
.devcontainer/devcontainer.json
を開き、remoteUser
をroot
に変更します。 - 再度左下の緑アイコンを押下し、
Rebuild Container
を選択して実行します。 - 何らかのファイル(
App.js
など)を操作し、保存が成功したらOKです。(root
権限でファイルを操作できています)
補足:chown
コマンドなどでユーザ名を指定するとき、AD連携しているユーザ名[ドメイン名の一部]\[ユーザ名]
となっている場合、(バックスラッシュ)については2重にして、[ドメイン名の一部]\\[ユーザ名]
とする必要があります。
ここまでのインストール作業で、DockerとVSCodeを用いた開発はほぼ可能な状態になったかと思います。
参考:Nodeのインストール
基本的には以降の必要なツールはコンテナ内でイメージから取得して動くと思いますので、必須ではないですが、何かと使うと思いますので、Nodeインストールの手順を記載しておきます。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
. ~/.nvm/nvm.sh
nvm install node
**以下でインストールできているかを確認します。
node -e "console.log('Running Node.js ' + process.version)"
以下のように表示されればOKです。
Running Node.js VERSION
参考:プロキシ設定をする
Workspaces環境からプロキシを使って通信したい場合があると思います。
参考にその情報を掲載しておきます。
プロキシを設定する
workspacesからの接続をプロキシ経由にする場合は、以下の手順で設定します。
※export HTTP_PROXY
等の設定や/etc/environment
設定はいくらしても反映されませんので気を付けてください。
- 画面下の
システム
-設定
-ネットワークプロキシ
を選択 -
HTTPプロキシ
、SSLプロキシ
に使用したいプロキシのIPアドレスとポートを設定
確認方法
下記サイトなどにアクセスして、意図した接続元IPになっているかを確認します。
Discussion