docker简单介绍----Dockerfile命令
DockerFile的组成部署:
下面优先介绍下Dcokerfile的基础指令
一、CMD指令:容器启动时要莫热门运行的命令,如果有多个CMD指定,最后一个生效
使用方法:
CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;
CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;
举例:CMD ["/usr/sbin/httpd","-c","/etc/httpd/conf/httpd.conf"]
二、ENTRYPOINT 指令:功能类似于CMD,但是优先级较高,如果CMD和ENTRYPOINT指令同时存在,ENTRYPOINT会覆盖CMD指令
使用方法:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2(shell中执行)
举例:(使用列表的方式来指定参数)
ENTRYPOINT ["top", "-b"]
三、WORKDIR指令:从镜像创建一个新容器时,在容器内部设置一个工作目录,ENTRYPOINT和/或CMD指定的程序会在这个目录下执行,
个人理解:例如需要执行自带的tomcat脚本 需要切换到$HOME/bin下执行start.sh脚本来启动,
举例:
WORKDIR /opt/tomcat/bin
RUN ./start.sh
四、ENV指令:用来在镜像构建过程中设置环境变量,这些变量会写入到镜像中永久有效,也可以用docker run -e参数来传递环境变量,这些变量只在容器运行时有效
例如:
ENV JAVA_HOME /usr/local/java/bin yum install nginx
WORKDIR $JAVA_HOME
设置容器临时变量运行:
docker run -it -e "JAVA_HOME=/usr/local/java" tomcat env
HOME=/
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin
WEB_PORT=8080
五、USER指令:指定该镜像会以什么用户运行,默认是root
语法:
USER nginx
USER nginx:nginx
USER uid
USER uid:gid
USER user:gid
USER uid:group
也可以使用docker run -u选项来覆盖指令指定的值
六、VOLUME指定:用来向基于镜像创建的容器添加卷,一个卷是可以存在于一个或者多个容器内的特定目录,绕过联合文件系统,并提供如下共享数据或者
对数据进行持久化的功能
用法:只能使用docker-managed volume而不能使用Bind-mount Volume,意思是无法指定宿主机上的挂载目录
VOLUME ["/data"]
七、ADD指令:用来将构建环境下的文件和目录复制到镜像中,相当于将宿主机的文件复制到镜像新创建的镜像中
例如:
ADD /opt/boss.war /opt/tomcat/webapps/boss.war
源文件也可以是url格式的
ADD http://wordpress.org/latest.zip /root/wordpress.zip
ADD还可以用来解压#将ghd.tar.gz 解压到/var/www 如果目标目录存在和压缩包命名相同的文件,则不会覆盖
ADD ghd.tar.gz /var/www
八、COPY指令:和ADD指令很相似,但是没有解压功能
语法:源文件或者目录必须宇dockerfile文件在同一目录 复制目录时。des目标目录必须以"/"结尾
COPY 源文件/目录 目标文件/目录
例子:
COPY文件:COPY index.html /opt/
COPY目录: COPY opt /data/opt/ #将宿主机的opt目录拷贝到容器的/data下,必须写目录名称并且以“/ ”结尾
九、ONBUILD指令:能为镜像添加触发器,当一个镜像被用做其他镜像的基础镜像时(比如你的镜像需要从某未准好的位置
添加源代码,或者你需要执行特定于构建镜像环境的构建脚本),该镜像中的触发器将会被执行
举例:
使用一个ubuntu基础镜像来构建一个新镜像,并使用ONBUILD来创建一个mydir的目录
- FROM ubuntu
- MAINTAINER hello
- ONBUILD RUN mkdir mydir
构建镜像:
docker build -t imagea .
利用imagea镜像创建容器: docker run --name test1 -it imagea /bin/bash
这时会发现根目录下没有mydir目录
我们在写一个新的Dockerfile文件,以imagea作为基础镜像
十、EXPOSE:指定容器启动端口号
语法:默认是tcp协议并且可以指定多个EXPOSE
- EXPOSE 80/tcp
- EXPOSE 2222/udp
FROM imagea
RUN ls
- [root@guohaidong dockerfile]# docker build -t imageb .
- Sending build context to Docker daemon 2.048 kB
- Step / : FROM imagea
- # Executing build trigger...
- Step / : RUN mkdir mydir
- ---> Running in 13c2e09dafb9
- ---> 085a6989e15d
- Removing intermediate container 13c2e09dafb9
- Step / : RUN ls
- ---> Running in 0cf60df45aa6
- anaconda-post.log
- bin
- dev
- etc
- home
- lib
- lib64
- media
- mnt
- mydir
- opt
- proc
- root
- run
- sbin
- srv
- sys
- tmp
- usr
- var
- ---> 753e79c490a3
- Removing intermediate container 0cf60df45aa6
- Successfully built 753e79c490a3
- 利用上面的dockerfile文件构建镜像: docker build -t imageb .
利用imagea镜像创建容器: docker run --name test2 -it imageb /bin/bash
我们没有看到根目录下已经有mydir目录了,从构建过程中也可以看出来- ============================================================
案例:编译安装redis
首先下载centos镜像
docker search centos
docker pull centos
然后使用docker run进入到容器,将c++和make安装上
yum update
yum -y install gcc gcc-c++ make vim curl
使用docker commit生成新的基础镜像
docker commit 容器id 镜像名称:tag
在基础镜像上编写Dockerfile来build镜像
- FROM centos:base-v2
- MAINTAINER "Guohaidong <18310208368@163.com>"
- WORKDIR /etc/redis-3.2./
- ADD redis-3.2..tar.gz /etc/
- RUN cd /etc/redis-3.2./src
- RUN sh -c make
- COPY redis.conf /etc/redis-3.2./redis.conf
- EXPOSE
- CMD ["/etc/redis-3.2.8/src/redis-server","redis.conf"]
- 使用docker build生成新镜像
docker build -t redis:v2 . #注意点- 运行镜像
- docker run -d --name redis-node-79 -h redis-server -p 10.10.32.150:8379:6379 -v /etc/redis-3.2.8/ a455
- 测试正常并且已经将容器中的目录挂载到了宿主机目录
docker简单介绍----Dockerfile命令的更多相关文章
- [转帖]Docker学习之Dockerfile命令详解
Docker学习之Dockerfile命令详解 https://it.baiked.com/system/docker/2436.html 图挺好的 前言 之前,制作镜像的伪姿势搭建已经见过了,今天介 ...
- Docker简单介绍
Docker简单介绍 Docker是一个能够把开发的应用程序非常方便地部署到容器的开源引擎.由Docker公司团队编写,基于Apache 2.0开源授权协议发行.Docker的主要目的例如以下: 提供 ...
- [转]Docker(三):Dockerfile 命令详解
本文转自:https://blog.csdn.net/ityouknow/article/details/79600406 上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dock ...
- Docker(三):Dockerfile 命令详解
上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dockerfile 的使用,这篇文章我们来继续了解 Dockerfile ,学习 Dockerfile 各种命令的使用. Dock ...
- Docker(4):Dockerfile命令一览
1.FROM 指定基础镜像 FROM 指令用于指定其后构建新镜像所使用的基础镜像.FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docker 将会基于该镜像构建新镜像,F ...
- Docker(六):Dockerfile命令详解
Dockerfile 指令详解 1 FROM 指定基础镜像 FROM 指令用于指定其后构建新镜像所使用的基础镜像.FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docke ...
- docker 简单介绍及基础命令运用
一.什么是docker? Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. 简单的来讲Docker实际上就是一个大型容器.容器是完全使用沙箱机制,相互之间不 ...
- docker简单介绍----镜像和容器管理
docker可以分为三部分:docker镜像 docker仓库 docker容器 docker镜像:一个image可以包含一个镜像,也可以理解为一个系统模板,里面安装了相关应用,也可以是纯净版的 ...
- Docker中的Dockerfile命令详解FROM RUN COPY ADD ENTRYPOINT...
Dockerfile指令 这些建议旨在帮助您创建高效且可维护的Dockerfile. FROM FROM指令的Dockerfile引用 尽可能使用当前的官方图像作为图像的基础.我们推荐Alpine图像 ...
随机推荐
- angular-nvd3初体验
<!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <met ...
- python 迭代器、生成器、枚举的使用
迭代器 器:包含了多个值的容器 迭代:循环反馈(一次从容器中取出一个值) 迭代器:从装有多个值的容器中一次取出一个值给外界 遍历:被遍历的对象必须是有序容器 ls = [1, 2, 3, 4, 5] ...
- 《JAVA与模式》之工厂方法模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述工厂方法模式的: 工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymor ...
- 使用 mysqltuner 检测 mysql 稳定性
github : https://github.com/major/MySQLTuner-perl MySQLTuner是一个用Perl编写的脚本,它可以帮助您进行MySQL配置,并提出增强性能和稳定 ...
- http验证
read -p "输入要添加的用户名: " USERNAME read -p "输入密码: " PASSWD printf "$USERNAME:$( ...
- mysql的服务器构成
什么是实例 这里的实例不是类产生的实例对象,而是Linux系统下的一种机制 1.MySQL的后台进程+线程+预分配的内存结构. 2.MySQL在启动的过程中会启动后台守护进程,并生成工作线程,预分配内 ...
- GWAS基因芯片数据预处理:质量控制(quality control)
一.数据为什么要做质量控制 比起表观学研究,GWAS研究很少有引起偏差的来源,一般来说,一个人的基因型终其一生几乎不会改变的,因此很少存在同时影响表型又影响基因型的变异.但即便这样,我们在做GWAS时 ...
- yarn安装使用
npm install yarn -g // 到指定文件夹 yarn init // 生成package.json文件 yarn init报错 Can't answer a question unle ...
- Oracle DB Day02(SQL)
--数据库下表一般都是从1开始,例如字符串等 SELECT *FROM employees --字符串连接CONCAT() ,CONCAT(CONCAT(EMPLOYEE_ID,','),SALARY ...
- -source 1.5 中不支持泛型(请使用-source5或更高版本)
Idea中maven--compile时报错 -source 1.5 中不支持泛型(请使用-source5或更高版本) 解决办法 在项目的pom.xml中,添加 <build> & ...