LoginSignup
3
13

More than 5 years have passed since last update.

Dockerの勉強会(ハンズオン)用のテキストをつくってみた - 基礎編

Last updated at Posted at 2017-12-19

はじめに

  • 私は、そもそも勉強会というのもがあまり好きではありません。なので、参加はほとんどしたことがありません。
  • また、人前で発表したりするのも苦手です。
  • 拒否反応をいままで示していましたが、色々なきっかけで開催まで踏み切ってみたお話です。
  • 発表内容や資料などは稚拙なものや誤りがあるかもしれません。ご了承ください。
  • 前回の機械学習が終わったので、Dockerについて開催してみました。
  • 第1回としては、簡単な導入や操作について行いました。

アジェンダ

目的とゴール

Docker環境を導入して、仮想イメージを作ってみよう。

  1. Dockerとは ※約10分
  2. コンテナの作成と起動 ※約10分
  3. イメージの作成と保存 ※10分
  4. イメージをDocker Hubに保存する ※約10分
  5. ホストマシンとコンテナ間のファイル共有 ※約10分(時間があれば)
  6. 演習:好きなソフトウェアを入れてみよう(特になければ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)}
3
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
13