1
1

More than 3 years have passed since last update.

docker-machineでEC2たてて、SSH接続した話

Last updated at Posted at 2020-03-09

はじめに

インスタンス上で開発したいけど、やり方がわからなかった自分のために作りました。
環境はmacOS Mojave 10.14.6

追記

追記1:
おそらく固定IPにしていないと、閉じた時に設定が使えなくなってしまうので、そこにも対応しました。
追記2:
docker-composerがbuildできるversionをインストールするように変更しました。
追記3:
AMIを追記しました。

やること

1.DockerからEC2を作る
2.ssh接続してDockerが使えるかの確認
3.コマンド

1.DockerからEC2を作る

まずはじめにdocker-machine機能を使ってインスタンスを作りましょう。
自分のAWSアカウントのアクセスキーとシークレットキーを準備してください。またAWS-Cliconfigureの設定が済んでいて、使うアカウントがdefaultに設定されている場合、やらなくても済むかもしれません。

# 使うプロファイルの確認
$ cat ~/.aws/credentials

export AWS_ACCESS_KEY_ID=この中に自分のアクセスキー
export AWS_SECRET_ACCESS_KEY=この中に自分のシークレットキー

# うまくいっているかの確認は
$ aws configure list

一応以下のコマンドでもできるらしいですが、自分はうまくいかなかったので保証はしません。

$ export AWS_DEFAULT_PROFILE=任意のプロファイル名
$ aws configure list # ここでプロファイル名で適応されているか確認してください。

そうしたらインスタンスをたてていきます。

# Macで逆スラッシュは option + ¥ です
$ docker-machine create \
  --driver amazonec2 \
  --amazonec2-ami "" \
  --amazonec2-instance-type "t2.micro" \ # これはデフォルトの場合です
  --amazonec2-root-size "16" \ # docker-machineのデフォルトのサイズ
  --amazonec2-region 好みのregion \
  --amazonec2-vpc-id カスタムするVPCのID \ # デフォルトの人はいらないかもしれません
  --amazonec2-subnet-id カスタムするsubnetのID \ # 同上
  --amazonec2-security-group カスタムするセキュリティグループの名 \ # 同上
  インスタンス名

追記

ここで固定IPを設定します。
Elastic IPで新しいアドレスの割り当てを行なった後、作ったインスタンスに対してアクションから関連付けを行なってください。
そうするとdocker-machine lsを行うとわかるのですが、IPが変わったことによってERRORが発生しています。ですので以下のコマンドで修正します。

$ docker-machine regenerate-certs ホスト名

docker-machine lsのコマンドで確認するとURLのところがElastic IPで設定したものに変っていると思います。


続き
AWSの秘密鍵は作られているのですが、私はどこにあるかわからないので、わかる人がいたらコメントお願いします。なのでDockerでSSH接続していきます。そのためにまず環境変数を用意します。

$ docker-machien ls # これで使うホストの名前を確認
$ docker-machine env ホスト名
set -gx DOCKER_TLS_VERIFY "x";
set -gx DOCKER_HOST "tcp://xxxxxxxxxxxxx";
set -gx DOCKER_CERT_PATH "/Users/xxx/xxxxx";
set -gx DOCKER_MACHINE_NAME "ホスト名";
# Run this command to configure your shell:
# eval (docker-machine env ホスト名)
$ eval (docker-machine env ホスト名) # 出てきたものをコピペすれば良いと思います

ACTIVEのところが*になっていれば大丈夫です。

$ docker-machine ls
NAME         ACTIVE   DRIVER      STATE     URL                     SWARM   DOCKER     ERRORS
ホスト名     *        amazonec2   Running   tcp://xxxxxxxxxx:xxxx           v19.03.7

そしたら、以下の通りにしてください。

$ docker-machine inspect ホスト名
{
    "ConfigVersion": 3,
    "Driver": {
        "IPAddress": "ホストのIP",
        "MachineName": "ホスト名",
        "SSHUser": "ubuntu",
        "SSHPort": 22,
        "SSHKeyPath": "/Users/xxxx/.docker/machine/machines/docker-env/id_rsa",
        :
        :
}
# SSHKeyPathのとこをコピペして使ってます
$ chmod 400 /Users/xxxx/.docker/machine/machines/docker-env/id_rsa
$ chmod 700 ~/.ssh
$ vi ~/.ssh/config

# --- ホスト名 -------------
Host ホスト名
  HostName ホストのIP(Elastic IPを使う人はElasticの方のアドレスを使う)
  User ubuntu
  IdentityFile /Users/xxxx/.docker/machine/machines/docker-env/id_rsa
  TCPKeepAlive yes
  IdentitiesOnly yes
# -------------------------

最後に以下のコマンドでSSH接続できれば、下準備は完了です。

2.ssh接続してDockerが使えるかの確認
$ ssh ホスト名

dockerがインストールされてるか確認してみてください。

$ docker --version
Docker version 19.03.7, build xxxxxxx
$ docker-compose --version
The program 'docker-compose' is currently not installed. You can install it by typing:
sudo apt install docker-compose

docker-composeはインストールされていないですね。コマンドも出ているのでその通りにインストールしましょう。
最新バージョンはここを確認してください

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ export PATH=$PATH:/usr/local/bin/
$ source ~/.bashrc

最後にもうひと手間やっちゃいましょう。
今のままではdockerに関連するコマンドを打つたびに、先頭にsudoをつけなくてはなりません。
なのでそうしなくて済むように設定しましょう。

# dockerグループは作られていると思いますがもしなかったら打ち込んでください
sudo groupadd docker

# 現行ユーザをdockerグループに所属させる
sudo gpasswd -a $USER docker

# sudoもめんどくさいので追加しておく
sudo gpasswd -a $USER sudo

# dockerデーモンを再起動する (CentOS7の場合)
sudo systemctl restart docker

# 再ログインが必要なので一旦exitして入り直してください
exit
3.コマンド

止める時は以下のコマンドを叩けば大丈夫です。あと環境変数は戻しておきましょう。

$ docker-machine stop ホスト名
# 強制で止める時はkill 始める時はstart 再起はrestart
$ docker-machine env --unset
set -e DOCKER_TLS_VERIFY;
set -e DOCKER_HOST;
set -e DOCKER_CERT_PATH;
set -e DOCKER_MACHINE_NAME;
# Run this command to configure your shell:
# eval (docker-machine env --unset)
$ eval (docker-machine env --unset)

おわりに

SSH接続ができると色々と便利ですね。

参考

MacのTerminalで「 ssh 接続名」で SSH 接続
docker-machineコマンド
Dockerコマンドをsudoなしで実行する方法
Ubuntu18.04.1でDockerとdocker-composeをインストールする方法

1
1
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
1
1