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
0
140
Ansible から Docker への実践記
OpenStack Days Tokyo 2018 での発表スライド
Ikuo Kumagai
August 03, 2018
Tweet
Share
More Decks by Ikuo Kumagai
See All by Ikuo Kumagai
プロダクト運用のCloudOps化に伴うジレンマ
kumagai19o
0
260
CloudBuildで docker-composeとansibleを使っている話
kumagai19o
1
1.5k
Other Decks in Technology
See All in Technology
コンテキストエンジニアリング入門〜AI Coding Agent作りで学ぶ文脈設計〜
kworkdev
PRO
1
580
防災デジタル分野での官民共創の取り組み (2)DIT/CCとD-CERTについて
ditccsugii
0
260
やる気のない自分との向き合い方/How to Deal with Your Unmotivated Self
sanogemaru
0
490
AI駆動開発を推進するためにサービス開発チームで 取り組んでいること
noayaoshiro
0
260
リセラー企業のテクサポ担当が考える、生成 AI 時代のトラブルシュート 2025
kazzpapa3
1
160
ガバメントクラウドの概要と自治体事例(名古屋市)
techniczna
2
230
20201008_ファインディ_品質意識を育てる役目は人かAIか___2_.pdf
findy_eventslides
2
620
エンタメとAIのための3Dパラレルワールド構築(GPU UNITE 2025 特別講演)
pfn
PRO
0
260
HR Force における DWH の併用事例 ~ サービス基盤としての BigQuery / 分析基盤としての Snowflake ~@Cross Data Platforms Meetup #2「BigQueryと愉快な仲間たち」
ryo_suzuki
0
140
プロポーザルのコツ ~ Kaigi on Rails 2025 初参加で3名の登壇を実現 ~
naro143
1
220
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
11
80k
カンファレンスに託児サポートがあるということ / Having Childcare Support at Conferences
nobu09
1
530
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
173
14k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
20
1.2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
A Tale of Four Properties
chriscoyier
161
23k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
It's Worth the Effort
3n
187
28k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.1k
The Cult of Friendly URLs
andyhume
79
6.6k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
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 テーマ︓ 既存の運⽤を⽌めずに進めるコンテナ化