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

  • 15
    Like
  • 0
    Comment

これは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