Dockerイメージ作ってGCEにデプロイするまで
Google Compute EngineでVMインスタンスを作ろうとブラウザで設定していたら, VMインスタンスに自動でコンテナイメージをデプロイできるらしい.
Google Container Registryにリポジトリを置くこともできるが, 今回はDocker Hubに置いたリポジトリを参照してデプロイする方向でやってみようと思う.
そもそも, Dockerを使ったこと無いので, 基本的なイメージ作りから触ってみることにした.
今回は, 作成したDockerイメージをGCEのインスタンスが立ち上がった時に自動で読み込まれるところまで行う.
(動作確認とかはまた次回)
ローカルでDockerのイメージ作成
まず, Docker-machineを作る.
Docker-machineはmacとかでコンテナを動かすためのVM環境のことらしい.
つまり, macの上でDocker-machineが動き, Docker-machineの上でDockerコンテナが動くみたい.
docker-machine create --driver virtualbox default docker-machine env default eval "$(docker-machine env default)"
次にDockerのイメージの定義ファイルであるDockerfileを作成する.
まず始めに最小構成として以下のようにした.
Dockerfile
# Base Image FROM coreos/apache # User Info MAINTAINER kourin # RUN: run in docker build RUN echo "now building..." # CMD: run in docker run CMD echo "now running..."
docker build でDockerfileを元にDockerイメージを作成できる.
docker run でCMDコマンドで設定したコマンドが実行される.
docker build ./ -t (つけたいイメージ名) docker run (イメージ名)
以下のようにすると作成したdockerの環境下に入れる.
docker run -it (イメージ名) /bin/bash
出るときはexitで出れるが, 環境下で変更した部分は消えてしまうので注意.
環境下でコマンドを確認しつつ, Dockerfileに環境構築のためのコマンドを追記していけば良いらしい.
そして, docker build でイメージを更新していく.
今回は、とりあえずC/C++のコンパイラとPython3.6が実行できる環境を構築した.
以下がそのDockerfile
EXPOSEは外部に向けて公開するポートを記す.
Dockerfile(ver2)
# Base Image FROM coreos/apache # User Info MAINTAINER kourin # build RUN \ apt-get update && \ # C/C++ apt-get install -y build-essential make && \ # Python3.6 apt-get install -y zlib1g-dev libssl-dev libreadline-dev \ libsqlite3-dev libbz2-dev libncurses5-dev libgdbm-dev liblzma-dev \ tk-dev zlibc wget curl && \ cd /usr/local/src && \ wget --no-check-certificate https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz && \ tar zxvf Python-3.6.3.tgz && \ cd Python-3.6.3 && \ ./configure && \ make && \ make altinstall && \ cd ~ && \ curl -kL https://bootstrap.pypa.io/get-pip.py | python3.6 EXPOSE 80 EXPOSE 8080
DockerHubにpush
DockerHubというDockerイメージを保存できるリポジトリがある.
以下のサイトでアカウントを作成する.
今回はGithubと連携してみる.
GithubでDockerfileを管理し, DockerfileをpushするとDockerHubでイメージがビルドされる.
まず, Docker HubのアカウントのSettingsからGithubとのアカウント連携を行う.
次に, 上のバーからCreate >> Create Automated Build >> Githubを選び, 任意のGithubのリポジトリを選択する.
GithubにDockerfileをpushすると, DockerHubのリポジトリも反映される.
Docker Hubのbuild detailsを見れば, イメージのbuild状況が確認できる.
GCE インスタンスの作成
GCPのコンソールからインスタンスを作成する.
マシンタイプは f1-micro にし, ゾーンをusから始まる名前にすると無料枠で利用できる.
この VM インスタンスにコンテナ イメージをデプロイします。 にチェックを入れる.
コンテナイメージは, docker.io/(アカウント名)/(リポジトリ名)
とする.
今回はお試しなので, とりあえず特に他に設定せずに作成.
sshでインスタンスに接続する, しばらく待ってdocker images
を実行すると指定したコンテナイメージが出てくる.
docker run
でイメージを起動してシェルの中に入れる.
DockerfileのCMDでサーバを起動するコマンドとかを指定すれば, 展開後プロセスが起動して終了しないので, docker ps
でプロセスが見れると思う.
次回は実際にプログラムを書いて, 自動でアプリケーションをビルドするところをしていく.
参考
「Cannot connect to the Docker daemon. 」と怒られる時の対処法 – 不動産屋のエンジニア
効率的に安全な Dockerfile を作るには - Qiita
Docker Hubを使ってGitHubにあるDockerfileからimageを自動生成する – Simple IT Life
VM およびマネージド インスタンス グループへのコンテナのデプロイ | Compute Engine ドキュメント | Google Cloud