Docker Memo [CentOS7] (MongoDB,Redis,nginx,Node.js)


CentOS7 + Dockerで簡単にサーバーを立てる時のメモ
面倒なのでSELinuxはとりあえずPermissiveで。
データは全てホスト側に保存。(実行のみDockerを利用
[]は自分の環境に置換。 ()は省略可能。

インストール

# Docker Install
 yum install docker
 systemctl start docker
 systemctl enable docker

# SELinux Setting (Permissive)
 setenforce 0
 vi /etc/sysconfig/selinux
  SELINUX=permissive

# Firewall Settings (Add Port)
 firewall-cmd –permanent –add-port=80/tcp
 firewall-cmd –permanent –add-port=3000/tcp

サーバー実行

# MongoDB
 docker run -d -p 27017:27017 -v [MongoDB Dir]:/data/db dockerfile/mongodb

# Redis
 docker run -d -p 6379:6379 -v [Redis Dir]:/data dockerfile/redis

# Nginx
 docker run -d -p 80:80 -v [Nginx Dir]:/var/www/html dockerfile/nginx

サイトの追加、設定変更する場合 -v [Nginx Settings Dir]:/etc/nginx/sites-enabled で設定ファイルをマウントすればOK

# Node.js
 docker run -d -p 3000:3000 -v [Node.js Dir]:/usr/src/app -w /usr/src/app node:0.10 node app.js

# Node.js (npm install)
 docker run -it –rm -v [Node.js Dir]:/usr/src/app -w /usr/src/app node:0.10 npm install

どういうコンテナか確認する時はbash等で起動すると分かりやすいかと思います。
 docker run -it –rm [Container] bash

Docker Run

 docker run [Docker Run Options] ([Run Command])

[Docker Run Options]
 ・ボリュームをマウントする (–volume)
  -v [Host Volume]:[Container Volume](:ro)

 ・ポートを割り当てる (–publish)
  -p ([IP]:)[Host Port]:[Container Port]

 ・作業ディレクトリを設定する (–workdir)
  -w [Container Directory]

 ・コンテナに名前を付ける
  –name [Container Name]

[どちらか選択]
 ・常に実行 (–detach)
  -d

 ・単一コマンド実行&実行後コンテナ削除 (–interactive –tty –rm)
  -it –rm

その他

# Docker (→詳細)
 docker start [Container ID]
 docker restart [Container ID]
 docker stop [Container ID]
 docker rm [Container ID]
 docker inspect [Container ID]
 docker logs [Container ID]
 docker top [Container ID]
 docker cp [Container ID]:[Container File] [Host Dir]
 docker ps
 docker exec -it [Container ID] bash

# Systemctl
 systemctl start [Service]
 systemctl status [Service]
 systemctl stop [Service]
 systemctl enable [Service]
 systemctl disable [Service]
 systemctl list-unit-files

# Firewall
 firewall-cmd –permanent –add-port=[Port]/[tcp|udp]
 firewall-cmd –permanent –remove-port=[Port]/[tcp|udp]

PostgreSQL Optimize


PostgreSQLで設定しておかないと大量リクエストがあった時、とても遅くなるのでメモ。

[設定ファイル]

vi /var/lib/pgsql/9.3/postgresql.conf

max_connections: 最大接続数(100~1000程度、最大2000)
shared_buffers: 共有メモリ(全メモリの25%くらい / 最大8GB)
work_mem: ソート等に使用されるメモリ(8MB~64MB程度)
effective_cache_size: (最大メモリの半分ほど)

ここら辺を設定しておくと、取りあえず大丈夫。

Docker Memo


Docker使ってみました!とても簡単に使えました。メモです

CentOS 6.5を使用しました。ゲスト側はofficialcentos (6.4)

※ゲストのcentosは、最小限でpasswdとかも入ってません。なので必要な場合は yum install passwdでインストールしてください。

passwd しようとすると以下のエラーが出ました。
passwd: unconfined_u:system_r:initrc_t:s0 is not authorized to change the password of user
ホスト側SELinuxDisableにすると大丈夫です
[ /etc/selinux/configSELINUXdisabledにして再起動すればいいです]
(ずっとゲスト側でSELinux止めれないなーって悩んでました()

なので、困った場合はホスト側のSELinuxを切ってみてください

1. インストール

epelパッケージを追加
rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
docker-ioをインストール
yum install docker-io
Dockerサービスを起動&自動起動設定
service docker start
chkconfig docker on

2. イメージ

今回はイメージ名はcentosを使用しました
イメージを検索
docker search イメージ名
イメージの詳細情報を表示
docker inspect イメージ名
イメージを取得
docker pull イメージ名
イメージの一覧を表示
docker images
イメージを削除
docker rmi イメージ名またはイメージID

3. コンテナ

コマンドを実行
docker run イメージ名 /bin/echo HelloWorld!
バックグラウンドでコマンドを実行
docker run -d イメージ名 /usr/sbin/sshd
シェルの起動
docker run -i -t イメージ名 /bin/bash
バックグラウンドでシェルの起動
docker run -i -t -d イメージ名 /bin/bash
既に起動しているコンテナにBashでログイン
docker exec -it イメージ名 bash

ポート割り当て
-p ホストポート:コンテナポート
ディレクトリのマウント
-v ホストディレクトリ:コンテナディレクトリ:rw
-v ホストディレクトリ:コンテナディレクトリ:ro

起動しているコンテナを一覧表示(コンテナIDの確認)
docker ps
全てのコンテナを一覧表示
docker ps -a

状態の表示(IP等)
docker inspect コンテナID
起動しているプロセスを表示(top)
docker top コンテナID
ログを表示
docker logs コンテナID

コンテナを削除
docker rm コンテナID
停止しているコンテナを全て削除
docker rm `docker ps -a -q`

4. コンテナ操作

コンテナにアタッチ
docker attach コンテナID
コンテナをデタッチ
[Ctrl-p] [Ctrl-q]

コンテナを開始
docker start コンテナID
コンテナを停止
docker stop コンテナID

コンテナをイメージに追加
docker commit コンテナID 新しいイメージ名

Dockerfileをビルド(中間ファイル削除)
docker build –no-cache –rm -t [author]/[name] .

Docker Memo


LXCを調べてたらDockerというのを見つけてたのでメモ。

DockerはLinuxの仮想化ソフトウェア

以下の2つのソフトウェアをベースにしている。

  • LXC (Linux Containers)
    OSレベルで仮想化するソフトウェア
  • AUFS (AnotherUnionFS)
    分離されたファイルやディレクトリを透過的に重ねることができるソフトウェア

今度使ってみます!