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
290
CloudBuildで docker-composeとansibleを使っている話
kumagai19o
1
1.6k
Other Decks in Technology
See All in Technology
Amplify Gen2でbackend.tsにCDKを定義する/しない事によるCDKの挙動の違いとユースケース
smt7174
1
390
第67回コンピュータビジョン勉強会CVPR2026読会前編
tsukamotokenji
0
140
AI、CDK と協働する Full TypeScript アプリケーション開発 / Full TypeScript Application with AI and CDK
geekplus_tech
2
360
あなたの『Site』はどこですか? — xREという考え方
miyamu
0
1.2k
Data + AI Summit 2026 イベントレポート: 「AIがビジネスで意思決定するデータ基盤」へ
nek0128
0
260
そのドキュメント、自動化しませんか?
yuksew
1
290
kintone の AI コワーカーを、 Anthropic にエージェントを"ホストさせて"作った話 #devkinmeetup
sugimomoto
0
110
企業でAWS Organizationsを動かすための組織設計の考え方
nrinetcom
PRO
1
110
Alphaモジュール使っていいのかい!?いけないのかい!?どっちなんだいっ!?
watany
1
270
2年前に削除したPHPクラスが、 ある日突然決済をエラーにした
ykagano
1
280
ソニー銀行におけるビジネスアジリティ向上のためのクラウドシフト戦略
srenext
0
720
発表と総括 / Presentations and Summary
ks91
PRO
0
140
Featured
See All Featured
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
460
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.4k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
A designer walks into a library…
pauljervisheath
211
24k
A better future with KSS
kneath
240
18k
Design in an AI World
tapps
1
260
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
370
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
The Language of Interfaces
destraynor
162
27k
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 テーマ︓ 既存の運⽤を⽌めずに進めるコンテナ化