Docker进阶之构建自定义镜像实战指南

目录
  • 一、什么是 Docker 镜像?
  • 二、自定义镜像的好处?
  • 三、构建自己的Centos
  • 四、RUN、CMD和ENTRYPOINT的区别
  • 五、【实战】Dockerfile制作tomcat镜像
  • 小结

一、什么是 Docker 镜像?

Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像是Docker容器的基石,容器是镜像的运行实例,有了镜像才能启动容器。

二、自定义镜像的好处?

从软件版本管理角度讲,Dockerfile本身是脚本文件,是可以版本化的。理论上使用Dockerfile,在任何时候任何机器上都可以重演镜像制作过程制作出一模一样的镜像,这是非常有利于工程化的。

Dockerfile 可以快速帮助我们构建自己的定制镜像!

三、构建自己的Centos

通过编写 Dockerfile 文件来制作Centos 镜像,并在官方提供的基础上添加 vim、net-tools文件

新建 /home/dockerfile

cd /home
mkdir dockerfile

进入新建的dockerfile文件夹,并新建 mydockerfile-centos

# 基础镜像引入centos7
FROM centos:centos7
# 作者
MAINTAINER xiaowang<wanghuichen2003@163.com>
#配置工作目录
ENV MYPATH /usr/local

WORKDIR $MYPATH
#由于官方默认提供的centos是压缩版本,没有vim以及一些其它的命令,只有基础的命令,我们需要去下载安装包
RUN yum -y install vim
RUN yum -y install net-tools

# 开放端口80
EXPOSE 80

# 输出工作目录
CMD echo $MYPATH
CMD echo "--- end ---"
# 以bin/bash启动
CMD /bin/bash

查看编写好的文件

编译刚刚写好的centos7

# 注意后面有一个 .  代表当前目录
docker build -f mydockerfile-centos  -t mycentos:0.1 .

等待编译完成即可

完成后运行镜像

docker run -it mycentos:0.1

vim 文件

vim test

pwd

查看ifconfig

查看镜像历史操作

docker history 2c2feb50d12c

四、RUN、CMD和ENTRYPOINT的区别

RUN命令与CMD命令的区别在哪里?

简单说,RUN命令在Image 文件的构建阶段执行,执行结果会打包进入image文件,CMD命令则是在容器启动后执行。另外,一个Dockerfile可以包含多个RUN命令,但只能由一个CMD命令

注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令。

CMD和ENTRYPOINT命令的区别

  • CMD:指定容器启动的时候要运行的命令,只有最后一个会生效
  • ENRTYPOINT:指定容器启动的时候要运行的命令,命令可以追加

CMD命令

# 进入dockerfile 目录,新建dockerfile-cmd-test文件

FROM centos:centos7
CMD ["ls", "-a"]

编译并执行文件

# 编译文件
docker build -f dockerfile-cmd-test -t cmdtest .

# 执行文件
docker run f74776bf8b3c

追加命令查看全部文件目录

docker run f74776bf8b3c -l

可以看到,cmd命令把上一个命令给替换了,由于 -l 不是命令,所以报错了,证明cmd命令会覆盖前面的cmd命令,只执行最后一个cmd命令

再次执行查看全部文件目录命令

docker run f74776bf8b3c ls -al

可以看到,上一个 ls-a命令已被替换为ls -al命令!

ENTRYPOINT命令

回到 /home/dockerfile 目录,新建文件测试ENTRYPOINT并写入内容

cd /home/dockerfile

vim dockerfile-entrypoint

# 写入以下命令
FROM centos:centos7
ENTRYPOINT ["ls", "-a"]

编译文件并执行容器

# 编译文件
docker build -f dockerfile-entrypoint
# 执行容器
docker run 29891c9ff3c9

在启动时追加命令

docker run 29891c9ff3c9 -l

可以看到直接追加了命令

五、【实战】Dockerfile制作tomcat镜像

下载JDK、Tomcat文件

jdk:https://www.jb51.net/softs/698365.html

Tomcat:https://www.jb51.net/softs/537911.html

使用Filezilla将文件上传至 /home/xiaowang目录下

上传成功后查看文件

编写文件

