はじめに
- 私は、そもそも勉強会というのもがあまり好きではありません。なので、参加はほとんどしたことがありません。
- また、人前で発表したりするのも苦手です。
- 拒否反応をいままで示していましたが、色々なきっかけで開催まで踏み切ってみたお話です。
- 発表内容や資料などは稚拙なものや誤りがあるかもしれません。ご了承ください。
- 前回の機械学習が終わったので、Dockerについて開催してみました。
- 第1回としては、簡単な導入や操作について行いました。
アジェンダ
目的とゴール
Docker環境を導入して、仮想イメージを作ってみよう。
- Dockerとは ※約10分
- コンテナの作成と起動 ※約10分
- イメージの作成と保存 ※10分
- イメージをDocker Hubに保存する ※約10分
- ホストマシンとコンテナ間のファイル共有 ※約10分(時間があれば)
- 演習:好きなソフトウェアを入れてみよう(特になければMySQL) ※約10分(時間があれば)
進め方
- ノートパソコンを用意してください。(64bitマシンが必要です)
- ペアプログラミングでもかまいません。用意が難しいけど参加してみたい場合は、相談ください。
- 事前にDockerをインストールしておいてください。
- 事前にDocker Hubのアカウントを取得しておいてください。
- 特に前提知識はありません。アジェンダに添って事前に予習していただいてもかまいません。
- 開始も終了も時間厳守にします。あまりにも中途半端な場合は宿題 or 次回持越とします。
宿題
イメージとコンテナのインポートとエクスポートをやってみよう
Dockerとは
Dockerのインストール
Macの場合
Windowsの場合
Dockerの起動
プロキシの設定をする
Preferences > Proxies
起動する
start
イメージの取得
Docker Hubにログインする
docker login
イメージ一覧を確認する
docker images
CentOS 6を取得する
docker pull centos:6
取得したイメージを確認する
docker images
コンテナの作成と起動
起動中のコンテナ一覧を確認する
docker ps
コンテナの作成
※なお、イメージ取得も同時に行ってくれるためpullは省略可能
docker run -it centos:6
OSのバージョンを確認する
cat /etc/redhat-release
コンテナの起動と停止
コンテナからログアウトする
cntl + Q か cntrl + P
起動中のコンテナIDを取得する
docker ps
起動中のコンテナにログインする
docker attach {コンテナID}
docker exec {コンテナID} /bin/bash
コンテナを停止する
exit
コンテナの停止状態を確認する
docker ps
コンテナの再起動
起動するコンテナIDを取得する
docker ps -a
コンテナを起動する
docker start {コンテナID}
コンテナを停止する
docker stop {コンテナID}
すべてのコンテナの状態を削除する
docker rm `docker ps -a -q`
イメージを削除する
docker rmi {イメージID}
イメージの作成と保存
プロキシの設定を追加する
export http_proxy="{URL}"
export https_proxy="{URL}"
export ftp_proxy="{URL}"
export no_proxy="localhost,127.0.0.1,172.17.0.0/16"
yumのダウンロードのタイムアウト設定を変更する
echo "timeout=300" >> /etc/yum.conf
Apacheをインストールする
yum install -y httpd
Apacheのサーバ名を設定する
sed -i -e 's/\#ServerName www.example.com:80/ServerName example-web-server.example.com/g' /etc/httpd/conf/httpd.conf
Apacheの起動テストをする
/etc/init.d/httpd configtest
Apacheを起動する
/etc/init.d/httpd start
接続テスト用のHTMLを作成する
echo "docker test server" >> /var/www/html/index.html
起動確認をする
curl http://127.0.0.1/
コンテナを停止する
exit
停止したコンテナIDを取得する
docker ps -a
コンテナをイメージにコミットする
docker commit {コンテナID} {イメージ名(centos:6/httpd-test)}
Apacheをブラウザから確認する
ポートを指定してコンテナを起動する
docker run -i -t -p {アクセスポート:docker内部の起動ポート(10080:80)} {イメージ名(centos:6/httpd-test)} /bin/bash
Apacheの起動状態を確認する
ps alx | grep httpd
Apacheを起動する
/etc/init.d/httpd start
ブラウザから確認する
http://localhost:10080
イメージをDocker Hubに保存する
イメージIDを取得する
docker images
タグを作成する
docker tag {イメージID} {ユーザ名/イメージ名:タグ名(neriai/httpd-test:latest)}
Docker Hubにプッシュする
docker push {ユーザ名/イメージ名:タグ名(neriai/httpd-test:latest)}
プッシュされたことを確認する
https://hub.docker.com/
他の人のイメージを検索してみる
docker search {イメージ名(neriai)}
ホストマシンとコンテナ間のファイル共有
ホスト側のマウント先を確認する
Preferences > File Sharing
ホスト側のマウントしたいディレクトリとファイルを作成する
mkdir docker-share
touch index.html
echo "docker share test" >> index.html
マウント元とマウント先を指定して起動する
docker run -v "{ホスト側のマウント元ディレクトリ{/Users/neriai/***}}:{コンテナ側のマウント先ディレクトリ(/var/www/html/)}" -i -t -p 10080:80 "centos:6/httpd-test" /bin/bash
正常にマウントされ、起動できるかを確認する
cat /var/www/html/index.html
/etc/init.d/httpd start
http://localhost:10080
演習:好きなソフトウェアを入れてみよう
※以下MySQLの場合のヒントTipsです
インストール
yum install -y http://repo.mysql.com/mysql-community-release-el6-4.noarch.rpm
yum install -y mysql-community-server
初期設定
echo "" >> /etc/my.cnf
echo "[mysql]" >> /etc/my.cnf
echo "default-character-set=utf8" >> /etc/my.cnf
echo "" >> /etc/my.cnf
echo "[client]" >> /etc/my.cnf
echo "default-character-set=utf8" >> /etc/my.cnf
起動
/etc/rc.d/init.d/mysqld start
CREATE DATABASE {データベース名} DEFAULT CHARACTER SET utf8;
ホストマシンからの接続
docker run -i -t -p 13306:3306 {コンテナ名} /bin/bash
GRANT ALL PRIVILEGES ON *.* TO root@"%";
宿題
イメージをエクスポートする
docker save {イメージ名(sample-image)} > {ファイル名(sample-image.tar)}
イメージをインポートする
docker load < {ファイル名(sample-image.tar)}
コンテナをエクスポートする
docker export {コンテナ名(sample-image)} > {ファイル名(sample-image.tar)}
コンテナをインポートする
docker import < {ファイル名(sample-image.tar)}