前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Dokcer-Dockerfile案例二

Dokcer-Dockerfile案例二

作者头像
运维小路
发布2024-12-05 12:15:32
发布2024-12-05 12:15:32
5300
代码可运行
举报
文章被收录于专栏:运维小路运维小路
运行总次数:0
代码可运行

我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:

Docker基本情况

Docker基本命令

Dockerfile(本小节属于)

Docker镜像

Docker仓库

Docker原理

Docker网络&存储&日志

Docker-Compose

Docker番外篇

我们上小节这个Dockerfile,模拟了一个需求,今天我们将模拟另外一个需求,这些需求在实际上的运维当中,可能和现在的需求都不一样,但是作为理解这个Dockerfile还是没问题的。

需求:

1.基础镜像使用centos:7。

2.环境需要安装基础环境openjdk1.8。

3.这个openjdk环境还需要经常变化。

4.然后要使用这个基础环境安装部署java软件zookeeper。

拆解需求:

1.基础镜像,这个没什么好说,根据业务或者技术需求自己选合适的即可。

2.环境需要安装一个openjdk版本,而且还需要经常变,我们怎么来实现这个变化呢?我们是不是可以把这个需求拆分:基础镜像+openjdk=openjdk1.8镜像;基础镜像+openjdk11=openjdk11镜像,及其他版本,然后把这个openjdk:1.8镜像作为应用程序的基础镜像,甚至应用程序还可以进行拆分。

3.安装测试应用程序zookeeper。

实操:

openjkd1.8镜像

代码语言:javascript
代码运行次数:0
复制
FROM centos:7
RUN rm -rf /etc/yum.repos.d/*.repo && \
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && \
    yum -y install java-1.8.0-openjdk 
代码语言:javascript
代码运行次数:0
复制
#也可以根据自己的需要,定义自己的tag
docker build -t openjdk:1.8

openjdk11镜像

代码语言:javascript
代码运行次数:0
复制
FROM centos:7
RUN rm -rf /etc/yum.repos.d/*.repo && \
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && \
    yum -y install java-11-openjdk
代码语言:javascript
代码运行次数:0
复制
#也可以根据自己的需要,定义自己的tag
docker build -t openjdk:11

zookeeper镜像

代码语言:javascript
代码运行次数:0
复制
FROM openjdk:1.8
ENV ZOOKEEPER_VERSION=3.7.2 \
    ZOOKEEPER_HOME=/opt/zookeeper \
    ZOOKEEPER_BINARY=apache-zookeeper-3.7.2-bin.tar.gz
RUN mkdir -p ${ZOOKEEPER_HOME} && \
    cd /tmp && \
    curl -O https://dlcdn.apache.org/zookeeper/zookeeper-${ZOOKEEPER_VERSION}/${ZOOKEEPER_BINARY} && \
    tar -xzf ${ZOOKEEPER_BINARY} -C ${ZOOKEEPER_HOME} --strip-components=1 && \
    rm /tmp/${ZOOKEEPER_BINARY} && \
    cd ${ZOOKEEPER_HOME} && \
    mv ./conf/zoo_sample.cfg ./conf/zoo.cfg 
WORKDIR ${ZOOKEEPER_HOME}
EXPOSE 2181
CMD ["bin/zkServer.sh", "start-foreground"]

总结

1.这里的核心是让你理解我们和合理利用镜像的分层功能(至于是什么分层,如何分层,我们将在下一小节讲解),不需要所有操作都从最基础的镜像做。这样我们后面需要升级jdk版本的时候,只要把FROM更换成openjdk11即可。

2.这样做可以让我们构建的速度更快,同时上传下载镜像速度也会更快。

3.而且我们如果有修改,只需要修改变更部分即可,不需要全局修改。

4.还有一个做镜像的经验(这里还是以centos7为例):

首先就是基于centos7创建一个容器,然后根据需要在容器里面完成所有安装部署工作。

其次就是基于刚才在容器里面操作命令写成Dockerfile,这样避免凭空写出来的Dockerfile错误,而进行频繁的修改和调试。比如我在构建这个zookeeper的镜像的时候,就多次构建,而我用的下载地址是国外的,每次光下载镜像就需要5分钟以上。这样就导致我们的工作效率降低。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档