docker镜像封装之Dockerfile的编写

一.Dockerfile

1.镜像的简介

在使用DockerFile定制镜像之前,我们先来了解一下镜像的构成:镜像是容器的基础,每次执行docker run命令的时候都会指定哪个镜像作为容器运行的基础。在之前的例字中,我们使用的镜像都是来自Docker Hub的镜像。直接使用这些镜像为基础运行容器可以一定程度上满足我们的需求,可是当这些镜像都无法直接满足需求时,我们就需要定制镜像!

2.Dockerfile的简介

使用Dockerfile可以允许用户创建自定义的镜像

Dockerfile一般由一条条语句组成,并支持以 # 开头的注释行

一般来说Dockerfile分为四部分

    基础镜像信息:以哪个镜像作为基础进行制作,用法是FROM基础镜像名称
    维护者信息:需要写下该Dockerfile编写人的姓名或邮箱,用法是MANITAINER 名称/邮箱
    镜像操作指令:对基础镜像要进行的改造命令,比如安装新的软件,进行哪些特殊配置等,常见的是RUN命令
    容器启动时执行指令:当基于该镜像的容器启动时需要执行哪些命令,常见的是CMD命令或ENTRYPOINT

二…创建支持nginx服务的docker镜像

1、编写支持nginx的Dockerfile

[root@server1 ~]# mkdir /mnt/docker
[root@server1 ~]# cd /mnt/docker/
[root@server1 docker]# mkdir nginx
[root@server1 docker]# cd nginx
[root@server1 nginx]# vim Dockerfile
FROM rhel7
EXPOSE 80
COPY dvd.repo /etc/yum.repos.d/dvd.repo
RUN rpmdb --rebuilddb && yum install -y gcc pcre-devel zlib-devel make
ADD nginx-1.15.8.tar.gz /mnt
WORKDIR /mnt/nginx-1.15.8
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN ./configure --prefix=/usr/local/nginx
RUN make
RUN make install
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

2、编写dvd.repo文件

[root@server1 nginx]# vim dvd.repo
[dvd]
name=rhel7.3
baseurl=http://172.25.28.250/rhel7.3
gpgcheck=0
enabled=1

3、构建镜像
下载压缩包:nginx-1.15.8.tar.gz,并将其放在下面建好的目录/mnt/docker/nginx目录下,以便将其放在容器内。

在这里插入图片描述

[root@server1 nginx]# docker build -t rhel7:nginx5 .  #注意后面的点

查看构建的nginx镜像
在这里插入图片描述

4、测试nginx

[root@server1 nginx]# docker run -d --name vm1 -p 80:80 rhel7:nginx5     #创建并运行vm6容器
[root@server1 nginx]# cd /var/lib/docker/volumes/d1ba12b2c7906a07afd73438c6049df1721787f44866cd1564ed73d5823bb784/_data  #该数据卷的目录来源于下面的图片(查看vm6容器的关于volume的详情)
[root@server1 _data]# ls   #值的注意的是:在默认的数据卷中,会有相应的数据。(这是由nginx基础镜像决定的)。
50x.html  index.html
[root@server1 _data]# vim index.html
<h1>news.xin.com</h1>

查看vm1容器的关于volume的详情
在这里插入图片描述
测试是否可用,访问172.25.28.1
在这里插入图片描述
下面,我们对镜像进行优化(对Dockerfile文件进行修改),以减小生成的镜像的大小

1、编写支持nginx的Dockerfile

[root@server1 nginx]# vim Dockerfile
FROM nginx as base
 
# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ARG Asia/Shanghai

RUN mkdir -p /opt/var/cache/nginx && \
    cp -a --parents /usr/lib/nginx /opt && \
    cp -a --parents /usr/share/nginx /opt && \
    cp -a --parents /var/log/nginx /opt && \
    cp -aL --parents /var/run /opt && \
    cp -a --parents /etc/nginx /opt && \
    cp -a --parents /etc/passwd /opt && \
    cp -a --parents /etc/group /opt && \
    cp -a --parents /usr/sbin/nginx /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpcre.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libc.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libdl.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpthread.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libcrypt.so.* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \
    cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtime
 
FROM gcr.io/distroless/base
 
COPY --from=base /opt /
 
EXPOSE 80
 
ENTRYPOINT ["nginx","-g","daemon off;"]

2.下载distorless.tar文件,并将其导入到镜像中
在这里插入图片描述

[root@server1 ~]# docker load -i distroless.tar

3.构建镜像

[root@server1 nginx]# docker build -t rhel7:nginx . #不要忘记后面的点

查看构建的nginx镜像
在这里插入图片描述
4.测试是否可以使用

[root@server1 nginx]# docker run -d --name vm1 -p 80:80 rhel7:nginx      #创建并运行vm1容器
[root@server1 nginx]# vim index.html
<h1>news.xin.com</h1>
[root@server1 nginx]# docker cp index.html vm1:/usr/share/nginx/html

浏览器访问172.25.28.1
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于您的问题,这里提供一个基于openEuler:20.03的docker镜像封装mysql5:7的dockerfile案例,具体操作步骤如下: 1. 首先,您需要在本地安装docker。 2. 创建一个新的工作文件夹,并在其中创建一个名为dockerfile的文件。 3. 在dockerfile文件中编写以下代码来定义基本镜像,以及安装mysql5:7所需的依赖库和软件包: ``` FROM openEuler:20.03 RUN yum install -y wget \ && yum install -y libaio numactl \ && wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz \ && tar -zxvf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz \ && mv mysql-5.7.29-linux-glibc2.12-x86_64 /usr/local/mysql \ && rm -rf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz \ && echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile \ && source /etc/profile ``` 4. 在dockerfile文件所在的工作文件夹中运行以下命令,来构建mysql5:7的docker镜像: ``` docker build -t mysql5:7 . ``` 5. 利用以下命令来运行mysql5:7 docker镜像,并启动mysql服务: ``` docker run -itd --name mysql5 -p 3306:3306 mysql5:7 \ /usr/local/mysql/bin/mysqld_safe --user=mysql --datadir=/var/lib/mysql --pid-file=/var/run/mysqld/mysqld.pid --log-error=/var/log/mysql/error.log \ --socket=/var/lib/mysql/mysql.sock ``` 6. 启动mysql5:7 docker镜像后,您可以通过您的MySQL客户端来连接到MySQL服务器,以开始进行数据管理和查询等操作。 希望以上内容能够对您有所帮助。如果您有其他问题,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值