Docker学习备忘录② 尝试创建 Docker 镜像

首先

– Docker学习笔记
– Docker学习笔记① 从安装Docker到HelloWorld
– Docker学习笔记② 尝试创建Docker镜像 ←在这里
– Docker学习笔记③ 创建Dockerfile,从创建Docker镜像到启动容器进行尝试
– Docker学习笔记④ 容器间通信
– Docker学习笔记⑤ 网络通信

要做的事情

这次我打算自己创建一个Docker镜像,上次是直接使用了Docker Hub上的镜像。

※参考※
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. 在1-2-1主机上获取tomgat的tar.gz文件。

安装wget

$ yum -y install wget

请确认Tomcat的tar.gz文件的URL。
打开http://www-eu.apache.org/dist/tomcat/,查找所需版本的tar.gz文件。
本次使用的URL是: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/

由于出现了”没有这个文件”的提示,所以通过指定完整路径来避免。

登录到1-2-3.CentOS容器
$ docker exec -it tomcat bash
[centos@ip-172-31-5-50 ~]$ sudo docker exec -it tomcat bash
[root@00d08555ba6b /]# 
在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了

从容器中退出,并确认网站是否能够打开

打开一个终端并运行以下命令:
curl http://localhost:18080/
curl http://172.31.5.50:18080/

2. 主机和目录共享

当想要删除Docker容器但仍希望保留其中的日志时,可以使用以下方法。

更改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

检查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

确认状态从UP变为Exited

如果日志保留下来,并且能够查看日志内容,那就是成功。

$ ls -la /root/tomcat-container/logs/

从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

使用已经创建的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

如果可以从主机访问网站,则表示成功。

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>
广告
将在 10 秒后关闭
bannerAds