Docker镜像制作

Docker镜像的构建分为两种,一种是手动构建,一种是dockerfile(自动构建)

手动构建

基于centos镜像进行构建制作Nginx镜像

[root@rbtnode1 ~]# docker run --name Edward -it centos

[root@429ae931a699 /]# yum install -y nginx

[root@429ae931a699 /]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

修改Nginx配置让它在前台运行

[root@429ae931a699 /]# vim /etc/nginx/nginx.conf

...

daemon off;

...

[root@rbtnode1 ~]# docker ps -a

CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS                      PORTS                  NAMES

429ae931a699        centos                   "/bin/bash"               minutes ago      Exited ()  seconds ago                          Edward

修改完之后commit

[root@rbtnode1 ~]# docker commit -m "My Nginx" 429ae931a699 edward/edward:v1

sha256:3240a62fc2e57466a7938af03fc21c84c24726fd200b5009530391ddb30abfb7

[root@rbtnode1 ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

edward/edward       v1                  3240a62fc2e5         seconds ago        MB

docker.io/nginx     latest              e445ab08b2be         days ago           MB

docker.io/centos    latest              9f38484d220f         months ago         MB

#注释

-m 描述

容器ID

第一个edward是仓库的名称

第二个edward是镜像的名称

v1 标签,如果是最后一个版本我们可以打latest

启动制作好的镜像
[root@rbtnode1 ~]# docker run --name nginxv1 -d -p : edward/edward:v1 nginx

0a38af6c6eddfc3a354760282f01ff6e16b93e4f903d7c154f038d68a10f581d

[root@rbtnode1 ~]# docker ps

CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                  NAMES

0a38af6c6edd        edward/edward:v1         "nginx"                   seconds ago       Up  seconds        0.0.0.0:->/tcp     nginxv1

自动构建

Dockerfile是由一行命令和语句组成的

Dockerfile构建步骤:

[root@rbtnode1 ~]# mkdir /dockerfile

[root@rbtnode1 ~]# cd /dockerfile

[root@rbtnode1 dockerfile]# mkdir nginx

[root@rbtnode1 dockerfile]# cd nginx

[root@rbtnode1 nginx]#vim Dockerfile

# Dockerfile

FROM centos

#Maintainer

MAINTAINER sjny yunweizabbix@.com

#Commands

RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm

RUN yum install -y nginx && yum clean all

RUN echo "daemon off;" >>/etc/nginx/nginx.conf

ADD index.html /usr/share/nginx/html/index.html

EXPOSE 

CMD ["nginx"]

[root@rbtnode1 nginx]# echo "hello world" >index.html

#井号代表注释

#Base image  除了注释的第一行,必须是FROM,意思就是我们需要告诉dockerfile基础镜像是什么

#Maintainer 维护信息

#Commands 命令

#ADD index.html 这个文件需要我们在当前目录下有才可以,我们配置我们可以准备好,然后使用ADD命令进行添加或修改

EXPOSE 对外端口号

CMD [“nginx”] 它要启动的命令是nginx (就算是nginx服务)

开始构建

docker build -t mynginx:v2 .

docker run --name mynginxtest -d -p : mynginx:v2

Dockerfile参数

FROM

格式:

FROM<image>或FROM<image>:<tag>

解释:FROM是dockerfile里的第一条指令,后面跟有效的镜像名(如果该镜像你的本地镜像没有则会从远程仓库pull取)。后面的其它指令在FROM的镜像中执行。

MAINTAINER

格式:

MAINTAINER <name>

解释:指定维护者信息。

RUN

格式:

RUN <command>或 RUN[“executable”,“param1”,“param2”]

解释:运行,命令,命令较长时可以使用\来换行。推荐使用以上数组格式

CMD

格式:

CMD [“executable”,”param1”,”param2”]使用exec执行,推荐;

CMD command param1 param2 在/bin/sh 中执行,提供给需要交互的应用;

CMD [“param1”,”param2”] 提供给ENTRYPOINT的默认参数;

解释:CMD指定容器启动是执行的命令,每个dockerfile只能有一条CMD命令,如果指定了多条,只有最后一条会被执行。如果你在启动容器的时候也指定的命令,那么会覆盖dockerfile构建的镜像里面的CMD命令。

ENTRYPOINT

格式:

ENTRYPOINT [“executable”,”param1”,”par am2”]

ENTRYPOINT command param1 param2 (shell中执行)

解释:和CMD类似都是配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖。

每个dockerfile中只能有一个ENTRYPOINT,当指定多个时,只有最后一个起效。ENTRYPOINT没有CMD的可替换特性,所以生产中可以同时使用ENTRYPOINT和CMD。

USER

格式:USER daemon

解释:指定运行容器时的用户名和UID。

EXPOSE

格式:EXPOSE<port> [<port>…]

解释:设置docker容器内部暴露的端口号,如果需要外部访问。还需要启动容器时增加-p或者-P参数进行分配。

ENV

格式:ENV

ENV =<value>…

解释:设置环境变量,可以在RUN之前使用,然后RUN命令时调用,容器启动时这些环境变量都会被指定。

ADD

格式:ADD <src>… <dest>

ADD [“”,. . . “”]

解释:将指定的复制到容器文件系统中

所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0

如果文件是可识别的压缩格式,则docker会帮忙解压缩

VOLUME

格式:VOLUME [“/data”]

解释:可以将本地文件夹或者其他container的文件挂载到container中

WORKDIR

格式:WORKDIR/path/to/workdir

解释:切换目录,为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。

可以多次切换(相当于cd命令)

也可以使用多个WORKDIR指令,后续命令如果参数是相对路劲,则会基于之前命令指定的路径。例如:

WORKDIR /a

WORKDIR b

WORKDIR c

RUN pwd

则最终路劲为 /a/b/c

ONBUILD

ONBUILD指定的命令在构建镜像时并不执行,而是在它的子镜像中执行

ARG

格式:ARG<name> [=<default value>]

解释:ARG指定了一个变量在docker build的时候使用,可以使用—build-arg =来指定参数的值,不过如果构建的时候不指定就会报错。

《Docekr入门学习篇》——Docker镜像制作的更多相关文章

  1. MySQL、MongoDB、Redis数据库Docker镜像制作

    MySQL.MongoDB.Redis数据库Docker镜像制作 在多台主机上进行数据库部署时,如果使用传统的MySQL的交互式的安装方式将会重复很多遍.如果做成镜像,那么我们只需要make once ...

  2. docker研究-4 docker镜像制作

    这次实验以centos镜像为基础镜像进行相关docker镜像制作. 1. 下载centos镜像 [root@localhost ~]# docker pull centosUsing default ...

  3. Docker 镜像制作教程:针对不同语言的精简策略

    本系列文章将分为三个部分: 第一部分着重介绍多阶段构建(multi-stage builds),因为这是镜像精简之路至关重要的一环.在这部分内容中,我会解释静态链接和动态链接的区别,它们对镜像带来的影 ...

  4. doris 0.9.0版本docker镜像制作与使用

    1. 安装docker 详情请参见本人博客 2. 编译doris 详情请参见doris官网文档 3. 在编译好的doris output文件夹下编写两个Dockerfile 3.1  Dockerfi ...

  5. Nginx+PHP7.3.9 Docker镜像制作

    最近因项目需要制作了多个版本的php docker镜像,制作过程可谓是一波三折,因基于yum的方式安装php的方式在安装扩展插件时很不方便,不容易找到插件对应的yum源,所以PHP在docker镜像中 ...

  6. presto-gateway 试用以及docker 镜像制作

    presto-gateway 是 lyft 团队开源 的prestodb 的工具.以下是一个简单的试用,以及碰到问题的解决 还有就是docker 镜像的制作 Dockerfile 很简单,本地构建然后 ...

  7. 实战【docker 镜像制作与使用】

    一.制作docker 镜像 使用spring boot 构建一个简单的web 项目,返回 “Hello,World ”字符串,使用 Maven 打成 jar 包,使用的Linux 环境是 Centos ...

  8. docker镜像制作及发布

    以centos为例. 主要内容:安装docker,制作镜像,发布镜像. 安装docker 1. 安装docker yum install -y docker 等待一会,安装成功,查看安装列表 2. 启 ...

  9. docker镜像制作Dockerfile

    使用 Dockerfile 定制镜像 从刚才的 docker commit 的学习中,我们可以了解到,镜像的定制实际上就是 定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作 的 ...

随机推荐

  1. Oracle 子程序、过程、函数

    一.子程序 子程序是一个数据库对象,存在于数据库中,里面存放的是PL/SQL代码,可以完成一定的共能,能被程序和客户端工具直接调用.子程序类似于java中的方法,可以接接收参数,按照是否有返回值,子程 ...

  2. 020-PHP浏览目录

    <?php // 使用表格浏览目录的结构 print("<TABLE BORDER= '1'>"); // 创建表格的头 print("<TR&g ...

  3. Delphi 10.4 最新消息

    官方发布了关于10.4的消息,译文如下: 做为我们的Delphi,C ++ Builder和RAD Studio的订阅客户,除了获得更新,升级和技术支持等主要好处外,我们还邀请订阅客户参加Beta计划 ...

  4. Java中的static关键字和new关键字作用介绍

    一.static关键字的作用 1.可以用于修改类的成员变量.代码块和类 通过static可以将类的成员声明为静态成员,静态的成员归属于整个类,而不是属于某个对象.无论通过类还是对象访问静态成员,操作的 ...

  5. 十一、React 获取服务器数据: axios插件、 fetch-jsonp插件的使用

    react获取服务器APi接口的数据: react中没有提供专门的请求数据的模块.但是我们可以使用任何第三方请求数据模块实现请求数据 一.axios 获取Api数据 使用文档:https://www. ...

  6. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-tags

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  7. java 实体 set数据 报空指针异常

    今天在做一个调用阿里云AXB隐私保护,需要调用通话记录的消费队列,然后set到实体中,然后插入到数据库,但是set的这一步报错 以为工具拿不到值,然后打印发现是有值的, 然后再看一下实例的类型是没错的 ...

  8. SpringCloud学习之Sleuth服务链路跟踪(十二)

    一.为什么需要Spring Cloud Sleuth 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元.由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很 ...

  9. jq监听

    $(window).resize(function () {//风电月表格自适应高度 var handHeight =$(".tree-handler").height() $(& ...

  10. 自学Java第五章——《面向对象的基本特征》

    面向对象的基本特征: 1.封装 2.继承 3.多态 6.1 封装 1.好处: (1)隐藏实现细节,方便使用者使用 (2)安全,可以控制可见范围 2.如何实现封装? 通过权限修饰符 面试题:请按照可见范 ...