読者です 読者をやめる 読者になる 読者になる

時と場合によりけり

日々のアップデートとイノベーションに翻弄され彷徨える IT エンジニアの覚書

Swift 3 の剰余(割り算の余り)

Swift

Float の場合

細かい話ですが、Swift 3 の剰余についてです。

Swift 2 の場合は、変数の型を Float にした場合、以下のコードで余り1を取得できていたと思うのですが、Swift 3 では truncatingRemainder を使えというエラーが出ました。

let x: Float = 10.0 % 3.0

truncatingRemainder とは何ぞや?というわけでググったところ以下が出てきました。

truncatingRemainder(dividingBy:) - FloatingPoint | Apple Developer Documentation

上記サイトを参考にした、正解コードは以下となります。

let x: Float = 10.0
x.truncatingRemainder(dividingBy: 3.0)

これで1という余りを取得できました。

Int の場合

ついでですが、型が Int の場合は、Swift 3 でも、以下のような今までの書き方で OK のようです。

let x: Int = 10 % 3

以上です。

macOS Sierra に Docker for Mac で Amazon Linux を導入する

AWS Docker Homebrew Mac EC2

概要

公式 Amazon Linux が、ようやく Dockerhub に登録されましたね。

https://hub.docker.com/r/_/amazonlinux/

Docker for Mac を使って、ローカル環境に Amazon Linux をインストールして、仮想 EC2 を作ってみましょう。Docker for Mac のインストールについては、以下のエントリーをご参照ください。

stangler.hatenablog.com

ハードウェア

  • マシン: Macbook Pro Early 2011
  • メモリ: 16 GB
  • ストレージ: SSD 512 GB

ホスト

  • OS: macOS 10.12.1 Sierra
  • Docker for Mac Version 1.12.3

ゲスト

ディレクトリ作成

まずは作業するディレクトリをローカル環境に作ります。今回は、ec2 という名前にします。

% mkdir ec2
% cd ec2

docker-compose.yml

後々、冗長構成にすることも考慮して、docker-compose を使用することにします。

% vim docker-compose.yml
version: '2'
services:
  ec2:
    image: amazonlinux
    command: tail -f /dev/null
    container_name: ec2

tail -f /dev/null は、コンテナが起動し続けるようにするためのおまじないです。

コンテナ起動

% docker-compose up -d
Creating network "ec2_default" with the default driver
Pulling ec2 (amazonlinux:latest)...
latest: Pulling from library/amazonlinux
67b04f48477e: Downloading [>                                                  ] 67b04f48477e: Downloading [>                                                  ] 67b04f48477e: Downloading [>                                                  ] 67b04f48477e: Downloading [=>                                                 ] 67b04f48477e: Downloading [=>                                                 ] 67b04f48477e: Downloading [=>                                                 ] 67b04f48477e: Downloading [=>                                                 ] 67b04f48477e: Downloading [==>                                                ] 67b04f48477e: Downloading [==>                                                ] 67b04f48477e: Downloading [==>                                                ] 67b04f48477e: Downloading [==>                                                ] 67b04f48477e: Downloading [===>                                               ] 67b04f48477e: Downloading [===>                                               ] 67b04f48477e: Downloading [===>                                               ] 67b04f48477e: Downloading [===>                                               ] 67b04f48477e: Downloading [====>                                              ] 67b04f48477e: Downloading [====>                                              ] 67b04f48477e: Downloading [====>                                              ] 67b04f48477e: Downloading [=====>                                             ] 67b04f48477e: Downloading [=====>                                             ] 67b04f48477e: Pull complete
Digest: sha256:ec8257763aea7bd6cefce8d217deaf1b184426d3ab5fda2f98428921107cb72e
Status: Downloaded newer image for amazonlinux:latest
Creating ec2

コンテナ確認

コンテナの状態を確認します。

% docker-compose ps
Name        Command        State   Ports
----------------------------------------
ec2    tail -f /dev/null   Up

バージョン確認

シェルでコンテナの中に入って、インストールされた OS のバージョンを確認して見ます。

