《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 的学习中,我们可以了解到,镜像的定制实际上就是 定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作 的 ...
随机推荐
- Linux下部署开源版“禅道”项目管理系统《转载》
Linux下部署开源版“禅道”项目管理系统 https://www.cnblogs.com/xxsl/p/6525378.html
- pip制作离线安装包
有的电脑无法连接外网(金融行业你懂的),上网下载包又下载不到 anaconda安装一个包(联网情况下)很简单 pip install python-docx 如何把python-docx做成离线包安装 ...
- HDU_4912 Path on the tree 2014多校5 贪心+LCA
当时刚学LCA-tarjan不久,就比赛有这个题,但没想到还是没做出来..一开始以为是DP来着,没想到是贪心,想想也对,从树的最下层开始,每次遇到询问的点,就找到他们的LCA(路径里面必经LCA),然 ...
- Python MySQL 创建数据库
章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...
- centos6.7搭建局域网ntp服务器
修改/etc/ntp.conf文件 restrict xxx nomodify notrap nopeer noquery #xxx 此处配置本地IP地址restrict 12 ...
- MyBatis 关联查询的实现:一对一
有2个实体:用户.会员卡,一个用户只能办理一张会员卡,即一对一. user_tb : 需要在一方引入另一方的主键作为外键. card_tb: 使用扩展类 (1)在pojo包下新建User类: pack ...
- php添加openssl扩展
很多时候都会用到openssl组件,下面就介绍一下linux下php安装openssl扩展: 安 装openssl组件,一般php安装目录中都有许多扩展组件的安装包,当然也包括openssl,例如我的 ...
- Swift字符串截取与Range使用
1.String.Index String.Index表示一个位置,使用String与String.Index可以获取该位置的Character let str = "123456789&q ...
- sql server ------创建本地数据库 SQL Server 排序规则
sql server完整复制数据库 sql server导入导出方法 SQL Server 排序规则
- 中后缀表达式/洛谷P1175 表达式的转换
P1175 表达式的转换 思路:先用栈转成中缀表达式,再用栈进行计算.要输出过程,因此计算一次输出一次,但是栈没有迭代器,不好用,换成vector(可以pop_back).虽然表达式求值也可以这么做, ...