编写dockerfile文件,文件名使用官方命名:Dockerfile,build的时候会默认寻找当前目录下的文件,不需要 -f 参数指定

vim Dockerfile

# 写入以下文件

FROM centos:centos7
MAINTAINER ethan<wanghuichen2003@163.com>

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u311-linux-x64.tar.gz /usr/local
ADD apache-tomcat-9.0.62.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_311
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib.tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.62
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.62
ENVPATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.62/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.62/bin/logs/catalina.out

构建镜像

编译镜像文件

docker build -t diytomcat:1.0

启动镜像

编译完成后启动镜像

# 启动容器,外部端口3355映射内部容器8080 重命名容器名称,挂载镜像
docker run -d -p 3355:8080 --name diytomcat -v /home/dockerfile/xiaowang/test:/usr/local/apache-tomcat-9.0.62/webapps/test diytomcat:1.0

测试访问

访问外网ip地址+3355端口出现tomcat界面

在tomcat目录下新建html文件

由于内部容器和外部进行了挂载,所以修改外部内容,内部容器也会更新

我们进入目录,新建html文件对外访问时展示此页面

cd /home/dockerfile/xiaowang/test

vim test.html

写入以下内容

<!DOCTYPE html>
<html>
    <head>
         <meta charset="UTF-8"/>
        <title>Title</title>
    </head>
    <body>
        <h1>简单的HTML页面</h1>
        <p>Hello World!</p>
    </body>
</html>

浏览器后缀+test路径访问

ok,至此tomcat镜像制作完毕

小结

以上就是【Bug 终结者】对 【云原生】Docker 进阶 – 构建自定义镜像实战 自定义我们的Docker镜像可利于我们的快速开发,提高开发的效率,可谓是开发利器!

