Docker 自定义Dockerfile构建镜像

前言

阿里云代码 https://code.aliyun.com/

阿里云镜像地址 https://cr.console.aliyun.com

注意下面的这个地址无法用作Docker的镜像代码源:

阿里云代码仓库 https://codeup.aliyun.com/

使用

下载镜像

1
docker pull registry.cn-hangzhou.aliyuncs.com/psvmc/oraclejdk-tomcat8

查看镜像ID

1
docker images

运行镜像

镜像中的tomcat在/opt/tomcat8位置下

项目不带文件存储

1
docker run -d -p 8081:8080 --name tomcat01 -v /data/wwwroot/tomcat01/:/opt/tomcat8/webapps/  -v /data/wwwroot/tomcat01_log/:/opt/tomcat8/logs/ --restart=always 71dc929e155c

项目带文件存储

1
docker run -d -p 8081:8080 --name tomcat01 -v /data/wwwroot/tomcat01/:/opt/tomcat8/webapps/  -v /data/wwwroot/tomcat01_log/:/opt/tomcat8/logs/ -v /data/wwwroot/tomcat01/ROOT/static/:/data/wwwroot/tomcat01/ROOT/static/ --restart=always 71dc929e155c

里面映射了webapps logs 上传文件位置三个文件夹 根据自身需求设置

-v /data/wwwroot/tomcat01/ROOT/static/:/data/wwwroot/tomcat01/ROOT/static/配置是项目中配置的文件存储的路径

查看容器运行状态

1
docker ps -a

查看tomcat启动日志

1
docker logs tomcat01

命令格式:

1
2
3
4
5
6
7
8
$ docker logs [OPTIONS] CONTAINER 
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

例子:

查看指定时间后的日志,只显示最后100行:

1
docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID/NAMES

查看某时间之后的日志:

1
docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID/NAMES

查看某时间段日志:

1
docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID/NAMES

我们运行了tomcat 那么怎样进入tomcat运行的环境呢

1
2
3
// docker exec意思是:在`tomcat07`下面运行一个命令,在这里,运行的是/bin/bash
// -t 表示分配一个pseudo-TTY,-i 表示可交互
docker exec -t -i tomcat01 /bin/bash

接下来 我们退出tomcat的运行环境(Ctrl+P+Q)

把文件拷贝到容器中

如果做了目录映射就不用吧项目copy到docker容器中了

直接复制到映射的docker外层的目录中即可

1
docker cp /root/test.war tomcat01:/opt/tomcat8/webapps/test.war

Dockerfile文件

具体参照Github地址

添加的文件catalina.sh覆盖原来文件
其实这个文件就是tomcat中的catalina.sh文件添加了一下配置
JAVA_OPTS="-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"

构建

1
docker build -t psvmc/docker_tomcat8 .

当然也可以用阿里云构建

构建后的地址

1
docker pull registry.cn-hangzhou.aliyuncs.com/psvmc/oraclejdk-tomcat8

阿里云镜像地址自己创建镜像用Github地址的Dockerfile(jdk1.8+tomcat8+支持中文日志)

阿里云代码仓库https://codeup.aliyun.com/

开机启动

1
systemctl enable docker.service

常见错误

错误1

/bin/sh: service: command not found

解决方法

1
2
# 安装service
RUN yum install initscripts -y

注意

不建议这样做,原因Docker内不建议运行后台服务。

错误2

Failed to get D-Bus connection: Operation not permitted

Docker的设计理念是在容器里面不运行后台服务,容器本身就是宿主机上的一个独立的主进程,也可以间接的理解为就是容器里运行服务的应用进程。

一个容器的生命周期是围绕这个主进程存在的,所以正确的使用容器方法是将里面的服务运行在前台。

因此,请遵守容器设计原则

一个容器里运行一个前台服务!