Docker (五) --------- Docker 自定义镜像


一、认识 Dockerfile 文件

Dockerfile 用于构建 Docker 镜像,Dockerfile 文件是由一行行命令语句组成 , 基于这些命令即可以构建一个镜像, 比如下 面就是一个 Dockefile 文件样例

FROM XXX/jdk:8
MAINTAINER docker_user
ENV JAVA_HOME /usr/local/java
ADD apache-tomcat-8.0.32.tar.gz /usr/local/
RUN mv apache-tomcat-8.0.32 tomcat8
EXPOSE 8080
RUN chmod u+x /usr/local/tomcat8/bin/*.sh
CMD /usr/local/tomcat8/bin/catalina.sh start

二、Dockerfile 的基本结构

一般的,Dockerfile 分为四部分:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令

三、Dockerfile 指令

FROM

  • 格式为 FROM <image>FROM <image>:<tag>
    Dockerfile 文件的第一条指令必须为 FROM 指令。并且,如果在同一个 Dockerfile 中创建多个镜像时,可以使用多个FROM 指令(每个镜像一次)。

MAINTAINER

  • 格式为 MAINTAINER <name>,指定维护者信息。

ENV

  • 格式为 ENV <key> <value>,指定一个环境变量,会被后续RUN 指令使用,并在容器运行时保持。

ADD

  • 格式为 ADD <src> <dest>,复制指定的<src>到容器中的<dest>

EXPOSE

  • 格式为 EXPOSE <port> [<port>...]告诉 Docker 服务端容器暴露的端口号,供互联系统使用,在启动容器时需要通过 -p 映射端口,Docker 主机会自动分配一个端口转发到指定的端口。

RUN

  • 格式为 RUN <command>,RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像,当命令较长时可以使用 \ 来换行。

CMD

  • 指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。

四、Dockerfile 自定义镜像

1. 自定义 JDK 镜像

FROM centos:latest
MAINTAINER fancy
ADD jdk-8u121-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_121.
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
CMD java -version

构建镜像:docker build -t fancy_jdk1.8.0_121 .

运行镜像:docker run -d ac84bde53958

2. 自定义 Tomcat 镜像

定义 Dockerfile 文件:

FROM fancy_jdk1.8.0_121
MAINTAINER fancy
ADD apache-tomcat-8.5.24.tar.gz /usr/local/
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.24
ENV PATH $PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.24/bin/catalina.sh run

构建镜像: docker build -t fancy-tomcat-8.5.24 .

后边的空格和点(会加载当前目录Dockerfilewen文件),不能省略

运行镜像:docker run -d -p 8080:8080 ab41b5f48256

3. 自定义 MySQL 镜像

定义 Dockerfile 文件:

FROM centos:centos6
MAINTAINER fancy
RUN yum install mysql-server mysql -y
RUN /etc/init.d/mysqld start &&\
mysql -e "grant all privileges on *.* to 'root'@'%' identified by '123456' WITH
GRANT OPTION ;"&&\
mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by '123456'
WITH GRANT OPTION ;"&&\
mysql -uroot -p123456 -e "show databases;"
EXPOSE 3306
CMD /usr/bin/mysqld_safe

构建镜像:docker build -t fancy-mysql .

运行镜像:docker run -d -p 3306:3306 09ce279d92df

4. 自定义 Redis 镜像

定义 Dockerfile 文件:

FROM centos:latest
MAINTAINER fancy
RUN yum install epel-release -y && yum install redis -y && yum install net-tools -y
EXPOSE 6379
CMD /usr/bin/redis-server –protected-mode no

构建镜像:docker build -t fancy-redis .

运行镜像:docker run -d -p 6379:6379 390583cf0531

五、镜像发布到仓库

A、阿里云容器镜像仓库

网址:https://dev.aliyun.com

B、注册阿里云镜像仓库

如果没有阿里云账号,需要注册一个阿里云账号。也可以使用淘宝账号、支付宝账号登录。

C、发布镜像阿里云镜像仓库

在控制台中找到容器镜像服务,如下图

在这里插入图片描述

创建个人实例,完成之后点击创建镜像仓库
在这里插入图片描述

输入命令空间和仓库名称,点击下一步。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

推送镜像仓库根据下方的操作指南操作即可
在这里插入图片描述

D、配置 Docker Hub 镜像加速
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker允许用户通过Dockerfile来定义自己的镜像。下面是一个简单的示例,演示如何创建一个自定义镜像: 1. 首先,在一个空白目录中创建一个名为Dockerfile的文件。 2. 在Dockerfile中,使用FROM指令指定基础镜像。例如,可以选择一个适合你的应用程序的操作系统作为基础镜像。 ``` FROM ubuntu:latest ``` 3. 接下来,使用RUN指令执行一系列命令来设置镜像的环境。例如,安装一些软件包或配置一些文件。 ``` RUN apt-get update && apt-get install -y software-properties-common ``` 4. 使用COPY指令将本地文件复制到镜像中。例如,复制应用程序的源代码文件。 ``` COPY . /app ``` 5. 使用WORKDIR指令设置工作目录。例如,进入应用程序的根目录。 ``` WORKDIR /app ``` 6. 使用CMD指令定义容器启动时要运行的命令。例如,启动应用程序。 ``` CMD ["python", "app.py"] ``` 7. 保存并关闭Dockerfile。 接下来,你可以使用以下命令构建自定义镜像: ``` docker build -t my-custom-image:tag . ``` 其中,`-t`参数用于指定镜像的名称和标签,`.`表示Dockerfile所在的当前目录。 构建过程可能需要一些时间,取决于你的镜像大小和网络速度。构建完成后,你可以使用以下命令查看所有可用的镜像: ``` docker images ``` 你应该能够看到刚刚构建的自定义镜像。 希望这个简单示例可以帮助你开始创建自己的Docker自定义镜像

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在森林中麋了鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值