到此这篇关于Docker进阶之构建自定义镜像实战的文章就介绍到这了,更多相关Docker构建自定义镜像内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • docker官方mysql镜像自定义配置详解

    之前为了节省安装时间,所以用官方mysql docker镜像启动mysql. 通过 复制代码 代码如下: $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d daocloud.io/mysql:tag some-mysql 指定了该容器的名字,my-secret-pw 指定了 root 用户的密码,tag 参数指定了你想要的 MySQL 版本 这样数据是没有持久化的 所以在启动参数中需要挂载本地目录 于是这样

  • Dockerfile构建自定义镜像的实现

    目录 前言 Dockerfile简介 Dockerfile构建镜像的流程 Dockerfile使用 前言 前面文章中使用docker运行容器使用的镜像都是从dockerhub上远程pull下来的,那么我们能不能构建自己的镜像呢?答案是肯定滴,可以通过Dockerfile构建自己的镜像,Dockerfile本身并不难,就是一堆命令,让小编觉得有难度的地方是如何使用Dockerfile的这些命令从更高一层的角度上更好的去构建自己的镜像,我们就一起来看看吧. Dockerfile简介 Dockerfi

  • 详解Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较

    1.概述 创建Docker镜像的方式有三种 docker commit命令:由容器生成镜像: Dockerfile文件+docker build命令: 从本地文件系统导入:OpenVZ的模板. 关于这三种方式的大致说明请参考yeasy/docker_practice的创建镜像. 最近学习了Dockerfile文件的相关配置,这里做一下简单的总结,并对之前一直感到有些迷惑的CMD和ENTRYPOINT指令做个差异对比. 2.Dockerfile文件总结 Dockerfile 由一行行命令语句组成,

  • docker自定义镜像构建php7的方法

    首先进行简单的docker安装. 要进行自定义镜像,我们需要选择一个基础镜像进行构建自己的镜像:其实说白了,就是在一个有基础定义好的容器内,执行安装各种程序的命令,生成 所谓的Dockerfile 文件,既然如此第一步我们首先需要找一个本地的镜像作为基础镜像来操作即可: 1 如上图所示,我们来以centos为基础镜像,来构建一个Dockerfile 2第二步我们需要构建一个目录,用于存放Dockerfile文件 在root下构建docker_demo目录,存放 Dockerfile文件以及需要安

  • 使用Docker构建企业级自定义镜像的方法

    前言 临下班前,楼主接到了一个需求,由于基础镜像标准发生变更,需要按照最新的Docker 镜像标准构建自己应用的自定义镜像.目前的标准是这样的:基础架构组只提供所有项目必须接入的3个公共镜像,这3个公共基础镜像包含了:JDK8.Skywalking.Arthas.对于各自业务组的应用如果还需要加入其它镜像,则由各个业务组自己基于基础架构组提供的公共镜像之上,再添加自定义的镜像,结构图如下: 构建步骤 编写Dockerfile 基于最新的规范来看,我们需要编写一个Dockerfile,然后引用基础

  • Docker进阶之构建自定义镜像实战指南

    目录 一.什么是 Docker 镜像? 二.自定义镜像的好处? 三.构建自己的Centos 四.RUN.CMD和ENTRYPOINT的区别 五.[实战]Dockerfile制作tomcat镜像 小结 一.什么是 Docker 镜像? Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷.环境变量.用户等).镜像不包含任何动态数据,其内容在构建之后也不会被改变. 镜像是Docker容器的基石,容器是镜

  • docker通过Dockerfile构建mysql镜像的方法

    构建Dockerfile ,路径 /docker/mysql FROM hub.c.163.com/library/mysql:5.7 #作者信息 MAINTAINER hu "***@qq.com" #修改编码方式 RUN echo "character-set-server=utf8" >> /etc/mysql/mysql.conf.d/mysqld.cnf RUN service mysql restart EXPOSE 3306 到Docker

  • Docker从零构建php-nginx-alpine镜像的方法

    虽然之前也曾用docker环境运行了一些项目,但对于镜像这块还不是很理解,且鉴于网上现成的镜像都包含太多用不到的库,所以决定从零开始构建一个自己的镜像. alpine linux为基础镜像 docker pull gliderlabs/alpine alpine linux 镜像地址 目前最新的tag是3.8版本,镜像只有4M的大小,非常的精简. 运行镜像 docker run -it gliderlabs/alpine 运行后可以看到里面有基本的linux文件系统,这里不做演示,有兴趣者可自行

  • Docker镜像构建原理解析(不装docker也能构建镜像)

    在devops流程里面 构建镜像是一个非常重要的过程,一般构建镜像是写dockerfile文件然后通过docker client来构建的image. docker client 会先检查本地有没有image,如果没有帮你 从镜像仓库 pull 下来 然后解析你写的dockerfile构建新的image. 本文带你了解 pull 命令 背后是怎么做的? build 命令 背后是怎么做的? 下篇文章带你解析: 如果我不用docker 我如何构建一个镜像? 我们以微软的aspnet2.2为基础构建一个

  • 使用dockerfile构建nginx镜像的方法示例

    Dockerfile介绍 Docker通过读取Dockerfile里面的内容可以自动build image,Dockerfile是一个包含了build过程中需要执行的所有命令的文本文件.也可以理解为Dockfile是一种被Docker程序解释的脚本,由一条一条的指令组成,每条指令对应Linux系统下面的一条命令,由Docker程序将这些Dockerfile指令翻译成真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefil

  • docker灵活的构建PHP环境的实现

    使用docker搭建灵活的线上php环境 有时候你可能不太需要一些别人已经集成了的包或者镜像 我们就可以使用以下方式自己动手逐一构建自己所需要的环境结构 并在最后实现一键自动化部署 一步一步点亮docker技能树 ## . ## ## ## == ## ## ## ## ## === /""""""""""""""""".__/ ===

  • 手动构建自己的docker容器镜像实战

    目录 前言 一. 设置docker构建镜像的环境 1.1 commit 命令的介绍 1.2 创建一个tomcat容器 二. 开始构建自己的镜像 2.1 查看容器的ID 2.2 使用命令docker commit 生成该容器的镜像,并保存在本地 三. 上传镜像到镜像仓库 3.1 登录docker hub 3.2 创建镜像 3.3 上传到镜像仓库 前言 之前的实战中,我们实战中,我们使用的镜像都是镜像仓库已有的镜像. 已有的镜像都是别人已经开发好上传的.今天我们一起来看看如何构建自己的镜像并上传到镜

随机推荐