docker

A collection of 20 posts
Use Container Storage Interface (CSI) with Nomad
nomad

Use Container Storage Interface (CSI) with Nomad

今まで Nomad で DB 等のステートフルなワークロードを実行したい場合、以下のような選択肢がありました。 * host_volume スタンザを使用し、ホストのボリュームを使用する。 * Docker を使用したタスクの場合は volumes パラメータを使用し同様にホストのボリュームをマウントして使用する。 しかし、上記の方法はホスト間でのデータを同期しないため、例えばタスクが終了後他のノードでタスクが再起動された場合にデータを保持することができません。 また、ephemeral_disk スタンザというものがあります。こちらの migrate パラメータを有効にすると、タスクを元のノードに配置できない場合にデータをホストを越えて移行することができます。しかし、以下の制約があります。 * データの移行はベストエフォートで行われるため、データは失われる可能性がある。 * 大きいサイズのデータには適していない。 * そもそも想定された使い方はホスト間でのデータの共有ではなく、その名前の通りグループ内で一時的な共有スペースを持つことである。 従って永続的
9 min read
Script to manage blog
ghost

Script to manage blog

現在このブログを Nomad のタスクとして Docker で動かしています。 Nomad クラスター上で Ghost ブログを動作させるこのブログは数年間単一のサーバーで稼働していました。 学習も兼ねてわざわざ自前でサーバーを運用していたのですが、最近新しい構成に移したくなり、Kubernetesの流行もあってクラスターやマイクロサービスといった時代の流れに乗るべく、Nomad クラスターへの移行を行いました。 Nomad クラスターの作成までは下記記事にまとめています (インフラやクラスターの設定等はここからさらに変更しています)。 * Nomad クラスターを作成する [https://blog.lorentzca.me/create-nomad-cluster-on-digitalocean/] 今回は…ゆるふわキャンパーLorentzca が、現在の構成だとブログの更新が面倒…。ローカルに Docker イメージを持ってきてブログを更新、docker commit, docker push する必要があります。push 後サーバーにログインし Nomad タスクを書き換え
2 min read
Mounting Docker volumes into Nomad tasks allocation directory
nomad

Mounting Docker volumes into Nomad tasks allocation directory

Nomad はグループ (タスクの集まり) 内で共有可能なディレクトリを提供しておりタスクからは環境変数 NOMAD_ALLOC_DIR または /alloc ディレクトリを直接参照することで使用可能です。 * Environment - Runtime | Nomad by HashiCorp また Nomad のタスクは Docker が使用できます。 * Drivers: Docker | Nomad by HashiCorp そこで、Docker コンテナの生成物をタスク間で共有できないか試したのですがすんなりできなかったのでメモ。 構成 以下のようなバッチジョブの構成で試します。 * Docker ドライバーを使用したタスクで成果物を作成。 * 後続の Exec ドライバーを使用したタスクで成果物を使用 なおこのようなタスク間に依存関係を持たせたい場合、現在 Nomad の機能としては存在しないので以下のように何かしらの工夫をする必要があります。 * Nomad ジョブのタスク間の依存関係をどのように実現するか考える 課題
2 min read
Run Let's Encrypt client with Nomad job
nomad

Run Let's Encrypt client with Nomad job

SSL 証明書の取得の自動化を可能とするプロトコルとして ACME (Automated Certificate Management Environment) がありこれの実装として Let’s Encrypt というサービスがあります。 Let’s Encrypt のクライアントとしては certbot や lego があります。どちらも以下のように Docker イメージが公開されており、つまり Nomad のジョブとして簡単に動かすことが可能です。 * Docker Hub - certbot * Docker Hub - lego certbot と lego の大きな違いは lego は Go で書かれておりバイナリ一つという手軽さがあるという点です。Docker を使うなら関係ないですが…。 今回 Nomad のバッチジョブとして lego を動かしてみたのでメモします。 モチベーション
6 min read
Run mackerel-agent as a Nomad job
nomad

Run mackerel-agent as a Nomad job

最近ブログを動かしている環境を単一のサーバーから Nomad クラスターへと変更しました。 * Nomad クラスター上で Ghost ブログを動作させる 以前からサーバーの監視を Mackerel を用いて行なっており、今回もクラスターを構成するノード上で mackerel-agent を起動し、監視を行います。 ただし、 Nomad のジョブとして動かしてみます。 Nomad のジョブとして mackerel-agent を動かす 今までは単一の VPS を使っていたので mackerel-agent は普通にサーバーにインストールしていました。 * CentOS / RedHat にインストールする - Mackerel ヘルプ 今回 Nomad を使うにあたりどのように mackerel-agent をインストールするか考えていて、普通にサーバーにインストールしても良いのですが、サーバーには Nomad とその関連パッケージ以外は入れないのが筋が良いと思うので、Nomad ジョブとして mackerel-agent を動かすことにしました。 macker
2 min read
Running Ghost blog on Nomad Cluster
nomad

Running Ghost blog on Nomad Cluster

このブログは数年間単一のサーバーで稼働していました。 学習も兼ねてわざわざ自前でサーバーを運用していたのですが、最近新しい構成に移したくなり、Kubernetes の流行もあってクラスターやマイクロサービスといった時代の流れに乗るべく、Nomad クラスターへの移行を行いました。 Nomad クラスターの作成までは下記記事にまとめています (インフラやクラスターの設定等はここからさらに変更しています)。 * Nomad クラスターを作成する 今回はこの Nomad クラスター上で Ghost を動かすところまでをまとめます。 構成 以下の通り、DigitalOcean のマネージドロードバランサー配下に Droplet を 3台配置し、クラスターを構成しています。 クラスターを構成するノードではそれぞれ Nomad と Consul が稼働しており、Consul でサービスディスカバリーを、Nomad でワークロードオーケストレーションを行なっています。 稼働しているジョブ Nomad はジョブという単位でワークロードを定義します。ジョブの中にさらに複数のグルー
7 min read
Vuls on CircleCI
vuls

Vuls on CircleCI

Vuls 祭りで Vuls モチベーションが上がったので何かやってみよう! * Vuls祭り#3に参加してきました というわけで CircleCI から Vuls を定期実行してみました。 脆弱性の継続的インテグレーション! やり方 主な方針。 * vuls, go-cve-dictionary, goval-dictionary 全部入りの Docker イメージを用意する * 公式で各コマンドの Docker イメージがあるがこれを使わない理由は後述 * CircleCI 2.0 の Scheduled Workflow を使って定期実行する vuls, go-cve-dictionary, goval-dictionary 全部入りの Docker イメージを用意 各コマンドを利用できる Docker イメージを用意します。 * lorentzca/vuls-and-dictionary 公式の Docker イメージを使わないのは以下の理由です。 * vuls コンテナを実行する際に .ssh/kn
2 min read
Moved from Arukas to hyper.sh
arukas

Moved from Arukas to hyper.sh

Arukasのベータサービスが終了したので移住先を探さねばなりません。 * Arukas βサービス提供終了に関するお知らせ – Arukas そこで、少し前に会社のSlackでDockerマンが呟いてるのを見てオッとなったhyper.shを使ってみます。 * Hyper.sh - On-demand Container, Per-Second Billing hyper.shもArukasのようなContainer-as-a-Serviceで、特徴は通常のLinuxコンテナは同一ホスト上のカーネルから複数立ち上げるのに対し、hyper.shはコンテナ毎に独立したカーネル上で動かしている点です。これにより、セキュアなコンテナ環境の提供を可能にしているようです。 また、コンテナの利点である起動スピードを殺さないように特別なハイパーバイザが使われているようです。 * What is Hyper.sh | Hyper.sh User Guide あとはDockerボリュームを使えるのがありがたい(Arukasはβ版なのもありボリュームを使えなかった)。
5 min read
Automatically build Docker images
docker

Automatically build Docker images

Docker Hubには自動ビルド機能があって、GitHubに対して行われたアクション(ブランチの作成、マスターへのマージ)を契機にDocker Hub側でイメージの自動ビルドを走らせることが出来ます。 以下のようなメリットがあります。 * Docker HubにDockerfileを設置することができる * GitHubリポジトリのdescriptionやREADMEを読み込んで自動的にShort DescriptionとFull Descriptionを埋めてくれる * イメージに対し自動でタグ付けしてくれる * 手元でビルドを実行しpushする手間が省ける Dockerfileはこんな感じで表示されます。 今回は以下のような前提のもと、設定を行いました。 * 既にGitHubリポジトリが存在している 大まかな流れは以下です。 * GitHubとDocker Hubを接続する * Automated Buildの設定をする * 1回目のビルドを手動で行う 自動ビルド設定の手順 GitHubとDocker Hub
3 min read
AWS CLI on Docker
aws

AWS CLI on Docker

先日パイセンとAWS CLIをCircleCIから実行したいときにawsコマンドが使えるdockerイメージがあれば便利かもねみたいな話をしたので作ってみました。 既に同様のものはDocker Hubにありましたが最近自分でDockerイメージ作っていなかったのもあるので練習も兼ねて…。 * GitHub - lorentzca/aws: AWS CLI on Docker. Docker Hubはこちら。 * lorentzca/aws 用途としては以下のような場合に使いたい。 * CircleCIなどで手軽にawsコマンド使いたい場合に使えそう * Dockerから実行したい(環境を汚したくないとかで) pip入れるのが昔より楽だったので特に躓く箇所はなかった。 FROM alpine ARG pip_installer="https://bootstrap.pypa.io/get-pip.py" # Install dependent packages RUN apk --update add \ python \ cu
1 min read
Use argument in Dockerfile
docker

Use argument in Dockerfile

Dockerfile内で例えば RUN wget https://releases.hashicorp.com/consul/0.7.2/consul_0.7.2_linux_amd64.zip みたいなことをする場合、バージョンの部分を変数にできないか調べた(バージョン上げる度に複数ヶ所直すのが面倒)。 ARGインストラクションを使えばよさそう。 * Dockerfile reference - ARG ARGインストラクションはdocker build時に使用可能な変数で、コンテナに環境変数を設定するENVインストラクションとは性質が異なる。 * Dockerfile reference - ENV ARGは以下のようにして使える。 ARG version="0.7.2" RUN wget https://releases.hashicorp.com/consul/${version}/consul_${version}_linux_
1 min read
Deploy Docker images to Heroku
arukas

Deploy Docker images to Heroku

herokuに好きなコンテナデプロイ出来るようになったらしいので試した!! この記事を受けて試してみた 会社で遊んでた(定時後ですよ!)ので社内向けのqiita teamに書いたんだけどべつに機密でもないので個人ブログに移す! 先に結論 herokuはあくまでPaaSであり、CaaSではない! 確かに好きなコンテナプッシュできるが、 あくまでWebアプリケーションのデプロイ方法の1つとして提供された機能 であり、 なんでもかんでも動かせるわけではなさそうだった(dnsサーバー立てたりvault立てたりはできなそう。pushまではできるけど) ※ もし動かせたらすまん → 動いたw ↓ 結論を書いたものの… コメントでvault動いた報告 (´°̥̥̥̥̥̥̥̥ω°̥̥̥̥̥̥̥̥`) 感謝 (´°̥̥̥̥̥̥̥̥ω°̥̥̥̥̥̥̥̥`) CaaSじゃねーか!(怒) 以下(早とちりした)結論に至るまでの道のり 任意のコンテナをプッシュしてみる ほんとに任意のコンテナプッシュできるのか!?vault乗ったコンテナプッシ
4 min read
Docker for Mac private beta
docker

Docker for Mac private beta

Docker for Macのプライベートβ招待きた! インストール時、defaultってvmイメージがあると中にあるコンテナのイメージを持ってきてくれた $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default - virtualbox Stopped Unknown dev - virtualbox Stopped Unknown スタート画面 メニュー。メニューのDashboardはkitematic起動だった mac上で直接docker動いてるv $ uname Darwin $ pgrep -fl docker 18665 /Applications/Docker.app/Contents/MacOS/com.docker.osxfs --addr unix:/var/
3 min read
Instance of Arukas is restarted on a weekly
arukas

Instance of Arukas is restarted on a weekly

Vault on Arukasで試してから、arukas使っているんだけど、 たまにコンテナURLやポートが変わっているし、データも消えている。コンテナが再起動しているような… やだな〜、こわいな~と思い運営さんに右下からメッセージを送ろうとしたら… 右下の窓はチャット的なサポートツールではなく、ヘルプの検索窓だった! 気を取り直し「再起動」で検索してみると、
Vault on Arukas
docker

Vault on Arukas

Vaultをdockerで動かしてみた * GitHub - Lorentzca/vault_on_docker: use vault on docker * DockerHub - lorentzca/vault_on_docker これをプロダクションぽい感じで動かしたくって、herokuを使って見ようと思ったんだけど色々制約があり(というか好きに作ったコンテナを動かすのはherokuの使い方じゃない感じ)のでなんかないかな〜と思ったらArukas|Dockerホスティングサービスなるものが! まだβ版で恐らく今後は有料になりそうなプランもまだ無料で使える こんな感じ 簡単にコンテナを動かせるのでいい感じだった dockerhubにあるvaultのイメージを指定したりポートを指定したり。環境変数やコマンドも必要なら設定できる 立ち上がるとurlが発行される こんな感じでvaultが使えるようになる! $ curl -s -X PUT -d '{ "secret_shares": 6, "secret_threshold": 5
1 min read
github

You may be getting rate limited by Github

docker-machinアップグレードしようとしたらこんなエラーが $ docker-machine upgrade dev Detecting the provisioner... Downloading latest boot2docker iso... Error demarshaling the Github API response: json: cannot unmarshal object into Go value of type []struct { TagName string "json:\"tag_name\"" } You may be getting rate limited by Github. どうやら制限がかかったらしい GitHubのトークンを指定してあげればOK $ docker-machine --github-api-token=<トークン> upgrade dev Detecting the provisioner.
1 min read
coreosのisoイメージファイルからdockerベースイメージを作ってみた
docker

coreosのisoイメージファイルからdockerベースイメージを作ってみた

この記事はフィードフォースエンジニア Advent Calendar 2015、7日目の記事です。 6日目はtjinjin氏のオフィス移転に向けてインフラエンジニアが検討したことでした! 改めましてこんにちは。アウトドア派のLorentzcaです。 先日、会社の忘年会が中華レストランでありまして、私は体調がベストではなかったのですがそんなことは気にせず紹興酒をたくさん飲んだところ次の日体調も良くなり酒も残っていなかったので紹興酒は体にいいことがわかりました。これからも機会を逃さず紹興酒を口にしていこうと思います。 さて、今回の記事のネタとして、「coreosのisoイメージファイルからdockerベースイメージを作ってみた」を考えておりました。 既存のdockerのベースイメージから新しいイメージを作成する方法に関してはやり方を書いた記事もたくさんあり、わかりやすい公式のドキュメントもあるのですが、 大元となるdockerベースイメージそのものの作成方法に関してはあまり情報がなく(あるにはあるのですが特定のディストリビューションに限定されている)、面白そうだった
4 min read
Trying out Kitematic
mac

Trying out Kitematic

DockerからKitematicというプロダクトがリリースされたよ〜とメーリングリストで来たのでインストールしてみた インストールする前は The easiest way to use Docker on your Mac. という文面しか見ていなかったので、boot2docker使っていたんですが、乗り換えられるかなというイメージを持っていた 実際はDockerコンテナを非専門家でも使えるようにした学生プロジェクトKitematicをDockerが買収 の記事にあるように、非専門家向け インストール 公式サイトからzip落としてきて展開するだけ(Kitematic(Beta).appが出てくる) もしくはbrew cask使って入れられるっぽい(試してない) $ brew search kitematic Caskroom/cask/kitematic 起動 起動すると既にイメージが幾つか入っている boot2dockerと同じく、vmが立ち上がってその中でdockerを動かす感じ Kitematicはホスト
2 min read
Create docker cluster by fig
docker

Create docker cluster by fig

figでdockerのクラスタを作成するチュートリアルをやった! Macでやった webとdbで別々のコンテナを使って、railsを動かす boot2dockerインストール・起動 インストール $ brew install boot2docker boot2docker立ち上げ $ boot2docker init $ boot2docker start $ $(boot2docker shellinit) figインストール $ brew install fig Dockerfile作成 * rubyのイメージを使う * 必要なパッケージ入れる * myappディレクトリ作成 * ワーキングdirectoryを設定 * ローカルのGemfileをコンテナに配置 * bundle installする * myappディレクトリをコンテナに配置 FROM ruby RUN apt-get update -qq && apt-get install -y build-essential libpq-dev RUN
2 min read
Create Debian7 docker image
debian

Create Debian7 docker image

Docker importでイメージの作成をしてみた。debian7のvm内で作業した dockerインストール debian7ではapt-get install docker.ioでインストールできなかった… https://docs.docker.com/installation/debian/のDebian Wheezy/Stable 7.x (64-bit) の方法で入れた vagrant@packer-debian-7:~/debian-wheezy$ sudo echo "deb http://http.debian.net/debian wheezy-backports main" >> /etc/apt/sources.list vagrant@packer-debian-7:~/debian-wheezy$ sudo apt-get update vagrant@packer-debian-7:~/debian-wheezy$ sudo apt-get install
2 min read