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

Dockerで開発環境を作る

毎回作るのも大変なので、Dockerで開発環境を作れるようにしておく。

以下の設定をかなり参考にさせてもらった。

qiita.com

git cloneにかなり戸惑ったがこのサイトの設定どおりでいけた。

qiita.com

パスワードやtokenは変数化。

qiita.com

FROM ubuntu:latest
MAINTAINER Makoto Kataigi mkataigi@gmail.com

RUN apt-get -y update && apt-get -y upgrade

# fuse workaround
RUN chmod go+w,u+s /tmp
RUN apt-get install -y libfuse2
RUN mkdir /tmp/fuse \
  && cd /tmp/fuse \
  && apt-get download fuse \
  && dpkg-deb -x fuse_* . \
  && dpkg-deb -e fuse_* \
  && rm fuse_*.deb \
  && echo -en '#!/bin/bash\nexit 0\n' > DEBIAN/postinst \
  && dpkg-deb -b . /fuse.deb \
  && dpkg -i /fuse.deb \
  && cd / \
  && rm -rf /tmp/fuse /fuse.deb
RUN dpkg-divert --local --rename --add /sbin/initctl && rm -f /sbin/initctl && ln -s /bin/true /sbin/initctl

# packages
RUN apt-get install -y language-pack-ja
RUN apt-get install -y zsh tmux git vim
RUN apt-get install -y wget unzip curl tree
RUN apt-get install -y openssh-server
RUN apt-get autoremove && apt-get clean
RUN dpkg-reconfigure openssh-server

# setup root
RUN echo 'root:root' |chpasswd
RUN locale-gen en_US en_US.UTF-8 &&  locale-gen ja_JP ja_JP.UTF-8 && dpkg-reconfigure locales

# setup ssh
RUN mkdir /var/run/sshd
RUN sed -i 's/.*session.*required.*pam_loginuid.so.*/session optional pam_loginuid.so/g' /etc/pam.d/sshd
RUN /bin/echo -e "LANG=\"ja_JP.UTF-8\"" > /etc/default/local

# add user
ARG userpasswd="userpassword"
RUN useradd -m mkataigi -g users -s /bin/zsh
RUN echo 'mkataigi:$userpasswd' | chpasswd
RUN echo "mkataigi ALL=(ALL) ALL" >> /etc/sudoers

ADD id_rsa_app /home/mkataigi/id_rsa_app
ADD id_rsa.pub /home/mkataigi/id_rsa.pub
RUN cat /home/mkataigi/id_rsa.pub >> /home/mkataigi/authorized_keys

RUN mkdir /home/mkataigi/.ssh \
  && mv /home/mkataigi/id_rsa_app /home/mkataigi/.ssh/id_rsa \
  && mv /home/mkataigi/id_rsa.pub /home/mkataigi/.ssh/id_rsa.pub \
  && mv /home/mkataigi/authorized_keys /home/mkataigi/.ssh/authorized_keys \
  && chmod 400 /home/mkataigi/.ssh/id_rsa \
  && chmod 700 /home/mkataigi/.ssh \
  && chown -R mkataigi:users /home/mkataigi/.ssh

RUN mkdir /home/mkataigi/repo \
  && chown -R mkataigi:users /home/mkataigi/repo

# Setup
USER mkataigi
ENV HOME /home/mkataigi
WORKDIR /home/mkataigi/repo
ARG githuboauthtoken
RUN git clone https://$githuboauthtoken:x-oauth-basic@github.com/mkataigi/devenv.git
RUN /home/mkataigi/repo/devenv/bin/init_myenv.sh -f

# Start
USER root
EXPOSE 22
CMD /usr/sbin/sshd -D

https://github.com/mkataigi/devenv/blob/master/Dockerfile

MySQLのDocker作成

作成

MySQLのデータコンテナをマウントして、MySQLコンテナを作る。 rootパスワードは後で適当に変える。

$ docker pull mysql
$ docker pull busybox

$ docker run -v /var/lib/mysql --name mysql_data busybox
$ cat mymysql.conf
[mysqld]
character-set-server=utf8

