マルチクラウド用のIaC用Docker環境構築してみた
次にやろうとしていることがAWSとGoogleCloudをTerraformで構築するというところもあるのと、そのうち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でマルチクラウド行きます。
コメント