LoginSignup
42
54

More than 5 years have passed since last update.

Docker for Macで開発環境を構築してみた

Posted at

Docker Advent Calendar 2016 3日目の記事です。
そして実は私の初投稿記事です。よろしくお願いします:bow:

やったこと

  • Vagrantで作っていた開発環境をDockerに変えてみた

動機

  • 最近周りで「Dockerが〜」、「Dockerの~」とやたら名前を聞くようになった。
  • そんなに良いならとりあえず使ってみるか。
  • 特にVagrantに不満があったわけではないが、強いて言えば起動が遅いので早くなるといいなぁという感じ

Docker for Macの導入

というわけで早速進めていきます。
まずはインストールします。下記コマンドで特に問題起きずにインストールできました。

brew cask install docker

Launchpadの中にクジラがいるのでクリックしてみると…
スクリーンショット 2016-12-03 7.47.41.png
おぉ、無事にインストールできてる。(かわいい…)
Nextを押すと
スクリーンショット 2016-12-03 7.52.35.png
ネットワークコンポーネントとDockerアプリケーションへのリンクをインストールするために権限くれと言ってくるのであげる。(目が…怖い…)

スクリーンショット 2016-12-03 8.01.51.png
そうすると上部メニューバーにクジラが出現する。これでDocker起動できている状態の模様。(やっぱりかわいい…)
コマンドラインからversionを確認してみる

$ 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

インストールできた!

なにはともあれHelloWorld

何事も挨拶からということでとりあえずHelloWorldします

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
...
Hello from Docker!
This message shows that your installation appears to be working correctly.
...

ということで挨拶完了!
以下のコマンドで実行履歴が確認できる

docker ps --all

imagesにhello-worldが入っていることも一応確認

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              c54a2cc56cbb        5 months ago        1.848 kB

開発環境構築

いよいよ開発環境を構築していきます。なお、私の場合はCentOSを使う事が多いのでCentOS6系を構築してみます。
ローカル環境からansibleで環境構築したいので、sshできるようコンテナを作ります。
まずはCentOSのイメージをとってくる

docker pull centos:6.8

次に適当な作業ディレクトリを作ってDockerfileを作成。

FROM centos:6.8

ENV container docker

RUN \
  (echo 'include_only=.jp' >>/etc/yum/pluginconf.d/fastestmirror.conf) \
  && yum -y update \
  && yum -y reinstall glibc-common \
  && yum clean all \
  && cp -f /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ENV LANG ja_JP.UTF-8

RUN \
  yum -y install openssh-server openssh-clients passwd sudo \
  && yum clean all \
  && sed -ri 's/^#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config \
  && sed -ri 's/^GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/sshd_config \
  && sed -ri 's/^UsePrivilegeSeparation sandbox/UsePrivilegeSeparation no/' /etc/ssh/sshd_config \
  && sed -ri 's/^UsePAM yes/UsePAM no/' /etc/ssh/sshd_config \
  && chkconfig sshd on

RUN \
  (echo "root" | passwd root --stdin) \
  && groupadd docker \
  && useradd -g docker docker \
  && (echo "docker" | passwd docker --stdin) \
  && sed -i 's/Defaults.*requiretty/#Defaults requiretty/g' /etc/sudoers \
  && ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key \
  && ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key \
  && sed -ri 's/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/g' /etc/pam.d/sshd \
  && (echo "docker ALL=(ALL) NOPASSWD: ALL" >/etc/sudoers.d/docker)

CMD ["/sbin/init"]

こんな感じ。
そのディレクトリ内で下記のコマンドを実行

$ docker build --rm -t local/centos6 .
  • --rm でビルド成功後、中間コンテナを削除する
  • -t は作成するDockerイメージのイメージ名およびタグ名を指定する

すると新しいイメージができます。

 $docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
local/centos6       latest              1692f69b43bf        8 seconds ago       639.4 MB

CentOSコンテナを起動します。

docker run -d -p 22 -p 80 local/centos6 /sbin/init
  • -pで指定したportへのport forward
  • -dでコンテナをバックグラウンドで動かす

ポート情報をdocker psで確認する

 $docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                          NAMES
a34bbea488d2        local/centos6       "/sbin/init"        5 seconds ago       Up 4 seconds        0.0.0.0:32770->22/tcp, 0.0.0.0:32769->80/tcp   ecstatic_mayer

よし、sshします。(root/rootでログインする)

 $ssh -p 32770 root@127.0.0.1
root@127.0.0.1's password:
Last login: Sat Dec  3 13:03:58 2016 from 172.17.0.1
[root@a34bbea488d2 ~]#

できました!次にローカルからansibleも流します。

$ ansible-playbook -i "127.0.0.1:32770," -u root -k develop.yml

このplaybookは、LAMP環境をインストールするように作ったものです。
本当はコンテナを分けたほうがいいんだろうけど、今回は開発環境の移行なのでこれでいきます。
問題なく実行できたので、後は適当なファイルを/var/www/html配下においてブラウザからアクセスしてみる

スクリーンショット 2016-12-03 13.41.31.png

ということでまだ改善点はあるけど、とりあえず開発環境が出来ました。

参考情報

大変参考にさせて頂きました。ありがとうございました。
Docker for Mac
MacにインストールしたDocker上のCentOSでTomcatを動かす
Docker で SSH 接続可能なコンテナ (CentOS) を作成する
docker buildのオプションまとめ
Dockerでagent forwardingが有効な開発環境の構築 (OS X)
Dockerfileとdocker buildコマンドでDockerイメージの作成
Dockerで固定IPアドレスを使う。
docker runの便利なオプション
Dockerで立てたコンテナにsshで接続する

42
54
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
54