動かざることバグの如し

近づきたいよ 君の理想に

Dockerめも

インストール

Docker公式サイトが詳しかったりする

sudo curl -sSL https://get.docker.io/ubuntu/ | sudo sh

ただこのやり方だとバージョンの管理が面倒 公式レポジトリはバージョンが古すぎ 非公式レポジトリを利用する場合は以下

sudo add-apt-repository ppa:docker-maint/testing
sudo apt-get update
sudo apt-get install docker.io

レポジトリからインストールした場合は自分のユーザーをdockerグループに追加する必要がある(要再起動)

adduser thr3a docker

以下のコマンド実行しておくと最後に起動したコンテナIDを「dl」で呼び出せるので便利

echo "alias dl='docker ps -l -q'" >> ~/.bashrc

Dockerの情報を取得

docker info

イメージのダウンロード

公式からUbuntuイメージをダウンロード

docker pull ubuntu

しかしこれだと10.04~14.04まですべてのバージョンを落としてしまう。最新版だけ落としたい場合は

docker pull ubuntu:latest

イメージ一覧表示

docker images

コンテナの流れ

くっそ分かりやすい図があったので

f:id:thr3a:20140818114508p:plain

Dockerにおけるコンテナのライフサイクル - めもめもから引用

起動

docker run -itd ubuntu /bin/bash
  • -dを付けないとデーモン化されない
  • 通常各コンテナに自動的にランダムな名前(hopeful_elionとか)付くけれど「--name hoge」で任意の名前が付けられる

起動中のコンテナ一覧表示

docker ps

停止中も含む全てのコンテナ一覧表示は-aをつける

docker ps -a

以下のdl(=最後に起動したコンテナID)の部分は任意の名前やIDでも可

コンテナに接続

docker attach `dl`

exitで殺せる

コンテナを起動

docker start `dl`

コンテナを停止

killもあるけど違いわからん

docker stop `dl`

コンテナを再起動

docker restart `dl`

コンテナを削除

docker rm `dl`

全コンテナ削除

docker rm `docker ps -a -q`

コンテナを別イメージとして保存

docker commit `dl` thr3a/hoge

Dockerfile構文

  • FROM ベースとなるイメージを指定
  • MAINTAINER メンテナの名前を指定
  • RUN コンテナのビルド中に実行したいコマンドを指定
  • CMD コンテナを起動したときに実行したいコマンドを指定
  • EXPOSE 外部に晒すポートの指定
  • ENV 環境変数の設定
  • ADD ファイルを配置

Dockerfileビルド

「thr3a/test」は生成するイメージ名

docker build -t thr3a/test .

Dockerfileでapacheサーバーまで

Dockerfileのなか

FROM ubuntu:14.04
MAINTAINER thr3a

#apt-getで設定画面を出さない
ENV DEBIAN_FRONTEND noninteractive

#環境変数
ENV USERNAME thr3a
ENV PASSWORD pass
ENV STARTRUN /etc/starting
ENV WWWDIR /var/www/html
#For Apache2
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2

#ユーザー作成(adduser不可)
RUN useradd $USERNAME
RUN echo "$USERNAME:$PASSWORD" | chpasswd
RUN mkdir /home/$USERNAME; chown $USERNAME:$USERNAME /home/$USERNAME
RUN adduser $USERNAME sudo
RUN adduser $USERNAME adm

#デフォルトのシェル変更
RUN chsh -s /bin/bash $USERNAME

RUN sed -i 's/archive.ubuntu.com/ftp.jaist.ac.jp\/pub\/Linux/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y --no-install-recommends vim wget curl git patch bash-completion openssh-server apache2 libapache2-mod-php5 php5 php-pear mysql-server php5-mysql
#SSH Serverの設定
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config

#Apache2の設定
RUN a2enmod php5
RUN a2enmod rewrite
RUN echo "<?php phpinfo();?>" > $WWWDIR/info.php
RUN chown -R www-data:www-data $WWWDIR

#PHPの設定
#RUN cd /etc/php5/apache2
#RUN wget http://kisu.me/zd && patch < zd

#MySQLの設定
RUN sed -i 's/\[client\]/\[client\]\ndefault-character-set = utf8/g' /etc/mysql/my.cnf
RUN sed -i 's/\[mysqld\]/\[mysqld\]\nskip-character-set-client-handshake\ncharacter-set-server = utf8\ncollation-server = utf8_general_ci\ninit-connect = SET NAMES utf8\n/g' /etc/mysql/my.cnf
RUN service mysql start && mysqladmin -u root password $PASSWORD

RUN echo "#!/bin/sh" >> $STARTRUN
RUN echo "service ssh start" >> $STARTRUN
RUN echo "service apache2 start" >> $STARTRUN
RUN echo "service mysql start" >> $STARTRUN
RUN echo "/bin/bash" >> $STARTRUN
RUN chmod +x $STARTRUN

#Clean
RUN rm -rf /var/lib/apt/lists/*

EXPOSE 22 80

buildして

docker run -itd --name piyo2 -p 10022:22 -p 10080:80 thr3a/test /etc/starting

DockerをWeb上で管理

DockerUIが現状便利 https://github.com/crosbymichael/dockerui