ためすう

docker を使ってみる (チュートリアル Part3: サービス)

2019-10-17

やったこと

docker を使ってみます。

チュートリアルの Part3 です。

調査

サービスとは、正に「本番環境におけるコンテナ」なのです。

docker-compose.yml の作成

プロダクションにおける Docker コンテナのあるべき挙動を定義します

docker-compose.yml

version: '3'
services:
  web:
    image: friendlyhello
    deploy:
      replicas: 5
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:
      - '80:80'
    networks:
      - webnet
networks:
  webnet:

Doker Swarm

Docker Swarm は Docker に対応するネイティブなクラスタリング用ツールです。Docker Swarm は標準 Docker API で操作できます。

コンテナを複数立ち上げる

$ docker swarm init
$ docker stack deploy -c docker-compose.yml getstartedlab

getstartedlab というアプリケーションの名前をつけています。

サービスの情報表示

$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                  PORTS
xxng7z8u0l7w        getstartedlab_web   replicated          5/5                 friendlyhello:latest   *:80->80/tcp

コンテナの一覧表示

$ docker container ls -q
d529dc4961e3
8c47e3a1207e
7e8a65af869f
4d03c61b387e
1e3780cdd23a

停止

$ docker stack rm getstartedlab

swarm は起動したまま

$ docker node ls
ID                            HOSTNAME                STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
l8th1njjpb5qd71epemf95ony *   linuxkit-025000000001   Ready               Active              Leader              18.09.2

swarm も停止

$ docker swarm leave --force

参考

Mac の launchctl を調べる

2019-10-17

やったこと

Mac の launchctl について調べます。

調査

launchd を使って、daemon、agent を管理するプログラムです。

plist の管理場所

~/Library/LaunchAgents         Per-user agents provided by the user.
/Library/LaunchAgents          Per-user agents provided by the administrator.
/Library/LaunchDaemons         System-wide daemons provided by the administrator.
/System/Library/LaunchAgents   Per-user agents provided by Apple.
/System/Library/LaunchDaemons  System-wide daemons provided by Apple.

puma-dev の場合

unload します

$ launchctl unload ~/Library/LaunchAgents/io.puma.dev.plist

puma-dev のプロセスを kill しても、消せなかったのですが、 これで制御することができました。

参考

docker を使ってみる (チュートリアル Part2)

2019-10-15

やったこと

docker を使ってみます。

チュートリアルの Part2 です。

調査

Dockerfile の定義

コンテナで何をするのかということを定義します。

Dockerfile

# 公式 Python ランタイムを親イメージとして使用
FROM python:2.7-slim

# 作業ディレクトリを /app に設定
WORKDIR /app

# 現在のディレクトリの内容を、コンテナ内の /app にコピー
ADD . /app

# requirements.txt で指定された必要なパッケージを全てインストール
RUN pip install -r requirements.txt

# ポート 80 番をコンテナの外の世界でも利用可能に
EXPOSE 80

# 環境変数の定義
ENV NAME World

# コンテナ起動時に app.py を実行
CMD ["python", "app.py"]

※ 下記ファイルも必要ですが、参考サイトを見てください。

  • app.py
  • requirements.txt

Docker イメージを作成

$ docker build -t friendlyhello .

アプリケーションを起動する

$ docker run -p 4000:80 friendlyhello
$ curl http://localhost:4000

確認

実行中のコンテナID 2a2ef4f0bd30 の確認

$ docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
2a2ef4f0bd30        friendlyhello       "python app.py"     8 minutes ago       Up 8 minutes        0.0.0.0:4000->80/tcp   confident_tu

Docker Hub のイメージを利用する

Docker Hub のイメージを使い nginx を起動します。

$ docker pull nginx:latest

Dockerfile

FROM  nginx:latest

# author
MAINTAINER  hoge

ADD default.conf /etc/nginx/conf.d

RUN echo "now building..."

docker-compose.yml

version: '3'
services:
  nginx:
    build: .
    ports:
      - "8080:80"
    volumes:
      - ./public:/usr/share/nginx/html

設定ファイルを空で用意します

$ touch default.conf

コンテナ起動

$ docker-compose up

コンテナに入る

nginx_nginx_1 はコンテナ名です。

$ docker exec -i -t nginx_nginx_1 bash

設定ファイルは default.conf と同じで空でした。

# cat /etc/nginx/conf.d/default.conf

