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
Ansible から Docker への実践記
Search
Ikuo Kumagai
August 03, 2018
Technology
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ansible から Docker への実践記
OpenStack Days Tokyo 2018 での発表スライド
Ikuo Kumagai
August 03, 2018
More Decks by Ikuo Kumagai
See All by Ikuo Kumagai
プロダクト運用のCloudOps化に伴うジレンマ
kumagai19o
0
300
CloudBuildで docker-composeとansibleを使っている話
kumagai19o
1
1.6k
Other Decks in Technology
See All in Technology
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
140
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/6 - 2026/8
oracle4engineer
PRO
0
130
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
150
Redmine 7.0で私が開発した新機能の狙いと背景
vividtone
1
120
When Does a Local Qwen Start to Break
morshoto
0
190
少人数データチームのDevin活用実践事例
runandy16
2
460
Claude Code本って、 読む必要あるの?
oikon48
1
140
Amazon S3 Tablesに全部任せてみた結果——コンパクション/スナップショット管理は本当に手放せるか
shigeruoda
0
420
Tab5をRubyで動くパソコンにする
kishima
2
260
Azure Cost Management の FOCUS コストデータを迷わず読むための“3つの軸”
tetsuyaooooo
0
160
KPIだけでは評価できないプロダクトが考えるべき Evalsという第二の評価系 / Beyond KPIs: Evals as a Second Evaluation Framework for Products #PdEConf
aki_iinuma
4
3.8k
AI時代におけるプロダクト横断勉強会の設計
zozotech
PRO
0
170
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
KATA
mclloyd
PRO
35
15k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
710
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
270
Raft: Consensus for Rubyists
vanstee
141
7.7k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Mobile First: as difficult as doing things right
swwweet
225
10k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
Site-Speed That Sticks
csswizardry
13
1.5k
Transcript
to 1 2018年8⽉3⽇ 実践記
AXLBIT Inc. Ansible から Docker への実践記 (今更聞けない コンテナ化 )
AXLBIT Inc. • なぜコンテナ化するのか • デプロイプロセスをコンテナ化する } Ansible と Docker
の関係 } イメージはどう作るか • 構築プロセスのさらなる⾃動化 } CI/CDに向けた⾃動化 • コンテナをどう使うか︖ } 環境差分の反映をどうするか Agenda 3
AXLBIT Inc. なぜコンテナ化するのか 4
AXLBIT Inc. • Ansible playbookで環境構築が⾃動化されている既存の 運⽤プロセスがある 前提 5 Deploy anywhere!
No problem!
AXLBIT Inc. • 動作環境としての利点 } サーバリソースを増やすことなく、複数のアプリケーション実⾏ 環境を構築可能 } 起動の速さ・軽さ •
イメージ化の利点 } 冪等性 がない構築⽅法でもイメージ化できる } 動作環境も含めたイメージ化なので、(ほぼ)確実に動く環境をデプ ロイできる • Docker コマンドの操作性 } コマンドラインで⼀通りの操作が可能 Dockerコンテナを使う利点 6
AXLBIT Inc. • Step 1 開発環境改善 } 開発環境と本番環境の差異をなくすために開発の動作環境を Dockerコンテナ化 ->
環境を⽤意する⼿間を減らす } 同作業環境の構築を短時間で⾏う ▪ 30分 から 3分へ • Step 2 環境構築の⾃動化 } ⾃動構築された環境でテスト実施までを⾃動化 • Step 3 本番環境実⾏環境の再設計 } 実⾏環境のさらなる分散化によるScalabilityの向上 } デプロイ時間の短縮を中⼼とした Availability 向上化の設計 コンテナ化の⽬的(我々の場合) 7 テーマ︓ 既存の運⽤を⽌めずに進めるコンテナ化
AXLBIT Inc. デプロイプロセスのコンテナ化 8
AXLBIT Inc. デプロイのコンテナ化って︖ 9 デプロイ via SSH
AXLBIT Inc. • OS初期状態のコンテナにAnsible で Deploy • できたコンテナをイメージ化 Ansible で
DockerコンテナにDeploy 10 デプロイ via Docker イメージ化 動作環境 コンテナ docker commit
AXLBIT Inc. • Playbookを全てDockerfileに変換 .. するわけではなく イメージをどう作るか 11 Playbook Dockerfile
- hosts: axlgear user: root roles: - send - name: rsyncのインストール yum: name='rsync' state=present - name: rpmのダウンロード get_url: url=http://{{ repository_host }}/centos/6/os/x86_64/os/rsy nc-3.0.6-12.el6.x86_64.rpm dest=/tmp/ - name: rsyncのインストール yum: name=/tmp/rsync-3.0.6-12.el6.x86_64.rpm state=present - name: ダウンロードファイルの格納先削除 file: path=/tmp/rsync-3.0.6-12.el6.x86_64.rpm state=absent - name: pip.confの格納先作成 file: path=/root/.pip/ state=directory FROM centos:6.9 ADD intra-repo.repo /etc/yum.repos.d/intra-repo.repo ADD CentOS-Base.repo /etc/yum.repos.d/CentOS- Base.repo ADD pip.conf /root/.pip/pip.conf ADD .pydistutils.cfg /root/.pydistutils.cfg RUN yum -y install initscripts MAKEDEV ¥ && yum -y install rsync wget gcc make man ntp ¥ && tcpdump rpcbind tmpwatch convmv td-agent ¥ && monit openssh-clients nkf cronie¥ && yum -y install nginx openssl-devel ¥ && yum -y install MariaDB-devel MariaDB-client ¥ && yum -y install php php-xml php-mbstring php-gd ¥ && yum -y install libxslt-devel libxml2-devel ¥ && yum -y install postfix mail ¥ && yum -y install ttmkfdir mkfontdir wkhtmltox-0.12.2 ¥ && yum -y install tar zip unzip zlib-devel bzip2-devel ¥ && yum -y install pcre pcre-devel pcre-static ¥ && yum -y install MySQL-python MariaDB-server ¥ && yum -y install rabbitmq-server ¥ && yum -y clean all ¥ && yum check
AXLBIT Inc. • 最初はAnsible実⾏時のOSの初期状態だけを作成 • AnsibleからOSの初期設定をしている部分などはここに いれる } Yum update
& reboot -> 最新のOSイメージを使ってリビルド } タイムゾーンの設定、localeの設定 … Dockerfileには最低限だけ 12 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コマンド
でデプロイ [Tips] Ansible Docker Connection 13 [axlgear] axlgear ansible_connection=docker #Ansible 実⾏環境でDockerコマンドを実⾏した時に接続される環境のdockerコンテナを指定
AXLBIT Inc. • Ansible Playbook ⾃体もテスト対象 • Build 環境を個別に持てるようにする Ansible
の実⾏環境⾃体もコンテナ化 14 デプロイ via docker 動作環境 コンテナ 動作環境 コンテナ 同⼀ホスト
AXLBIT Inc. • Docker(client) in Docker (container)を作る } DinDイメージを使うと Ansible⼊っていない等
いろいろあるので⾃分で作成 [Tips] Docker in Docker 15 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. さらなるプロセスの⾃動化 16
AXLBIT Inc. • Docker compose コンテナのイメージ化プロセスの⾃動化 17 デプロイ via docker
動作環境 コンテナ 動作環境 コンテナ イメージ化 docker commit 各コンテナ起動からイメージ化までの ⼀連のプロセスを1コマンドで⾃動化
AXLBIT Inc. • docker-compose.yml • Ansible-container ? [Tips] イメージ作成の⾃動化 18
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. コンテナの使い⽅ 19
AXLBIT Inc. • ⼀旦イメージを作れば、あとは⾊々は環境での実⾏が容易 に。 How to use the container?
20 Run anywhere! In no time!!
AXLBIT Inc. • Ansible ではTemplate と vars で対応 テンプレートは︖ 21
デプロイ run Ansible がいないと template
AXLBIT Inc. • Ansibleから設定する } Ansibleの定義をそのまま使える • コンテナ起動時に設定する } Confd
で実装 ▪ Ansible テンンプレートはそのまま使えないので translateが発⽣ } Jinja2テンプレートをTomlで配置するスクリプトを⾃作︖ テンプレートはどうする 22 <- いまここ
AXLBIT Inc. • Step 1 開発環境改善 } 開発環境と本番環境の差異をなくすために開発の動作環境を Dockerコンテナ化 ->
環境を⽤意する⼿間を減らす } 同作業環境の構築を短時間で⾏う ▪ 30分 から 3分へ • Step 2 環境構築の⾃動化 } ⾃動構築された環境でテスト実施までを⾃動化 ---------- 運⽤の壁 ------------ • Step 3 本番環境実⾏環境の再設計 } 実⾏環境のさらなる分散化によるScalabilityの向上 } デプロイ時間の短縮を中⼼とした Availability 向上化の設計 コンテナ化の⽬的(我々の場合) 23 テーマ︓ 既存の運⽤を⽌めずに進めるコンテナ化