《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 的学习中,我们可以了解到,镜像的定制实际上就是 定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作 的 ...
随机推荐
- 洛谷 P2747 Canada Tour 周游加拿大 动态规划
Description 你赢得了一场航空公司举办的比赛,奖品是一张加拿大机票.旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行,直到你到达最东边的城市,再由东向西返回,直到你回到开始的城 ...
- 洛谷P1433 吃奶酪 题解 状态压缩DP
题目链接:https://www.luogu.com.cn/problem/P1433 题目大意 房间里放着 \(n\) 块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在 \((0, ...
- EE将于5月30日在英国推出首个5G网络
英国移动运营商 EE 宣布计划于周三在英国推出 5G,该网络将于 5 月 30 日开通,第一批 5G 手机可从今天开始预订.EE 最初的 5G 网络部署将集中在六个城市(伦敦,加的夫,爱丁堡,贝尔法斯 ...
- maven工程运行演示
通过maven提供的命令来运行maven工程,体会maven构建工程的优点. (1)运行web工程 进入maven工程目录(当前目录有pom.xml),运行tomcat:run命令 可能出现的问 ...
- 面试官,不要再问我“Java虚拟机类加载机制”了(转载)
关于Java虚拟机类加载机制往往有两方面的 面试题:根据程序判断输出结果和讲讲虚拟机类加载机制的流程.其实这两类题本质上都是考察面试者对Java虚拟机类加载机制的了解. 面试题试水 现在有这样一道判断 ...
- 数据备份 rsyncd服务器
web服务器传文件到备份服务器: 一. rsync备份服务器,yum install -y rsync makdir /etc/rsyncd touch /etc/rsyncd/rsyncd.conf ...
- java切换jdk版本
目的:将jdk1.7切换为jdk1.6 1.原本安装了jdk1.7,环境变量也是配置的1.7相关路径,在cmd下输入[java -version]后,显示 [ C:\Users\Administrat ...
- 微服务和SpringCloud入门
微服务和SpringCloud入门 微服务是什么 微服务的核心是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去耦合,每个微服务提供单个业务功能的服务,一个服务做一件事情,从技术角度看就是一种 ...
- idea自定义模版
点小灯 编辑live模版设置 模版全称 private static final Logger logger = LoggerFactory.getLogger($classname$.class); ...
- ETL优化
ETL优化 Extract.Transform.Load,对异构数据源进行数据处理. 设立基线标准,根据硬盘.网络传输速度,多测测量得到数据量(m)/时间(s)的比值,找线性关系.建立基线作为调试和优 ...