Docker(Client version: 1.2.0、CentOS7の場合)

インストール

curl -sSL https://get.docker.com/ | sh

Docker Engine 最新版のインストール - Qiita

最新を入れるにはコマンドを叩く。

yum install docker

CentOS7からはDockerをサポートしているので、普通にyumで入ります。
が、こちらの場合は最新のDockerが使えないです。

Dockerの起動

systemctl start docker.service

dockerでCentOSのイメージを取得する

docker pull centos

タグを指定しない場合、最新のCentOSが入ります。
CentOS5からイメージ取得は可能のようです。

コンテナの起動

docker images

イメージの中からコンテナIDを探してくる

docker run --privileged -d -p 80:80 コンテナID /sbin/init

SELinuxが有効な場合、--privilegedがないとコンテナ内でsystemctlやserviceが扱えない模様。
あと-itで入る場合は--privilegedは有効にはならなさそう。


上記で起動に失敗する場合、コンテナをbashで起動して、fakesystemdをsystemdに変更する必要がある
上記はなくなったらしい

コンテナへのアクセス

docker exec -it コンテナID bash

これでログイン可能

docker exec -it コンテナID コマンド

これでコマンドが打てる。


参考:コンテナに入りたい?それ docker exec でできるよ - Qiita


dockerが1.3未満なら以下で。
前はsshを使ってアクセスしてたけど、最近ではnsenterを使うのが良いそうだ。

docker run --privileged --rm -v /usr/local/bin:/target jpetazzo/nsenter

初めて使う時だけ叩く。これでnsenterとdocker-enterコマンドが使えるようになる。

docker-enter コンテナID

これでdockerコンテナに入る事が出来る。複数ウインドウからアクセスするのもOK。


参考:CentOS 7のDockerコンテナ内でsystemdを使ってサービスを起動する - Qiita

ホストからファイルをコンテナに送りたい

docker run時に-vオプションを使って共有フォルダを作る必要がある。

docker run -i -t -v ホストのディレクトリ:コンテナのディレクトリ:読み書き コンテナID /bin/bash

参考:docker のボリュームオプションを使った(Amazon Linux で docker 使えた!) - ようへいの日々精進XP

不要なイメージの削除

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc spotify/docker-gc

http://qiita.com/kitsuyui/items/bd97b96f59e9fc456608

httpdをコンテナ立ち上げ時に起動したい

Dockerfileに「ENTRYPOINT ["/usr/sbin/httpd", "-D", "FOREGROUND"]」を追加する。
これを追加するとhttpdをコンテナ内で再起動するとコンテナごと落ちるので注意。
docker run時の最後に「/sbin/init」は不要。

今回作ったDockerfile

#(一度だけ行う)docker-enterコマンドのインストール
#docker run --privileged --rm -v /usr/local/bin:/target jpetazzo/nsenter
#このファイルをビルドする
#docker build -t base:base .
#ビルドしたコンテナを起動する
#docker run --privileged -d -p 80:80 base:base /sbin/init
#コンテナに入る
#docker psでコンテナIDを調べる
#docker-enter コンテナID

FROM centos:centos7
RUN yum install -y httpd
RUN yum install -y httpd-devel
RUN yum install -y php
RUN yum install -y php-devel
RUN yum install -y postgresql
RUN yum install -y postgresql-devel
RUN yum install -y postgresql-server
RUN yum install -y git
RUN yum swap -y fakesystemd systemd

エラーと対処法

x509: certificate has expired or is not yet valid

サーバの時刻がズレている為起こる。
ntpdateで時刻補正を行う。