Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CloudBuildで docker-composeとansibleを使っている話
Search
Ikuo Kumagai
October 01, 2019
Technology
1
1.3k
CloudBuildで docker-composeとansibleを使っている話
Google Cloud Build Day で発表
https://gcpug-tokyo.connpass.com/event/143453/
Ikuo Kumagai
October 01, 2019
Tweet
Share
More Decks by Ikuo Kumagai
See All by Ikuo Kumagai
プロダクト運用のCloudOps化に伴うジレンマ
kumagai19o
0
210
Ansible から Docker への実践記
kumagai19o
0
96
Other Decks in Technology
See All in Technology
Meta Quest 3 で動く桜マシマシ WebXR アプリを IBM Cloud Code Engine と Babylon.js で作った話
1ftseabass
PRO
0
120
20240418_Google ColabにLLMが搭載されたようなのでPython x データ分析の勉強方法を考えてみる
doradora09
0
140
開発生産性大幅アップ!Postman VS Code拡張機能
nagix
2
380
On Your Data を超えていく!
hirotomotaguchi
2
690
生成AIの変革の時代に、直近1年で直面した課題とその解決策
ktc_wada
0
300
どうするコスト最適化のトレードオフ
tetsuyaooooo
1
530
VS CodeでAWSを操作しよう
smt7174
8
1.7k
require(ESM)とECMAScript仕様
uhyo
3
750
Vertex AI を中心に 生成AIのアップデートを共有します
kaz1437
0
310
推しは推せるときに推せ! プロダクトにフィードバックしていこう
nakasho
0
320
Cracking the KubeCon CfP
inductor
2
250
私が trocco を推す理由
__allllllllez__
1
240
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
175
21k
Robots, Beer and Maslow
schacon
PRO
155
7.9k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
241
1.2M
Build your cross-platform service in a week with App Engine
jlugia
225
17k
Ruby is Unlike a Banana
tanoku
96
10k
A designer walks into a library…
pauljervisheath
200
23k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
30
6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
19
1.7k
Into the Great Unknown - MozCon
thekraken
10
990
The Cult of Friendly URLs
andyhume
74
5.7k
Raft: Consensus for Rubyists
vanstee
132
6.3k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
Transcript
CloudBuild 内で docker-composeと ansibleで buildとCIしている話 1
AXLBIT Inc. • 開発環境でのみGCPを利⽤しています。 • 先⽉のBuild Timeは24,871.67 minutes です 弊社の状況
2
AXLBIT Inc. • Ansible playbookで環境構築が⾃動化されている既存の 運⽤プロセスがあった。 背景(Cloud Build 以前 )
3 Deploy anywhere! No problem!
AXLBIT Inc. • Ansible で DockerコンテナにDeployして commit • OS初期状態のコンテナにAnsible で
Deploy • できたコンテナをイメージ化 Step1 Docker Image Build 4 デプロイ via Docker イメージ化 動作環境 コンテナ docker commit
AXLBIT Inc. • 最初はAnsible実⾏時のOSの初期状態だけを作成 • AnsibleからOSの初期設定をしている部分などはここに いれる } Yum update
& reboot -> 最新のOSイメージを使ってリビルド } タイムゾーンの設定、localeの設定 … Base のDockerfileには最低限だけ 5 FROM centos:7 RUN yum -y update ¥ && yum -y install epel-release ¥ && yum -y update ¥ && yum -y install initscripts MAKEDEV git bc ansible syslog¥ && yum install -y yum-utils device-mapper-persistent-data lvm2 ¥ RUN localedef -v -c -i ja_JP -f UTF-8 ja_JP.UTF-8; echo ""; env LANG=ja_JP.UTF-8 RUN unlink /etc/localtime RUN ln -s /usr/share/zoneinfo/Japan /etc/localtime WORKDIR /root/deploy ENTRYPOINT ["/root/deploy/init.sh"]
AXLBIT Inc. • AnsibleでDockerにDeployするからといって、初期イ メージにSSHをインストールしなくて良い。 } Hosts で ansible_connection=docker とすればDockerコマンド
でデプロイ Ansible Docker Connection 6 [axlgear] axlgear ansible_connection=docker #Ansible 実⾏環境でDockerコマンドを実⾏した時に接続される環境のdockerコンテナを指定
AXLBIT Inc. • VM内でAnsible 実⾏をコンテナで実⾏ } -> イメージ作成 docker-composeでansible実⾏ 7
デプロイ via docker 動作環境 コンテナ 動作環境 コンテナ VM
AXLBIT Inc. • Docker composeと ansibleが実⾏できるイメージ作成 } CloudBuildersイメージには Ansible⼊っていないので⾃作 ⾃作
docker-compose & ansible イメージ 8 FROM centos:7 RUN yum -y update ¥ && yum -y install epel-release ¥ && yum -y update ¥ && yum -y install initscripts MAKEDEV git bc ansible syslog¥ && yum install -y yum-utils device-mapper-persistent-data lvm2 ¥ && yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo ¥ && yum install -y docker-ce ¥ && yum check ¥ && curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) - o /usr/local/bin/docker-compose ¥ && chmod +x /usr/local/bin/docker-compose RUN localedef -v -c -i ja_JP -f UTF-8 ja_JP.UTF-8; echo ""; env LANG=ja_JP.UTF-8 RUN unlink /etc/localtime RUN ln -s /usr/share/zoneinfo/Japan /etc/localtime VOLUME /var/lib/docker EXPOSE 2375 WORKDIR /root/deploy ENTRYPOINT ["/root/deploy/init.sh"]
AXLBIT Inc. • docker-compose.yml [Tips] イメージ作成の⾃動化 9 version: '3' services:
deploy: # default global_env link to .env # if you change local_env 'ln -s local_env .env' image: ${DEPLOY_BASE} command: ./${DEPLOY_COMMAND} common.conf difference-gear-base.conf environment: - COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME} - DAEMON=${DAEMON_FLG} volumes: - ./:/root/deploy:z - /var/run/docker.sock:/var/run/docker.sock - ~/.ssh:/root/host_keys:ro - ../settings:/root/work/:Z - ../dep-opt:/opt/:Z gear-body: #image: ${GEAR_BASE} #volumes: # - ../opt:/opt/:Z image: ${DEPLOYED_GEAR} #デプロイ済みイメージを使う場合 volumes: - ../work:/root/container #デプロイ済みイメージを使う場合のファイル共有⽤ ports: - "443"
AXLBIT Inc. ここでCloudBuild とかやってた。 10
AXLBIT Inc. • VM内でAnsible 実⾏をコンテナで実⾏ } -> イメージ作成 docker-composeでansible実⾏ 11
デプロイ via docker 動作環境 コンテナ 動作環境 コンテナ CloudBuild
AXLBIT Inc. • docker-composeで構築対象イメージを起動 } -> その後 ansibleイメージを実⾏ とりあえず構築をCloudBuild化 12
- name: 'gcr.io/sixth-hash-162208/deploy-base' env: - 'COMPOSE_PROJECT_NAME=buildimage' - 'BRANCH_NAME=$BRANCH_NAME' entrypoint: 'bash' args: - '-c' - | set -xe #これは各test-addon側のファイルを置く cp /root/.ssh/* $_CLOUD_BUILD_DIR/.ssh/ cd $_CLOUD_BUILD_DIR/makeimage docker-compose up -d gear docker-compose up --exit-code-from deploy deploy volumes: - name: 'ssh' path: /root/.ssh - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: - '-c' - | _imagetag=$$(echo gcr.io/${PROJECT_ID}/gear_$$_localrepo:$$_branch) echo "tag: $$_imagetag" docker commit buildimage_gear_1 $$_imagetag docker push $$_imagetag
AXLBIT Inc. • ⾃動テスト実⾏のためのベースイメージとして • 開発者にGCEのテンプレート共に渡す • 社内のデモ環境としてGKE上で起動 作ったイメージを何に使っているのか 13
AXLBIT Inc. • Cloudbuild.yamlをリポジトリの外に置きたい。 } Buildやテストのプロセス修正時に本筋の commit log が汚れる }
実⾏プロセスは極⼒別リポジトリのShellにおいて、都度pull • プルリクがあるときだけ実⾏したい } Envファイルにマージターゲットのブランチを記載しGithub API でプルリクの存在チェック。あるときだけ実⾏ ▪ -> いまは プルリク連携できるらしいと。。 • これまでの最⻑Buildは13時間、、 } かなり無駄遣いしている感 悩んだことと対応してきたこと 14