3
1

More than 3 years have passed since last update.

Docker勉強メモ② Dockerイメージ作ってみる

Last updated at Posted at 2020-03-23

はじめに

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
tomcatコンテナ
[centos@ip-172-31-5-50 ~]$ sudo docker exec -it tomcat bash
[root@00d08555ba6b /]# 
1-2-4.CentOSコンテナ内でTomcatインストール
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サービス再起動

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
tomcat2コンテナ
# 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>
3
1
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
1