Carpe Diem

備忘録。https://github.com/jun06t

Docker

Scratch imageでtime: missing Location

概要 以前以下の記事でscratch imageの作成方法を紹介しました。 christina04.hatenablog.com しかしgolangのコードによっては以下のpanicが起きることがあります。 panic: time: missing Location in call to Time.In 今回はその対応方法です。 環境 golang…

ScratchイメージでGolangアプリの超軽量イメージをビルド

概要 Alpineベースのイメージが軽量イメージとして認知されていますが、golangの場合は単一バイナリで動くのでイメージ内にgolangが入っている必要はありません。 なので最も軽量と言われているScratch imageを利用することで、dockerイメージを軽量化するこ…

Docker Imageのバージョン管理について

概要 development, staging, productionといった環境に分けてdocker imageを利用する場合のバージョン管理について考えてみました。 環境 AWS ECS AWS ECR Docker 17.03.1 要件 今回対応する時に考慮した要件は以下。 gitのtagと連動 ただし最新のimageのTAG…

docker-compose で Kibana 5.x を使う

概要 Kibanaを5.xにメジャーアップデートする際、Elastic社公式のdocker imageも用意されたのでdocker-composeでまとめて作ることにしました。 その際調べたこと、ハマったことをまとめます。 環境 docker 17.03.1-ce docker-compose 1.11.2 Elasticsearch 5…

Dockerでのdev, stg, prd環境分け

概要 dockerを扱う上で、dev, stg, prdの環境で動かす際の分け方について考えてみました。 環境 docker 1.13.1 docker-compose 1.11.1 主な分け方 思いつくのは以下の5つです。 imageを分ける 全環境のconfigファイルをimageに保持させ、RUN時に指定 templa…

ECSでコンテナのrolling update

概要 ECS上のコンテナをダウンタイム0で更新(デプロイ)する方法をまとめます。 環境 ALB ECS container agent 1.13.0 Docker 1.11.2 Amazon ECS Container Agent Versions - Amazon EC2 Container Service ポイント minimumHealthyPercentとmaximumPercen…

dockerのlog周りの対応

概要 dockerを本番運用する際にログの扱いに悩んだので情報をまとめてみました。 環境 docker v1.12.1 コンテナのログは何処に渡すべきか 主に以下の3通りになると思います。 コンテナ内に保存 volume先に指定してに永続保存 log driverを使って転送

remote_addrとかx-forwarded-forとかx-real-ipとか

概要 ECSでNginxのコンテナをプロキシとして立てたところ、APIサーバのアクセスログのクライアントIPがNginxのコンテナIPになっていたのでその修正をしたのがきっかけです。 環境 Nginx 1.10.2 Docker1.12.1 構成 Client -> ELB -> Nginx -> API という構成…

DockerでMongoDBのレプリカセットを構築

概要 MongoDBのレプリカセットを組んで検証する必要があったのでdockerを使って構築することにしてみました。 環境 Docker 1.12.0 Mongo 3.2.9 構成 コンテナ名 役割 ホスト側ポート mongo1 Primary 30001 mongo2 Secondary 30002 arbiter Arbiter。データは…

Dockerのネットワークを理解するために覚えたことまとめ

概要 Dockerのネットワーク周りを勉強していると、 docker0 仮想ブリッジ VXLAN link機能 など色んな要素が出てくるのですが、ちゃんと理解していないとすぐ忘れるため一度しっかり学んでみました。 今回はその時に疑問に思ったことをまとめてみました。 環…

Kubernetes を使ったマルチホスト環境でのクラスタを構築する【flannel編】

