Docker容器化开发流程(二)制作镜像(jdk+tomcat)

文章目录

    • 目标:
    • 镜像环境需求
    • 制定 jdk+tomcat 镜像
      • 准备工作
      • 编写Dockerfile文件
      • build 编译一下
      • 运行创建后的镜像
      • 提交新建的镜像到docker 仓库

目标:

  • 了解如果创建镜像

  • 熟悉dockerfile 的文件指令

    参考:Docker中通过Dockerfile 构建jdk+tomcat环境

    Docker技术入门与实战 第二版 书籍

    Docker 安装 Tomcat

镜像环境需求

假设我们的项目是spring boot 工程,需要连接mysql 和 redis 数据库,假定测试环境是linux 环境,通过 nginx 代理,将请求分发到两个tomcat上,也就是说通过两个tomcat 提供服务,那我们需要创建以下这些镜像文件:

jdk8 + tomcat8   一个镜像
nginx 一个镜像
mysql5.7  一个镜像
redis  一个镜像

制定 jdk+tomcat 镜像

准备工作

# 可以在 docker hub 上搜索tomcat 的镜像,也可以直接下载tomcat 和jdk 的压缩文件,这里我们使用已经准备好的
(https://hub.docker.com/_/tomcat?tab=tags)
apache-tomcat-8.5.47.tar.gz
jdk-8u181-linux-x64.tar.gz
 
# 创建文件夹将这两个安装包拖进去,并创建Dockerfile
$ mkdir -p /mnt/software/
$ cd /mnt/software/
$ touch Dockerfile

编写Dockerfile文件

# 可以参考docker hub 上提供的 dockerfile
(https://github.com/docker-library/tomcat/blob/69651de48dbaede28806408828f42d68409bd1df/8.5/jdk8/openjdk/Dockerfile)
 
# 创建镜像tomcat8+jdk8  设置继承于 ubuntu:14.04
FROM ubuntu:14.04
# 设置创建者信息
MAINTAINER docker_user ([email protected])
# 设置环境变量
ENV DEBIAN_FRONTEND noninteractive
# 注意这里要更改系统的时区设置
RUN echo "Asia/Shanghai" > /etc/timezone && \
dpkg-reconfigure -f noninteractive tzdata
# 安装跟 tomcat 用户认证相关的软件
RUN apt-get install -yq --no-install-recommends wget pwgen ca-certificates && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 设置 tomcat 的环境变量,若读者有其他的环境变量需要设置,也可以在这里添加。
ENV CATALINA_HOME /tomcat/apache-tomcat-8.5.47/
ENV JAVA_HOME /jdk/jdk1.8.0_181/
# 复制 tomcat 和 jdk 文件到镜像中  会自动解压
ADD apache-tomcat-8.5.47.tar.gz /tomcat
ADD jdk-8u181-linux-x64.tar.gz /jdk
ADD run.sh /run.sh
RUN chmod +x /*.sh
RUN chmod +x /tomcat/apache-tomcat-8.5.47/bin/*.sh
EXPOSE 8080
# 指定编码支持中文
ENV LANG C.UTF-8
# 设置容器启动时执行的操作
ENTRYPOINT /tomcat/apache-tomcat-8.5.47/bin/startup.sh && /bin/bash && tail -f /tomcat/apache-tomcat-8.5.47/logs/catalina.out
 

build 编译一下

# 使用docker build -t
$ docker build -t tomcat8-jdk1.8:v1 .

执行过程:

root@VM-56-19-ubuntu:/mnt/software# docker build -t tomcat8-jdk1.8:v1 .
Sending build context to Docker daemon  195.9MB
Step 1/14 : FROM ubuntu:14.04
---> 6e4f1fe62ff1
Step 2/14 : MAINTAINER docker_user ([email protected])
---> Using cache
---> a13996c9af69
Step 3/14 : ENV DEBIAN_FRONTEND noninteractive
---> Using cache
---> e648831cb7eb
Step 4/14 : RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata
---> Using cache
---> 3f84e6423534
Step 5/14 : RUN apt-get install -yq --no-install-recommends wget pwgen ca-certificates && apt-get clean && rm -rf /var/lib/apt/lists/*
---> Using cache
---> aa956776e2b0
Step 6/14 : ENV CATALINA_HOME /tomcat/apache-tomcat-8.5.47/
---> Using cache
---> 7d96cd3de0b9
Step 7/14 : ENV JAVA_HOME /jdk/jdk1.8.0_181/
---> Using cache
---> d4c99f50588d
Step 8/14 : ADD apache-tomcat-8.5.47.tar.gz /tomcat
---> Using cache
---> 66261ebca565
Step 9/14 : ADD jdk-8u181-linux-x64.tar.gz /jdk
---> Using cache
---> 2b70094b004b
Step 10/14 : ADD run.sh /run.sh
---> Using cache
---> 2dd0afe00077
Step 11/14 : RUN chmod +x /*.sh
---> Using cache
---> 0f0ead5f26f6
Step 12/14 : RUN chmod +x /tomcat/apache-tomcat-8.5.47/bin/*.sh
---> Using cache
---> 3ed0386d7d28
Step 13/14 : EXPOSE 8080
---> Using cache
---> 71e9fdb8acf9
Step 14/14 : ENTRYPOINT /tomcat/apache-tomcat-8.5.47/bin/startup.sh && /bin/bash && tail -f /tomcat/apache-tomcat-8.5.47/logs/catalina.out
---> Running in fbe1dc03651c
Removing intermediate container fbe1dc03651c
---> 944669c1dfe6
Successfully built 944669c1dfe6
Successfully tagged tomcat8-jdk1.8:v1
 

运行创建后的镜像

# 查看是否已经存在
$ docker images
root@VM-56-19-ubuntu:/mnt/software# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat8-jdk1.8      v1                  944669c1dfe6        3 minutes ago       599MB
 
# 运行一下这个镜像
$  docker run -d -P --name tomcatgengzi2  tomcat8-jdk1.8:v1
 
-d 后台模式运行
-P 宿主机端口是随机映射的
 
# 查看下正在运行的容器
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                         NAMES
d640a1b8ba64        tomcat8-jdk1.8:v1   "/bin/sh -c '/tomcat…"   4 seconds ago       Up 3 seconds        0.0.0.0:32781->8080/tcp                       tomcatgengzi2
 
 
# 查看正在运行容器的日志信息
$ docker logs tomcatgengzi2
 
会打印tomcat启动日志
 
# 测试下能否访问到,这里需要看下 宿主机映射的端口是多少
$ curl http://127.0.0.1:32781
返回 tomcat 默认index页面的源码,就是可以访问到了
 

其他的命令参考:

# 通常情况下,运行tomcat 容器,可以用 -v 命令来挂载 Tomcat的日志文件、程序所在目录、以及与 Tomcat相关的配置
 
# 例如: 把当前目录的test 项目挂载到 tomcat 目录下的 webapps 中
$ docker run -d -p 8088:8080  --name webserver-test1   -v $PWD/test:/tomcat/apache-tomcat-8.5.47/webapps/test   tomcat8-jdk1.8:v1
 
# 日志 和 配置信息 都是一样道理的
 
# 查看现在的容器中是否有某个容器
$ docker images | grep tomcat8-jdk1.8:v1
 
# 停止运行的容器
$ docker stop  容器名称 或者 id
# 重新启动容器
$ docker restart 容器名 或者 id
 
# 删除容器
$ docker rm 容器id 或者 名称
 
# 删除镜像
$ docker rmi 镜像id
 
 

提交新建的镜像到docker 仓库

由于私人仓库还没有建立,我们先提交至docker hub 。

参考:https://www.runoob.com/docker/docker-repository.html
 
# 注册docker hub 账号
# docker login 登陆 输入账号 密码登陆
$ docker login
# 以下命令中的 1164014750 请替换为你的 Docker 账号用户名。
$ docker tag mytomcat8:v1 1164014750/mytomcat8:v1
# 上传到 docker hub 等待上传完成
$ docker push 1164014750/mytomcat8:v1
# 上传完毕后,可以搜索查看
https://hub.docker.com/repository/docker/1164014750/mytomcat8
# 下载我们刚才上传的镜像
docker pull 1164014750/mytomcat8:v1
 
 

Docker容器化开发流程(二)制作镜像(jdk+tomcat)_第1张图片

你可能感兴趣的:(Docker)