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. Nachos-Lab1-完善线程机制

    Nachos是什么 Nachos (Not Another Completely Heuristic Operating System),是一个教学用操作系统,提供了操作系统框架: 线程 中断 虚拟内 ...

  2. 093-PHP数组比较

    <?php $arra=array('hello','hi'); //定义多个数组 $arrb=array(1=>'hi',0=>'hello'); $arrc=array(1,2) ...

  3. 腾讯云服务器上搭建Jenkins配置邮箱通知

    1,Jenkins 点击 系统管理 2,点击系统管理 3,配置系统管理员邮件地址 5,配置 Extended E-main Notification,(用户名不需要邮箱后缀“@163.com”, SS ...

  4. Flink 操作链与任务槽

    Operator Chains(操作链) Flink出于分布式执行的目的,将operator的subtask链接在一起形成task(类似spark中的管道). 每个task在一个线程中执行. 将ope ...

  5. you-get加ffmpeg获取视频素材并转格式

    最近做视频,觉得素材不好下载,下载了转格式又很麻烦,终于,在网上ob了很久的我找到了属于自己的工具. you-get视频下载 当你在网上找视频素材的时候发现了一个自己觉得很有意思的视频,但是获取这个视 ...

  6. oracle问题:char类型数据查询不到

    select distinct id,name from test_table b where b.ID='001' ; id为char字段类型,使用该语句查询不出数据. 解决方法:加trim().改 ...

  7. Mysql安装维护笔记一

    1.Centos7安装mysql rpm安装PHP7相应的yum源 $wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11. ...

  8. mac安装和启动mongodb

    使用使用 brew安装mongodb 可以使用 OSX 的 brew 来安装 mongodb: sudo brew install mongodb 如果要安装支持 TLS/SSL 命令如下: sudo ...

  9. 基于Ambari的WebUI部署HBase服务

    基于Ambari的WebUI部署HBase服务 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.部署Ambari服务 博主推荐阅读: https://www.cnblogs.co ...

  10. TX2_安装view_team

    TX2上的帐号是:1317149963,dc200820305233 参考网站:https://blog.csdn.net/qq_33512213/article/details/90050792 安 ...