Dockerを使ってみる

はじめに

Dockerはオープンソースのコンテナ型仮想化ソフトウェアです。VirtualBoxやVMWare等のサーバー仮想化技術とは異なり、一つのOS上に独立したユーザー空間を作ることによって仮想化を実現するため、リソースの使用量が少なくて済むという特徴を持ちます。

導入

DockerをCentOS7上にインストールします。(ちなみにv1.8以降はCentOS6のサポートはされない模様です。)

リポジトリの登録

まず、Dockerの公式リポジトリをyumに登録します。

$ sudo vim /etc/yum.repos.d/docker.repo

[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

Dockerのインストール

yumを利用して、docker-engineパッケージをインストールします。

$ sudo yum install docker-engine

SELinuxが有効の場合は、docker-selinuxもインストールします。

$ sudo yum install docker-selinux

自動起動設定

dockerサービスがサーバー起動時に自動起動されるよう設定します。

$ sudo systemctl enable docker

起動

dockerサービスを起動します。

$ sudo systemctl start docker

コンテナの作成

コンテナイメージのダウンロード

準備が整ったのでコンテナを作成します。コンテナの作成には、その基となるコンテナイメージを利用します。各Linux OSのコンテナイメージはDocker Hubというリポジトリで公開されています。例えば、CentOSのコンテナイメージをダウンロードする場合は、以下の様にします。

$ sudo docker pull centos

ダウンロードしたコンテナイメージはローカルリポジトリに保存されます。保存されているイメージの一覧を確認するには、imagesコマンドを実行します。

$ sudo docker images

コンテナの作成

コンテナイメージを利用してコンテナを作成するにはrunコマンドを実行します。使用するイメージと作成したコンテナ上で実行するコマンドを引数として与えます。

$ sudo docker run centos echo "Hello World"

また、コンテナ作成後にログインをしたい場合は、-i(標準入力を開け続ける)と-t(疑似端末を割り当てる)のオプションを与えた上で、コマンドとしてシェルを指定します。

$ sudo docker run -it centos bash
[root@xxxxxxxxxxxx /]#

コンテナから抜けるにはexitコマンドを実行します。その際、コンテナは自動的に停止します。

[root@xxxxxxxxxxxx /]# exit
$

また、コンテナを作成する際に、コンテナに名前を設定するには–nameオプション、ホスト名を設定するには–hostname(または-h)オプションを利用します。

$ sudo docker run --name test-container --hostname test-host centos

コンテナの削除

存在しているコンテナの一覧を確認するにはpsコマンドを利用します。オプション-aによって、停止しているコンテナを含めて全てが表示されます。

$ sudo docker ps -a

削除したいコンテナを確認したら、IDまたはNAMEを指定してrmコマンドを実行します。実行中のコンテナを削除する場合は-fオプションを付与します。

$ sudo docker rm de3d1454fd9e

 

firewalldによるファイアウォール設定

はじめに

CentOS7からはiptablesではなくfirewalldというファイアウォールが導入されました。(iptablesも利用できるようですが、firewalldが標準となっています。)

起動

起動しているか確認するには、systemctlのstatusコマンドを実行します。

$ sudo systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since Tue 2015-11-03 22:27:20 JST; 2h 3min ago
 Main PID: 605 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─605 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

上記のようにactiveという表示が出ていれば起動しています。起動していなければstartコマンドで起動させることができます。

$ sudo systemctl start firewalld

また、自動起動サービスとして登録するには、enableコマンドを実行します。

$ sudo systemctl enable firewalld

ゾーンという概念

 

さくらVPSにWordPressをインストール

さくらVPSのCentOS6サーバーに、WordPressをインストールしたので、その手順を残します。

PHPのインストール

まず、WordPressの使用言語であるPHPと必要なモジュールをインストールします。yumコマンドを使えば一発です。

$ sudo yum install php php-gd php-mbstring php-mysql

MySQLのインストール

次に、データベースであるMySQLをインストールします。こちらもyumを使えます。

$ sudo yum install mysql-server

インストールが完了したら起動させます。

$ sudo service mysqld start

wordpressのためのデータベースとユーザーを作成します。今回は、いずれも「wordpress」としました。(省略しますが、rootユーザーのパスワードをまず設定した方がよいです。)

$ mysql -u root

mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@localhost IDENTIFIED BY 'password';
Query OK, 0 row affected (0.00 sec)

mysql> exit
Bye

WordPressの設置

次に、WordPressの設置に進みます。まず、WordPressの公式ページから最新zipパッケージをダウンロードし、展開します。

$ cd /tmp
$ wget https://ja.wordpress.org/latest-ja.zip
$ unzip latest-ja.zip

wordpressという名前のディレクトリが作成されていることを確認できると思います。これを、実際WordPressを運用する場所に配置します。今回は、後述するApacheのバーチャルホストを利用することを考え、以下の場所にいたしました。ちなみに、今回インストールするWordPressにアクセスするためのドメインをblog.codebase.co.jpとしています。

$ sudo mkdir -p /var/www/vhosts/blog.codebase.co.jp
$ sudo mv wordpress /var/www/vhosts/blog.codebase.co.jp

 

Apacheのインストール

最後に、WebサーバーであるApacheをインストールします。こちらもyumで一発です。

$ sudo yum install httpd

インストールが完了したら、Apacheのバーチャルホスト設定にWordPressを追加します。

$ cd /etc/httpd/conf.d
$ sudo vim vhosts.conf

NameVirtualHost *:80

# WordPress
<VirtualHost *:80>
    DocumentRoot /var/www/vhosts/blog.codebase.co.jp/wordpress
    ServerName blog.codebase.co.jp
    ErrorLog /var/www/vhosts/blog.codebase.co.jp/log/error_log
    CustomLog /var/www/vhosts/blog.codebase.co.jp/log/access_log combined env=!nolog
    <Directory "/var/www/vhosts/blog.codebase.co.jp/wordpress">
        AllowOverride All
    </Directory>
</VirtualHost>

ログファイルが出力されるフォルダを作成します。

$ sudo mkdir /var/www/vhosts/blog.codebase.co.jp/log

ユーザーapacheがWordPressのログや設定ファイル等を読み書きできるように、blog.codebase.co.jpディレクトリ以下の所有権をapacheに変更します。

$ sudo chown apache:apache /var/www/vhosts/blog.codebase.co.jp -R

Apacheを起動します。

$ sudo service httpd start

WordPressの初期設定

以上で、WordPressが立ち上がっている状態になっています。今回の例であればhttp://blog.codebase.co.jpにアクセスすることで、セットアップウィザードが開始しますので、データベースへの接続情報等を入力して初期設定を完了させます。

さくらVPSで公開鍵認証のログインユーザーの作成

さくらVPSでサーバーをレンタルし、rootユーザーしか存在しない状態から、管理者ユーザーを作成する手順のメモです。

まず、「仮登録完了のお知らせ」メールに含まれるパスワードを利用して、rootユーザーとしてサーバーに接続します。

ログイン後、まず目的のユーザー(ここではnewuserとします)を作成します。

$ useradd newuser

公開鍵の登録

newuserのホームディレクトリに.sshディレクトリを作成し、パーミッションを700に設定します。

$ mkdir /home/newuser/.ssh
$ chmod 700 /home/newuser/.ssh

.sshディレクトリ以下にauthorized_keysというファイルを作成し、パーミッションを600に設定します。

$ cd /home/newuser/.ssh
$ touch authorized_keys
$ chmod 600 authorized_keys

authorized_keysファイルの中に、接続元ユーザーの公開鍵を登録します。

$ vim authorized_keys
ssh-rsa ...

.sshディレクトリとauthorized_keysファイルの所有者をnewuserに変更します。

$ chown newuser:newuser -R .

これで、接続元ユーザーはnewuserとしてこのサーバーにアクセスすることができるようになりました。

sudoコマンドを利用できるようにする

次に、newuserは管理者ユーザーなのでroot権限でコマンドを実行できるようにしたいと思います。visudoコマンドを利用することでこの設定ができます。

$ visudo

コマンドを実行すると、エディタが開き、sudoに関する設定ファイルを編集することができます。下にスクロールしていくと

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

という箇所があると思うので、ここにnewuserを追記すればよいです。ただ、新しい管理者が入った場合に、毎回このファイルを修正するのは大変なので、個人ではなくwheelというグループにsudoコマンドの権限を与えて、newuserをwheelグループに登録する方向でいきます。既に以下のような記述があると思うので、先頭の#を削除してwheelグループのsudo権限を有効にさせます。「:wq」で変更内容を保存し、エディタを終了させます。

## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL

newuserをwheelグループに登録するには、gpasswdコマンドを使います。

$ gpasswd -a newuser wheel
Adding user newuser to group wheel

これでnewuserは再ログイン後にsudoコマンドを利用できるようになりました。

rootによるログインの禁止

以上で、管理者newuserによるログインおよびsudoコマンドの実行が可能になりましたが、rootによるログインも有効のままです。これは、セキュリティ的によろしくないので、rootによるログインを禁止し、また接続の際に公開鍵認証を義務付けたいと思います。この設定を行うには/etc/ssh/sshd_configを編集します。

$ vim /etc/ssh/sshd_config

「PermitRootLogin」、「PermitRootLogin」および「PasswordAuthentication」の設定を「no」にします。

PermitRootLogin no
PermitEmptyPasswords no
PasswordAuthentication no

設定を有効にするために、sshサービスを再起動します。

$ service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
Top