インストール
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
コンテナの流れ
くっそ分かりやすい図があったので
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