さくらのクラウド
Arukas

Dockerを触ってみよう ~初心者向けDockerハンズオン~ Ver20170118

More than 1 year has passed since last update.

これは2017年1月18日での「Dockerを触ってみよう ~初心者向けDockerハンズオン~」の補助資料です。


1.「さくらのクラウド」上でサーバを立てる。


  • 「さくらのクラウド」のサーバを作成する。

  • CentOS 7を利用する。

  • Windowsの人はPuttyやTeratermを利用する。


    • Macの人は、ターミナルを利用する

    • ssh root@IPアドレスでログイン可能。




2. CentOS7でDockerをインストールする。

パッケージ情報を最新にする。

yum -y update

docker-engine パッケージをセットアップします。

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

サービスを有効します。

systemctl enable docker.service

docker デーモンを起動します

systemctl start docker

インストールしたらバージョンの確認

docker version


3. コンテナを起動する「Docker run」

まずは「hello-world」を起動する。

docker run hello-world

Ubuntuコンテナを起動しUbuntuを操作する。

docker run -it ubuntu bash

Ubuntuのバージョンを確認いたします。

cat /etc/issue


3.1 起動したubuntuにcurlを利用できるようにする

まずはUbuntuのアップデートを行う。

apt-get -y update

apt-get -y install curl

curl ifconfig.me/ip

exitで、コンテナから出られる。

exit

再度コンテナを動かしてみる。

docker run -it ubuntu bash

再びIPアドレスを入れようとしても動かない

curl ifconfig.me/ip


4. バックグランド(デタッチドモード)でコンテナを動かす

今の時刻を毎秒表示するコンテナを起動する

docker run jpetazzo/clock

バックグランド(デダッチドモード)でコンテナを動かす

docker run -d jpetazzo/clock


5. 基礎的なDockerコマンド


6. docker psでコンテナの確認

docker ps

docker ps -aで今まで起動したコンテナを確認

docker ps -a

「docker ps -l」で直近に操作したコンテナを表示し「docker ps -q」でコンテナのショートIDが表示される。

docker ps -l

docker ps -q


6.1 docker logsでコンテナのログを確認する

先ほどバックグランドで動かしたコンテナのログを見る。ここでは

docker logs(コンテナのID)

ログの指定された数行だけを見る

docker logs --tail 3 (コンテナのID)

リアルタイムでログを確認する。

docker logs --tail 1 --follow (コンテナのID)


6.2 docker kill、docker stopでコンテナを止める

デタッチモードで起動したサーバを停止させるには下記のコマンドでとめる。

docker kill (コンテナのID)

docker stop (コンテナのID)


6.3 停止したコンテナを確認する。

「docker ps」で先ほど止めたコンテナがないか確認

docker ps

「docker ps -a」で先ほど止めたコンテナを確認する。

docker ps -a


7. Docker上でGhostをインストールする

ここでは簡易ブログツール「Ghost」をDockerを利用してインストールしてみます。

docker run -p 80:2368 -d ghost

ブラウザに作成したサーバのIPアドレスを入力してアクセスができるか確認し、アクセスができるようであれば、コンテナを止める。

docker kill (コンテナのID)


8. nginxコンテナを立ち上げてページを編集する。


8.1 nginxを起動

下記コマンドでnginxを起動

docker run -itd -p 80:80 nginx:latest

起動後にブラウザからIPアドレスを入力してnginxの画面を表示し、正常にnginxが起動しているか確認をする。


8.2 nginxコンテナ上にページを作成

docker psでnginxのコンテナIDを確認

docker ps

docker exec コマンドで bash の追加プロセスを実行。

docker exec -it $(docker ps -ql) /bin/bash

ps -ef コマンドで、nginx コンテナの中での操作を確認。

ps -ef

Nginx のドキュメント・ルートにある index.html を書き換えます。

echo 'hello world' > /usr/share/nginx/html/index.html

cat /usr/share/nginx/html/index.html

ブラウザで表示を確認します。ブラウザの再読み込みボタンを押すと、画面にhello worldが表示されます。(うまく表示できない場合は「Shift」キーを押しながら再読み込みボタン)

bashを終了する

exit


8.3 Nginx イメージの作成

docker commit コマンドで mynginx:1.0 イメージを作成します。

