はじめに
Docker勉強メモ
- Docker勉強メモ① DockerインストールからHelloWorld
- Docker勉強メモ② Dockerイメージ作ってみる ←ココ
- Docker勉強メモ③ Dockerfileを作ってDockerイメージ作成からコンテナ起動までやってみる
- Docker勉強メモ④ コンテナ間通信
- Docker勉強メモ⑤ ネットワーク通信
やること
前回はDocker HubにあるDockerイメージをそのまま使った
今度はDockerイメージを作る
※参考※
Docker入門(第三回)~各種dockerコマンドとDockerイメージ作成について~
1.Dockerイメージを作る
1-1.CentOSコンテナ起動
Docker HubからCentOSのDockerイメージを取得し、CentOSコンテナを起動する
$ docker pull centos:7
$ mkdir -p /root/tomcat-container/logs
$ docker run -it -d -p 18080:8080 -v /root/tomcat-container/logs:/share/logs --name tomcat centos:7
※「/root/tomcat-container/logs」は任意のディレクトリ
オプションの意味
-it : コンソールに結果を出力
-d : バックグラウンド実行
-p : ポートフォワーディング
-v : ディレクトリ共有
--name : コンテナ名
1-2.CentOSコンテナにTomcatインストール
起動したCentOSコンテナにTomcatをインストールする
流れの概要はこんな感じ
ホストでtomcatのtar.gzを取得
ホスト→コンテナにtar.gzをコピー
CentOSコンテナにログイン
CentOSコンテナ内でTomcatインストール
1-2-1.ホストでtomgatのtar.gzを取得
wgetをインストール
$ yum -y install wget
tomcatのtar.gz のURLを確認
http://www-eu.apache.org/dist/tomcat/ 開き、使うバージョンのtar.gzを探す
→今回:http://ftp.riken.jp/net/apache/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz
tomcatのtar.gzを取得
wget http://ftp.riken.jp/net/apache/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz
1-2-2.ホスト→コンテナにtar.gzをコピー
ホスト側からコンテナ内にファイルをコピー
[centos@ip-172-31-3-246 ~]$ pwd
/home/centos
[centos@ip-172-31-3-246 ~]$ ls
apache-tomcat-9.0.31.tar.gz
[centos@ip-172-31-3-246 ~]$ sudo docker cp /home/centos/apache-tomcat-9.0.31.tar.gz tomcat:opt/
※ no such file と出たのでフルパス指定で回避
1-2-3.CentOSコンテナにログイン
$ docker exec -it tomcat bash
[centos@ip-172-31-5-50 ~]$ sudo docker exec -it tomcat bash
[root@00d08555ba6b /]#
1-2-4.CentOSコンテナ内でTomcatインストール
yum install -y java
cd /opt/
tar zxf apache-tomcat-9.0.31.tar.gz
cd apache-tomcat-9.0.31
./bin/startup.sh
これでTomcatが動いた
コンテナから出て(exit)、Webサイトが開くか確認する
curl http://localhost:18080/
curl http://172.31.5.50:18080/
2.ホストとディレクトリ共有
Dockerコンテナを削除してもDockerコンテナ上のログは残したい、みたいなときに使う
2-1.Tomcatログ設定変更
Tomcatログはデフォルトのディレクトリ(/opt/apache-tomcat-9.0.31/logs)に出力されているので、コンテナにログインして、ログ出力先を変える
CentOSコンテナにログイン
$ sudo docker exec -it tomcat bash
Tomcatのログ設定を変更しTomcatサービス再起動
# cd /opt/apache-tomcat-9.0.31/
# sed -i -e "s/\${catalina.base}\/logs/\/share\/logs/g" ./conf/logging.properties
# ./bin/shutdown.sh
# ./bin/startup.sh
# ls -la /share/logs/
ホストに戻って、以下コマンドでログが表示されたら成功
$ ls -la /root/tomcat-container/logs/
$ cat /root/tomcat-container/logs/catalina.2020-03-08.log
2-2.Dockerコンテナ停止後もTomcatログ見れるか確認
CentOSコンテナを停止
$ docker ps -a
$ docker stop tomcat
$ docker ps -a
※実行時の出力
[centos@ip-172-31-5-50 ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04d08555aa6b centos:7 "/bin/bash" 35 minutes ago Up 35 minutes 0.0.0.0:18080->8080/tcp tomcat
[centos@ip-172-31-5-50 ~]$ sudo docker stop tomcat
tomcat
[centos@ip-172-31-5-50 ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04d08555aa6b centos:7 "/bin/bash" 35 minutes ago Exited (137) 6 seconds ago tomcat
STATUSが UP -> Exited に変わたことを確認する
ログ残っていてログの中身が見れたら成功
$ ls -la /root/tomcat-container/logs/
3.CentOSコンテナからDockerイメージ作る
コンテナからイメージをつくることができる
今のDockerコンテナとDockerイメージはこーいう状態
[centos@ip-172-31-5-50 cent-tomact]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04d08555aa6b centos:7 "/bin/bash" 3 hours ago Exited (137) 3 hours ago tomcat
[centos@ip-172-31-5-50 cent-tomact]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 5e35e350aded 3 months ago 203MB
では、Dockerイメージを作成する
コンテナを起動してたら停止する
$ docker stop tomcat
Dockerイメージにする対象のコンテナ名を指定し、Dockerイメージを作成
$ docker commit tomact tomcat-image
※ 既存のDockerイメージ tomcat から tomcat-image を新規作成してる
これでDockerコンテナとDockerイメージはこーいう状態
tomcat-image というDockerイメージができてる
[centos@ip-172-31-5-50 cent-tomact]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04d08555aa6b centos:7 "/bin/bash" 3 hours ago Exited (137) 3 hours ago tomcat
[centos@ip-172-31-5-50 cent-tomact]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat-image latest 173543bffdb6 16 seconds ago 529MB
centos 7 5e35e350aded 3 months ago 203MB
4.作成したDockerイメージを使用してコンテナ起動
ちゃんと動くか試す
$ sudo mkdir -p /root/tomcat-container/logs2
$ docker run -it -d -p 18082:8080 -v /root/tomcat-container/logs2:/share/logs --name tomcat2 tomcat-image
tomcat2 というDockerコンテナが起動してたら成功
[centos@ip-172-31-5-50 ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f9xxx5dcf85 tomcat-image "/bin/bash" About a minute ago Up About a minute 0.0.0.0:18082->8080/tcp tomcat2
04dxxx95aa6b centos:7 "/bin/bash" 3 hours ago Exited (137) 3 hours ago tomcat
tomcat2コンテナに入りTomcatを起動してみる
tomcat2コンテナに入る
$ docker exec -it tomcat2 bash
# cd /opt/apache-tomcat-9.0.31
# ./bin/startup.sh
※ Dockerコンテナなら抜けるときは exit
ホストからWebサイトにアクセスできたら成功
5.後片付け
※注意※ Docker勉強メモ③に進むならこの作業はしない
作ったDockerイメージを削除します。
(AWS利用料を抑えるには、EC2インスタンスの削除が必要)
- Dockerコンテナ確認
docker ps -a
- Dockerコンテナ停止
docker stop
- Dockerコンテナ削除
docker rm
- Dockerイメージ確認
docker images
- Dockerイメージ削除
docker rmi
Dockerコンテナ停止
$ docker stop tomcat2
Dockerコンテナ削除
$ docker rm tomcat2
$ docker rm tomcat
Dockerイメージ削除
sudo docker rmi <REPOSITORY>
sudo docker rmi <centosのIMAGE ID>
sudo docker rmi <REPOSITORY>:<TAG>