インストール
curl -sSL https://get.docker.com/ | sh
Docker Engine 最新版のインストール - Qiita
最新を入れるにはコマンドを叩く。
yum install docker
CentOS7からはDockerをサポートしているので、普通にyumで入ります。
が、こちらの場合は最新のDockerが使えないです。
Dockerの起動
systemctl start docker.service
コンテナの起動
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。
コンテナ間で色々共有する
ホストからファイルをコンテナに送りたい
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 コンテナIDFROM 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で時刻補正を行う。