docker commit $(docker ps -ql) mynginx:1.0

docker images コマンドで、イメージが作成されたのを確認します。

docker images

作成した mynginx:1.0 イメージを使って、新しいコンテナを実行します。

docker run -d -p 8080:80 mynginx:1.0

curl コマンドで、コマンドライン上でポート 8080 を開きます。

curl http://localhost:8080


8.4 コンテナの停止と削除

 docker ps でコンテナの状態を確認します。

docker ps

 コンテナを停止するため docker kill コマンドを実行します。

docker kill $(docker ps -q)

 docker ps では実行中のプロセスはありませんが、 docker ps -a でコンテナが停止中なのを確認します。

docker ps

docker ps -a

 docker rm コマンドでコンテナ(コンテナ用のイメージ・レイヤとメタ情報)を削除します。

docker rm $(docker ps -aq)

docker ps -a


9 Dockerfile でイメージの自動構築

 作業用ディレクトリ mynginx を作成し、移動します。

mkdir mynginx

cd mynginx

 次のコマンドを実行し、 Dockerfile を作成します。



tee ./Dockerfile <<-'EOF'

FROM nginx:latest

RUN echo "hello world<br />$(date)" > /usr/share/nginx/html/index.html

EOF

 docker build コマンドで mynginx:1.1 イメージを自動作成します。

docker build -t mynginx:1.1 .

 docker images コマンドで、イメージが作成されたのを確認します。

docker images

作成した mynginx:1.1 イメージを使って、新しいコンテナを実行します。

docker run -d -p 8888:80 mynginx:1.1

curl コマンドで、コマンドライン上でポート 8888 を開きます。

curl http://localhost:8888


10 Docker Hub にログイン


10.1 アカウント作成

https://hub.docker.com/ から登録し、ログインします。


10.2 サーバから Docker Hub にログイン

docker login コマンドを実行します。

`docker login`

Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.

Username: <自分のDockerHubID>

Password: <パスワード>

Login Succeeded


11 Docker イメージの登録と公開


11.1 イメージをタグ付け

 docker tags コマンドで mynginx:1.1 イメージに Docker Hub ID の情報を付けます。

docker tag mynginx:1.1 <自分のID名>/mynginx:1.1

 docker images で確認します。

docker images


11.2 docker push でイメージ送信。

 docker push コマンドでイメージを送信します。

`docker push <自分のID名>/mynginx:1.1`

Docker Hub 上にある自分のページを表示し、リポジトリを確認します。


11.3 不要なイメージの削除

 docker images -q を実行すると、ローカルにあるイメージ ID を表示します。

`docker images -q`

 docker rmi で全てのイメージを削除します。

`docker rmi -f $(docker images -aq)`


11.4 Arukas にログイン

https://app.arukas.io/


11.5 Arukas で実行

アプリ作成 ボタンをクリック。

アプリ作成に必要な各種情報を入力。
App Name … myapp
Image … <DockerHubId>/mynginx:1.1 ← 1.1 のタグを忘れずに
Port … 80
アプリケーションを作成 ボタンをクリック。
画面が切り替わり、一覧に myapp が表示されます。
アプリの 起動 ボタンをクリック
起動確認で OK をクリックし、 アプリが起動するまで待ちます。
起動(緑色に変化)したら、 Endpoint の URL を開きます。

以上です。おつかれさまでした!


17 おまけ


17.1 DockerでWordPressを動かす

WordPressのイメージを持ってくる

docker run wordpress

MySQLのイメージを持ってくる。

docker pull mysql

MySQLの設定

docker run --name mysql -e MYSQL_ROOT_PASSWORD=(パスワード) -d mysql

WordPressを動かす

docker run --name wordpress2 -d --link mysql:mysql -p 80:80 wordpress


17.2 Docker composeでロケットチャットを動かす

Docker composeでRocket.Chatを動かす

下記2つのコマンドでDocker composeをインストール

curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-uname -s-uname -m> /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

上記のコマンドでyamlをこのページから取ってくる。

git clone https://github.com/zembutsu/sakura-cloud-hands-on.git

作成されたフォルダに移動する。

cd sakura-cloud-hands-on/rocketchat

Rocket.Chatに必要なファイルを取ってくる

docker-compose pull

下記コマンドでRocket.Chatを動かす

docker-compose up -d