Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ansible から Docker への実践記
Search
Ikuo Kumagai
August 03, 2018
Technology
0
150
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
270
CloudBuildで docker-composeとansibleを使っている話
kumagai19o
1
1.5k
Other Decks in Technology
See All in Technology
今からでも間に合う!速習Devin入門とその活用方法
ismk
1
520
「Managed Instances」と「durable functions」で広がるAWS Lambdaのユースケース
lamaglama39
0
280
学習データって増やせばいいんですか?
ftakahashi
1
250
直接メモリアクセス
koba789
0
280
今年のデータ・ML系アップデートと気になるアプデのご紹介
nayuts
1
150
【CEDEC+KYUSHU2025】学生・若手必見!テクニカルアーティスト 大全 ~仕事・スキル・キャリアパス、TAの「わからない」を徹底解剖~
cygames
PRO
0
150
[デモです] NotebookLM で作ったスライドの例
kongmingstrap
0
100
pmconf2025 - 他社事例を"自社仕様化"する技術_iRAFT法
daichi_yamashita
0
790
コミューンのデータ分析AIエージェント「Community Sage」の紹介
fufufukakaka
0
440
20251209_WAKECareer_生成AIを活用した設計・開発プロセス
syobochim
5
1.4k
ブロックテーマとこれからの WordPress サイト制作 / Toyama WordPress Meetup Vol.81
torounit
0
520
Ruby で作る大規模イベントネットワーク構築・運用支援システム TTDB
taketo1113
1
210
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.7k
The Pragmatic Product Professional
lauravandoore
37
7.1k
Documentation Writing (for coders)
carmenintech
76
5.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.4k
Why Our Code Smells
bkeepers
PRO
340
57k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Context Engineering - Making Every Token Count
addyosmani
9
490
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 テーマ︓ 既存の運⽤を⽌めずに進めるコンテナ化