概要 前回の続きです。 今回はflannelを導入してマルチホストでのコンテナ間通信を可能にします。 マスターの設定 flannelの設定 flannel.json ネットワークの設定ファイルを用意します。適当にflannel.jsonとします。 { "Network": "10.20.0.0/16", "Subnet…

Kubernetes を使ったマルチホスト環境でのクラスタを構築する【基礎編】

概要 Kubernetesを使ってDockerのクラスタを構築します。Kubernetesを使うことで以下のような本番環境を意識したシステムを構築できます。 フェイルオーバー(コンテナが異常終了したことを検知し再起動させる) スケーリング(起動しているコンテナの数を自…

マルチホスト上にoverlay networkを構築してコンテナ間で疎通

概要 以前はWeaveというツールを使ってマルチホストをまたいだコンテナ間通信ができるように構築しました。 Docker 1.9.0からVXLANという仮想でL2ネットワークを構築する技術を用い、Docker自身がマルチホストネットワークに対応したので、今度はそちらで構…

Docker Swarmでマルチホストでクラスタ構築

概要 Docker Swarmでマルチホスト環境上でDockerクラスタを構築します。 事前知識 Docker Swarmで構築する際は以下の3つの要素が必要になります。 ノードを管理するDiscovery backend Swarm Manager(マスターノード) Swarm Node(子ノード) 環境 Docker …

Docker Compose で複数コンテナを管理

概要 単一ホスト上で複数のコンテナを起動するときはDocker Composeを使うのが便利です。 今回はその基本的な使い方を紹介します。 環境 Docker 1.11.0 Docker-Compose 1.7.0 Docker Composeのメリット 複数コンテナを管理しやすい スケールアウト、スケール…

Docker Data Volume を理解する

概要 Dockerのデータをホスト側に保持する方法をまとめます。 Dockerはコンテナの破棄・再作成が簡単にできる一方、そのままだとデータも消えてしまいます。 今回のDate Volumeはデータの永続性を保つべきシーンで必要となる知識です。 環境 OSX 10.11.4 doc…

UnionFS で Docker のレイヤ構造を理解する

概要 DockerではAUFSという技術が使われています。 こちらはUnionFS(ディレクトリを重ね合わせることができる)の一つで、親のファイルシステムをすべてReadOnlyにして、その上に書き込み可能なレイヤを重ねて1つのファイルシステムのように扱います。 Docker…

最新のDockerをインストール

概要 Ubuntuのデフォルトパッケージはすでにsupportされていないため、公式サイトのやり方で最新のものを入れます。 環境 Vagrant 1.8.0 Ubuntu 14.04 Docker 1.9.1 事前準備 Ubuntu Wily 15.10 Ubuntu Vivid 15.04 Ubuntu Trusty 14.04 (LTS) 上記のバージ…

MacでDocker環境構築

概要 MacでDocker環境を構築するためのメモです。 バージョンアップでも同じ進め方になります。 最新版は以下で確認します。 Release notes 環境 Docker 1.9.1 Docker Machine 0.5.1 Docker Compose 1.5.0 Docker Toolboxのインストール WindowsとMacにはAll…

コマンドラインでVirtualBoxのポートフォワード設定

概要 Dockerを開発環境に使う上でポートフォワードをする際、GUIからやるよりコマンドラインでできたほうが嬉しいので調べてみました。 環境 VirtualBox v5.0.8 使用するVMの名前はdevとします。 コマンド 追加 VBoxManage controlvm "VM名" natpf1 "ルール…

Weave を使ってマルチホスト間でのコンテナ通信を行う

概要 複数コンテナ間の通信は、シングルホストではdockerのlink機能を使います。 しかしこの機能はマルチホストでは使えないので、擬似的にコンテナ群を同一ネットワーク上に置くことの出来るWeaveというツールを使います。 環境 Ubuntu 14.04 Docker 1.4.1 …

Figを使ってみる

概要 Figというyamlファイルを用いて複数のDockerコンテナを一元管理するツールを使ってみます。 環境 Ubuntu 14.04 Docker 1.4.1 Fig 1.0.1 インストール 事前準備 FigはDocker 1.3以上で動作します。CoreOSや通常のaptなどでインストールできるバージョン…

Dockerfile で cd が効かない

環境 Ubuntu 14.04 Docker 1.3 現象 Dockerfile に RUN cd /hoge/fuga RUN ./piyo といった形で実行したところ「piyo なんてファイルはありません」と怒られた。

nsenter で簡単にDockerコンテナの中に入る

Vagrant と違って Docker コンテナって容易には中にアクセスできないですよね。 かと言って不要なSSHデーモンを入れるのもちょっとおかしい。 そこで便利なのが nsenter というツールです。ちなみにこれインストールも docker を使うというちょっとおもしろ…

Dockerfile を作る

前回は docker のコマンドを叩いて試してみました。 今回は Dockerfile なるものを作ってコンテナを起動してみます。 Dockerfile の中で使われるコマンドは以下です。 コマンド 用途 FROM 元となるDockerイメージの指定 MAINTAINER 作者名 RUN ビルド時のコ…

Docker を使ってみる

コンテナー管理ソフトウェアの Docker を使ってみます。 「どっかーって何?」って方はこちらを参考にしてください。 アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識 Docker の開発は Ubuntu で進められているので、今回ホストのOSはUbuntu…