% docker exec -it ec2 bash
# cat /etc/system-release
Amazon Linux AMI release 2016.09

無事に Amazon Linux がインストールされた模様です。

docker イメージの確認

何も手を加えない公式イメージのサイズを見てみましょう

% docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
amazonlinux         latest              57cfffcf4ff3        31 hours ago        328.3 MB

328.3 MB ですね。Alpine Linux とかに比べると大きいですが、許せる範囲だと思います。(ホストマシンのパワーにもよりますが。)

コンテナの停止と削除

最後にコンテナを落としておきます。

% docker-compose down

以上です。

macOS Sierra に Homebrew Cask で Docker for Mac をインストールする

Homebrew Mac Docker

概要

Docker for Mac を Homebrew Cask でインストールしてみます。Homebrew のインストールについては、以下のエントリーをご参照ください。

stangler.hatenablog.com

参考 URL

とりいそぎhomebrewでDocker for Mac 1.12をインストールする - TIM Labs

ハードウェア

  • マシン: Macbook Pro Early 2011
  • メモリ: 16 GB
  • ストレージ: SSD 512 GB

ソフトウェア

  • OS: macOS 10.12 Sierra
  • Docker for Mac Version 1.12.3

Homebrew でパッケージの詳細を確認

まず Homebrew で Docker を検索するといろいろと出てきます。

% brew search docker
boot2docker                              docker-machine
docker                                        docker-machine-driver-xhyve
docker-clean                             docker-machine-nfs
docker-cloud                             docker-machine-parallels
docker-compose                       docker-swarm
docker-gen
homebrew/completions/boot2docker-completion
homebrew/completions/docker-completion
homebrew/completions/docker-compose-completion
homebrew/completions/docker-machine-completion
homebrew/emacs/dockerfile-mode
homebrew/versions/docker111
homebrew/versions/docker171
Caskroom/cask/boot2docker-status
Caskroom/cask/boot2docker
Caskroom/cask/docker-toolbox
Caskroom/cask/docker
Caskroom/versions/boot2docker-status-beta
Caskroom/versions/docker-beta

見ただけでは、どれが Docker for Mac かわかりませんが、Caskroom/cask/docker が欲しいものなのです。確認のため詳細を見て見ましょう。

% brew cask info docker
docker: 1.12.3.13776
https://www.docker.com/products/docker
Not installed
From: https://github.com/caskroom/homebrew-cask/blob/master/Casks/docker.rb
==> Name
Docker for Mac
==> Artifacts
Docker.app (app)

名前のところが Docker for Mac となっていますね。

Docker for Mac インストール

% brew cask install docker
==> Downloading https://download.docker.com/mac/stable/1.12.3.13776/Docker.dmg
######################################################################## 100.0%
==> Verifying checksum for Cask docker
==> Moving App 'Docker.app' to '/Applications/Docker.app'
🍺  docker was successfully installed!

確認

/Applications/Docker.app にインストールされたので、Launchpad などで起動してください。 するとメニューバーにアイコンが表示されるようになります。

f:id:stangler:20161117141014p:plain

ターミナルからも確認して見ましょう。

% docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.12.3
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 0
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge null host overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 4.4.27-moby
Operating System: Alpine Linux v3.4
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.951 GiB
Name: moby
ID: AOOZ:SX3P:TKL2:42BW:MU7L:KN55:FHDU:E4EI:GEW3:RLRA:GQC4:NVKY
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 15
 Goroutines: 27
 System Time: 2016-11-17T05:12:47.490457361Z
 EventsListeners: 1
Registry: https://index.docker.io/v1/
WARNING: No kernel memory limit support
Insecure Registries:
 127.0.0.0/8

Alpine Linux で走らせているっぽいですね。
続いてバージョンも確認しておきましょう。

% docker version
Client:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:        Wed Oct 26 23:26:11 2016
 OS/Arch:      darwin/amd64

Server:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:        Wed Oct 26 23:26:11 2016
 OS/Arch:      linux/amd64

無事インストール完了です!