Docker容器化開發流程(二)製作鏡像(jdk+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
# 設置容器啓動時執行的操作
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  tomcat8-jdk1.8:v1 1164014750/tomcat8-jdk1.8
# 上傳到 docker hub 等待上傳完成
$ docker push 1164014750/ubuntu:18.04
# 上傳完畢後,可以搜索查看
https://hub.docker.com/r/1164014750/gengzi
# 下載我們剛纔上傳的鏡像
docker pull 1164014750/gengzi
 
 

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章