《Docekr入门学习篇》——Docker镜像制作
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镜像制作的更多相关文章
- MySQL、MongoDB、Redis数据库Docker镜像制作
MySQL.MongoDB.Redis数据库Docker镜像制作 在多台主机上进行数据库部署时,如果使用传统的MySQL的交互式的安装方式将会重复很多遍.如果做成镜像,那么我们只需要make once ...
- docker研究-4 docker镜像制作
这次实验以centos镜像为基础镜像进行相关docker镜像制作. 1. 下载centos镜像 [root@localhost ~]# docker pull centosUsing default ...
- Docker 镜像制作教程:针对不同语言的精简策略
本系列文章将分为三个部分: 第一部分着重介绍多阶段构建(multi-stage builds),因为这是镜像精简之路至关重要的一环.在这部分内容中,我会解释静态链接和动态链接的区别,它们对镜像带来的影 ...
- doris 0.9.0版本docker镜像制作与使用
1. 安装docker 详情请参见本人博客 2. 编译doris 详情请参见doris官网文档 3. 在编译好的doris output文件夹下编写两个Dockerfile 3.1 Dockerfi ...
- Nginx+PHP7.3.9 Docker镜像制作
最近因项目需要制作了多个版本的php docker镜像,制作过程可谓是一波三折,因基于yum的方式安装php的方式在安装扩展插件时很不方便,不容易找到插件对应的yum源,所以PHP在docker镜像中 ...
- presto-gateway 试用以及docker 镜像制作
presto-gateway 是 lyft 团队开源 的prestodb 的工具.以下是一个简单的试用,以及碰到问题的解决 还有就是docker 镜像的制作 Dockerfile 很简单,本地构建然后 ...
- 实战【docker 镜像制作与使用】
一.制作docker 镜像 使用spring boot 构建一个简单的web 项目,返回 “Hello,World ”字符串,使用 Maven 打成 jar 包,使用的Linux 环境是 Centos ...
- docker镜像制作及发布
以centos为例. 主要内容:安装docker,制作镜像,发布镜像. 安装docker 1. 安装docker yum install -y docker 等待一会,安装成功,查看安装列表 2. 启 ...
- docker镜像制作Dockerfile
使用 Dockerfile 定制镜像 从刚才的 docker commit 的学习中,我们可以了解到,镜像的定制实际上就是 定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作 的 ...
随机推荐
- plsql调用执行存储过程
参考 https://www.cnblogs.com/enjoyjava/p/9131169.html ------------------------------------------------ ...
- linux下如果指令太长,怎么换行输入;怎么快速删除整行命令;怎么快速移动到命令最前或者最后
1.范例:如果指令串太长的话,如何使用两行来输出?[dmtsai@study ~]$ cp /var/spool/mail/root /etc/crontab \> /etc/fstab /ro ...
- 1.求子集,2.动态创建action
功能待完善 #ifndef MYMAINWINDOW_H #define MYMAINWINDOW_H #include <QMainWindow> #include <QTable ...
- 【剑指Offer】面试题12. 矩阵中的路径
题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格.如果一条路径经过了矩阵的某一格,那么该路径 ...
- /etc/apt/sources.list.d
deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main# deb-src http://ppa.launchpad.net/w ...
- TX2--安装跑一python3.5
sudo add-apt-repository ppa:webupd8team/javasudo apt-get updatesudo apt-get install oracle-java8-ins ...
- 漏洞复现 - ActiveMQ反序列化漏洞(CVE-2015-5254)
基础知识 MQ(Message Queue):消息队列/消息中间件.消息服务将消息放在队列/主题中,在合适时候发给接收者.发送和接收是异步的(发送者和接收者的生命周期没有必然关系). 队列:消息存在队 ...
- 常用ES6-ES10知识点总结
在工作中我们会常用到的一些es6-es10的一些特性还记得多少,今天就让我们重新复习一遍 ES6语法 1.Let 1.let声明的变量具有块级作用域, { let a = 1 } console.lo ...
- swiper实现匀速无缝滚动
设置属性 speed:2500,//匀速时间 autoplay: { delay: 0, stopOnLastSlide: false, disableOnInteraction: true, }, ...
- UVALive 5913 字典树
先输入n个字符串的字典,每个字符串的前缀+后缀可以组成新的合法字符串,但肯定是有重复的,问从给定的字符串,生成的所有可能的字符串为多少个 把前缀和后缀压入字典树,达到前缀和后缀的去重,首先的总和即为前 ...