$ docker run --volumes-from mysql_data -v `pwd`:/etc/mysql/conf.d -d --name mysqld -e MYSQL_ROOT_PASSWORD=secret mysql

接続の確認

$ docker run --link mysqld:mysql -it --rm mysql bash
# mysql -u root -psecret -h $MYSQL_PORT_3306_TCP_ADDR

MySQLに接続できるコンテナ

$ docker run --volumes-from mysql_data --link mysqld:mysql -it -d --name app01 --rm ubuntu
$ docker exec -it app01 bash
# apt-get update
# apt-get install -y mysql-client
# mysql -h MYSQL_PORT_3306_TCP_ADDR -uroot -p

参考

dqn.sakusakutto.jp

qiita.com

GCPの個人利用

今回やること

GCPの無料枠で基本的な操作をしてみる。 GCPチュートリアルを実施してみる。

https://cloud.google.com/sdk/auth_success

初期設定

チュートリアル

Quickstart for Node.js in the App Engine Flexible Environment

node.jsのサンプルコードをApp Engineにアップロードする。

参考

https://cloud.google.com/sdk/auth_success

AWSの個人利用

今回やること

AWSを使ってみる。 高いので個人で無料枠でできる範囲で。

AWSの学習コースがあるので、それをやってみる。

https://console.aws.amazon.com/console/home

初期設定

IAMの設定

指示される通りに作成して、rootアカウントをなくす。

https://console.aws.amazon.com/iam/home

Trusted Advisorで無料枠アラート設定

アクセスしたら勝手に設定された。

https://console.aws.amazon.com/trustedadvisor/home

料金監視

ここも書いてある通りに設定。

https://console.aws.amazon.com/billing/home

チュートリアル

Hosting a Static Website

staticファイルをS3にアップロードしてブラウザから確認するまで。

S3の設定周りの練習。

資料

公式資料

aws.amazon.com

aws.amazon.com

https://console.aws.amazon.com/console/home

Docker基本

今回やること

基本中の基本を理解して、dockerを動かせるところまで。

Dockerとは

ざっくりと高機能なchrootだとでも理解しておけば、当面は良さそう。

調べたこと

以下調べた内容。

始め方

コンテナのイメージをダウンロードしてきて展開しているのかな。

$ docker run <image>

でイメージがダウンロードされてそのまま実行される。 基本実行するとすぐ終了してしまうので、プロンプトがすぐ返ってくる。 -dオプションを作るとバックグラウンドでどうさしっぱなしにできて、-itでインタラクティブなttyに接続できる。

$ docker run -d <image>
$ docker run -it <image>

ダウンロードされているイメージの一覧も確認できる。

$ docker images

起動中のコンテナとストップしているものも含めた全コンテナの見方。

$ docker ps
$ docker ps -a

起動

一度作成したコンテナはstartで開始できる。 -aiでインタラクティブにしてattachしないとすぐ終了してしまう。

$ docker start -ai <container>

反対にstopで停止できる

$ docker stop

接続

起動中のdockerに繋ぐには以下。 bashを起動させてそこに繋ぐって感じかな。

$ docker exec -it <container> /bin/bash

Dockerfile

Dockerファイルを使ってオリジナルのDockerイメージを作れる。 書き方の詳細は以下を参照。

docs.docker.com

FROMでベースになるイメージを指定。RUNでそこから追加となるコマンドを書いていく。ENTRYPOINTで初期実行するコマンドを書くのかな。 buildでビルド。

$ docker build -t <image> .

Docker hub

Dockerのイメージをpushすることができる。 自分のローカルで作ったイメージもpushできるが、Dockerファイルを作った場合は、auto buildもできる。

https://hub.docker.com/u/mkataigi1/

まだよくわかっていないところ

ネットワークの使い方。 いわゆるethとかとは違う?

VOLUMEの使い方。 これは単なるマウントかな。

資料

調べたサイトなど。

ここが一番わかりやすかった。

qiita.com

その他読んだ資料。

paiza.hatenablog.com

www.atmarkit.co.jp

dev.classmethod.jp