マルチクラウド用のIaC用Docker環境構築してみた

次にやろうとしていることがAWSGoogleCloudTerraformで構築するというところもあるのと、そのうちAzureもいじくる可能性もあるなぁということで3つのクラウドいじくれる環境を準備しようと思いたった。最初はいつも通りHyper-Vの仮想イメージにちまちま入れ込んで作業しようとしていたけど。よく考えたらバージョンアップのこととかよそで作業するとか考えたときに、Dockerの方が都合いいのではないかと思って今回はDockerやってみました。
今さらのDockerです。まぁ能力が低いので仕方ないです。相変わらずのつぎはぎコピペです。実際はコンテナに入り込んで作業するのはTerraformを実行するときくらいでそこまでの間はホストの方の所定ディレクトリでVSCodeでゴリゴリとtfファイル書くことになるんですけどね。

・構築環境
 Ubuntu 20.04.2 LTS
 Docker version 19.03.13, build 4484c46d9d

◆ディレクトリの構成

|-- Dockerfile
`-- terraform
    `-- hoge.txt

◆作業コマンド

#ディレクトリ作成
$ mkdir docker
$ cd docker
$ mkdir terraform
#Dockerfile作成
$ vi Dockerfile
#コンテナイメージ作成
$ docker build . -t multicloud-ubuntu \
--build-arg ruby_ver=3.0.0 \
--build-arg python_ver=3.9.2 \
--build-arg python_old_ver=3.8.8
#コンテナ起動
$ docker container run --name terraform-dev -h terraform-dev -it -d \
 --mount type=bind,src=$(pwd)/terraform,dst=/root/terraform \
 --restart=always \
 -e TZ=Asia/Tokyo multicloud-ubuntu /bin/bash
#コンテナにログイン
$ docker exec -it terraform-dev /bin/bash

◆Dockerファイル

FROM ubuntu:focal
MAINTAINER devuser

SHELL ["/bin/bash", "-c"]
ENV DEBIAN_FRONTEND noninteractive
ENV DEBCONF_NOWARNINGS yes

#VersionUP
RUN apt-get update
RUN apt-get -y upgrade
RUN apt-get -y update
RUN apt-get -y dist-upgrade

#Japanese
RUN apt-get -y update
RUN apt-get -y install language-pack-ja-base language-pack-ja
RUN locale-gen ja_JP.UTF-8
RUN echo export LANG=ja_JP.UTF-8 >> ~/.profile
RUN DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y tzdata

#Dev Package Get
RUN apt-get -y install sudo git vim man curl wget unzip

#Node Install
RUN apt-get install -y nodejs npm
RUN npm install n -g
RUN n latest
RUN ln -sf /usr/local/bin/node /usr/bin/node
RUN apt-get -y purge nodejs npm

#Ruby Install
ARG ruby_ver
RUN apt-get install -y build-essential libssl-dev zlib1g-dev
RUN git clone https://github.com/rbenv/rbenv.git ~/.rbenv
RUN git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
RUN echo 'export PATH="~/.rbenv/bin:$PATH"' >> ~/.bashrc
RUN echo 'eval "$(rbenv init -)"' >> ~/.bashrc
ENV PATH $PATH:~/.rbenv/bin
ENV PATH $PATH:~/.rbenv/shims
RUN rbenv install $ruby_ver
RUN rbenv global $ruby_ver
ENV RUBYOPT -EUTF-8

#Python Install
ARG python_ver
ARG python_old_ver
RUN apt-get install -y build-essential libffi-dev libssl-dev zlib1g-dev liblzma-dev libbz2-dev libreadline-dev libsqlite3-dev
RUN git clone https://github.com/pyenv/pyenv.git ~/.pyenv
RUN git clone git://github.com/yyuu/pyenv-update.git ~/.pyenv/plugins/pyenv-update
RUN echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
RUN echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
RUN echo 'eval "$(pyenv init -)"' >> ~/.bashrc
ENV PATH $PATH:~/.pyenv/bin
ENV PATH $PATH:~/.pyenv/shims
RUN pyenv install $python_ver
RUN pyenv install $python_old_ver
RUN pyenv global $python_ver
RUN pyenv rehash
RUN pip install --upgrade pip

#AWS-CLI
RUN apt-get -y install jq
RUN pip install --upgrade awscli
RUN pip install --upgrade aws-sam-cli

#Azure-CLI
RUN curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
ENV DEBIAN_FRONTEND=noninteractive

#Google CloudSDK Install
RUN apt-get -y install apt-transport-https ca-certificates gnupg
RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
RUN curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
RUN apt-get update && apt-get -y install google-cloud-sdk
RUN apt-get -y install google-cloud-sdk-app-engine-python \
  google-cloud-sdk-bigtable-emulator \
  google-cloud-sdk-cbt google-cloud-sdk-cloud-build-local \
  google-cloud-sdk-datalab google-cloud-sdk-datastore-emulator kubectl \
  google-cloud-sdk-pubsub-emulator
RUN echo 'export CLOUDSDK_PYTHON=~/.pyenv/shims/python' >> ~/.bashrc

#Terraform
RUN git clone https://github.com/tfutils/tfenv.git ~/.tfenv
RUN echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bashrc
ENV PATH $PATH:~/.tfenv/bin
RUN tfenv install latest
RUN tfenv use latest

#WorkingDir make
RUN mkdir ~/terraform

コマンド一発叩いたら構築完了するまで10分位です。そしてそもそもHyper-Vで環境作るのも嵌らなければ30分もあればできるんで労力を考えるとDocker化するのもどうかとは思ったんだけれども、ホスト環境が汚れないというのはうれしいですね。今だとdocker-composeあるにも関わらずあえてのDockerです。今回はそこまで複雑なことしていないので1コンテナで十分ですので元祖Dockerです。
まず仕事で使う機会はないけれどもね。今やっている内容が落ち着いたらKurbenetesも触ってみたい。これで環境出来たのでいよいよTerraformでマルチクラウド行きます。

◆参考サイト

・Docker


・Dockerエラー


・Dockerマウント


・Docker自動起動


・Docker rbenv


・Docker pyenv


・AWS-CLI


・GCP CloudSDK

コメント

このブログの人気の投稿

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

証券外務員1種勉強(計算式暗記用メモ)

マクロ経済学(IS-LM分析)