参考

puma-dev を使ってみる

2019-10-15

やったこと

puma-dev を使ってみます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

$ rails --version
Rails 5.2.3

調査

セットアップ

$ brew install puma/puma/puma-dev

Mac OS でセットアップ

# Configure some DNS settings that have to be done as root
$ sudo puma-dev -setup
# Configure puma-dev to run in the background on ports 80 and 443 with the domain `.test`.
$ puma-dev -install

シンボリックリンクの設定

※ /path/to/my/app は実行したいアプリケーションです。

$ cd ~/.puma-dev; ln -s /path/to/my/app test

test.test でアプリケーションを閲覧することができます。

おまけ

ログを見る

$ less ~/Library/Logs/puma-dev.log

puma-dev を止める

$ puma-dev -stop

参考

docker を使ってみる (チュートリアル Part1)

2019-10-15

やったこと

docker を使ってみます。

チュートリアルの Part1 です。

調査

image

実行可能なパッケージであり、軽量で、単独で動作(stand-alone)します。

container

image を実行する環境のこと

Docker Engine (Docker の本体)

$ docker --version
Docker version 18.09.2, build 6247962

Docker Machine

Docker Machine は仮想マシン上に Docker Engine をインストールするツールであり、 docker-machine コマンドを使ってホストを管理します。

$ docker-compose --version
docker-compose version 1.23.2, build 1110ad01

Docker Compose

Compose は複数のコンテナを使う Docker アプリケーションを定義・実行するためのツールです

$ docker-machine --version
docker-machine version 0.16.1, build cce350d7

参考

html_safe を使おうとしたけど、非推奨だったので sanitize を使おう (Rails5)

2019-10-14

やったこと

html_safe を使ってみます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

$ rails --version
Rails 5.2.3

調査

ファイルを準備します。

app/controllers/tasks_controller.rb

class TasksController < ApplicationController

  def index
    @message = '<form><a href="#">ddd</a><br>ddd2</form>'
  end
end

app/views/tasks/index.html.erb

<%= @message %>
<hr>
<%= @message.html_safe %>
<hr>
<%= sanitize @message %>

出力結果

&lt;form&gt;&lt;a href="#"&gt;ddd&lt;/a&gt;&lt;br&gt;ddd2&lt;/form&gt;
<hr>

<form><a href="#">ddd</a><br>ddd2</form>
<hr>

<a href="#">ddd</a>
<br>
ddd2

html_safe より、sanitize が推奨されているようです。

form タグが表示されなくなっていることが分かります。

参考

開発環境の設定ファイルをバージョン管理する

2019-10-14

やったこと

開発環境の設定ファイルをバージョン管理します。

調査

バージョン管理するファイル確認

dotfiles というディレクトリで設定ファイルを管理しているとします。

今回は .bash_profile.vimrc を対象とします。

$ cd ~/dotfiles
$ tree -a .bash_profile .vimrc
.bash_profile [error opening dir]
.vimrc [error opening dir]

シンボリックリンクを適用する

link.sh

ln -sf ~/dotfiles/.vimrc ~/.vimrc
ln -sf ~/dotfiles/.bash_profile ~/.bash_profile
$ cd ~/dotfiles
$ link.sh

参考

unix コマンドを作る

2019-10-14

やったこと

自作の unix コマンドを作ります。

調査

スクリプトを作成する

/usr/local/bin/hoge

#!/bin/sh

echo "Hello"

権限設定

$ chmod a+x /usr/local/bin/hoge

実行

$ hoge
Hello

参考

make を使ってみる (unix)

2019-10-11

やったこと

make を使ってみます

確認環境

$ make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i386-apple-darwin11.3.0

調査

Makefile の作成

Makefile

all:
  @echo Hello1

make を実行する

$ make
Hello1

git の hook を使ってみる

2019-10-11

やったこと

git の hook を使ってみます

確認環境

$ git --version
git version 2.17.2 (Apple Git-113)

調査

pre-push をコピーする

$ cp .git/hooks/pre-push.sample ./.git/hooks/pre-push

pre-push 変更

先頭にコードを追加してみます。

./.git/hooks/pre-push

echo 999
echo "エラーが発生しました"
exit 1

... (下記省略)

push

$ git push origin master
999
エラーが発生しました
error: failed to push some refs to 'xxx.git'

push 出来なかったことが分かります。