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
130
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
240
CloudBuildで docker-composeとansibleを使っている話
kumagai19o
1
1.4k
Other Decks in Technology
See All in Technology
効率的な技術組織が作れる!書籍『チームトポロジー』要点まとめ
iwamot
2
190
テストを書かないためのテスト/ Tests for not writing tests
sinsoku
1
150
終了の危機にあった15年続くWebサービスを全力で存続させる - phpcon2024
yositosi
28
25k
[Oracle TechNight#85] Oracle Autonomous Databaseを使ったAI活用入門
oracle4engineer
PRO
1
210
プロダクト組織で取り組むアドベントカレンダー/Advent Calendar in Product Teams
mixplace
0
660
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
6
54k
「完全に理解したTalk」完全に理解した
segavvy
1
270
知っててうれしい HTTP Cookie を使ったセッション管理について
greendrop
1
110
12 Days of OpenAIから読み解く、生成AI 2025年のトレンド
shunsukeono_am
0
1k
DUSt3R, MASt3R, MASt3R-SfM にみる3D基盤モデル
spatial_ai_network
3
490
mixi2 の技術スタックを探ってみる (アプリ編)
ichiki1023
0
110
I could be Wrong!! - Learning from Agile Experts
kawaguti
PRO
8
2.2k
Featured
See All Featured
Unsuck your backbone
ammeep
669
57k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
2
160
The Language of Interfaces
destraynor
155
24k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Building Adaptive Systems
keathley
38
2.3k
Code Review Best Practice
trishagee
65
17k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
How STYLIGHT went responsive
nonsquared
96
5.3k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
550
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
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 テーマ︓ 既存の運⽤を⽌めずに進めるコンテナ化