`dockerfile`是一个包含用于组合镜像的命令的文本文档,可以在命令中调用任何命令, docker通过读取Dockerfile中的指令自动天生镜像
2.dockerfile的基本构造
`dockerfile`一样平常分为四部分: 基本镜像信息, 掩护者信息, 镜像操作指令, 容器启动时的实行指令, `#`为`dockerfile`中的注释3
3.dockerfile的常用指令
常用指令一样平常都要大写
(图片来自网络侵删)FROM:指定根本镜像,必须是第一个命令
#格式:
FROM image
FROM image:tag
FROM image@digest
#如
FROM mysql:5.7 #如不指定tag或digest,则利用lastest版本
MAINTAINER:掩护者信息
#格式
MAINTAINER name+email
MAINTAINER name
MAINTAINER email
#如
MAINTAINER jame 123@gmail.com
RUN:构建镜像时实行的命令
#格式
RUN command
#如
RUN ["executable","param1","param2"]
#RUN指令创建的中间镜像会被缓存,并会下次构建中利用,如果不想利用,可以利用 --no-cache参数,如:
docker build --no-cache
ADD:将本地文件添加到容器中
#格式
ADD src dest
ADD ["src",...,"desc"] #用于支持包含空格的路径
#如
ADD test /mydir
ADD test?.txt /mydir
ADD t /mydir
COPY功能和ADD类似,差异如下
#差异
ADD 对付添加tar类型文件,可以自动解压
ADD 可以访问网络资源
COPY 不可自动解压也不可访问网络资源
CMD:构建容器这后利用
#格式
CMD ["executable","param1","param2"]
CMD command parma1 param2
#如
CMD echo "hello"
#CMD不同于RUN,CMD用于指定在容器启动时所要实行的命令,RUN是用于指定镜像构建时所有利用的实行的命令
ENTRYPOINT:配置容器,与CMD类似
#格式
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param2,param3
#如
ENTRYPOINT ["top","-b"]
#与CMD不同点
#docker run 实行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当作参数再次通报给ENTRYPOINT,Dockerfile中只许可有一个ENTRYPOINT命令,多指定会覆盖前面的设置,而只实行末了的ENTRYPOINT指令
LABEL:用于为镜像添加元数据
#格式
LABEL key=value key=value ...
#如
LABEL version=1.0 description="hello world"
#利用LABEL指定元数据时,一条LABEL可以指定一或多条元数据,多条元数据通过空格分格
ENV:设置环境变量
#格式
ENV key value #这种格式的只能设置一个变量
ENV key=value #可以设置成多个
#如
ENV name centos
ENV name=123
EXPOSE:指定与外界交互的端口
#格式
EXPOSE port ...
#如
EXPOSE 80,443
EXPOSE 11211/tcp 11211/udp
#EXPOSE并不会让容器的端口访问到主机,须要在docker run运行时通过 -p 来发布这些端口,或者通过-P参数来发布EXPOSE导出的所有端口
VOLUME:用于指定持久化目录
#格式
VOLUME ["/path/to/dir"]
#如
VOLUME ["/data"]
VOLUME ["/var/www","/var/log/test"]
#一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统
#卷可以容器间共享和重用
#容器并不一定要和其它容器共享卷
#修正卷后会立即生效
#对卷的修正不会对镜像产生影响
#卷会一贯在,直到没有容器利用它
WORKDIR:事情目录,类似于CD命令
#格式
WORKDIR /path
#如
WORKDIR /a #这时事情目录为/a
#设置WORKDIR事情目录里,Dockerfile中其后的命令,RUN,CMD,ENTRYPOINT,ADD,COPY等命令都会在这个目录实行
USER:指定运行容器时的用户名或UID,后面的RUN也会利用指定用户,当做事不须要管理员权限时,可以通过该命令指定运行用户
#格式
USER user
USER user:group
USER uid
USER gid
USER uid:gid
USER uid:group
#如
USER www
#利用USER指定用户后,Dockerfile中其后的命令RUN,CMD,ENTRYPOINTf都将利用这个用户
ARG:用于指定通报给构建运行时的变量
#格式
ARG name
ARG name=valuue
#如
ARG site
ARG name=123
ONBUILD:用于设置镜像触发器
#格式
ONBUILD [INSTRUCTION]
#如
ONBUILD ADD ./app
#当所构建的镜像被用作其它镜像的根本镜像,该镜像中的触发器会被触发
实战:定制自己的 centos由于官方centos里没有vim ,ficonfig等工具,先来个大略点的学习一下,从打包到发布的流程,后面再构建nginx,php,mysql,redis各自的dockerfile文件,搭建自己的开拓环境 !
编写dockerfile文件
#dockerfile文件如下
FROM centos #根本镜像
#MAINTANER 123 123@gmail.com 现在官方推举利用 LABEL标签利用
LABEL maintaner=123@gmail.com
#设置环境变量
ENV PATH=/usr/local
#设置事情目录
WORKDIR $PATH
#创建容器时实行的命令
RUN yum install -y vim && yum -y net-tools
#暴露端口
EXPOSE 80
# 镜像构建完成后实行的命令
CMD echo "===success======="
#以/bin/bash运行
CMD /bin/bash
通过dockerfile构建镜像
#利用命令 docker build 命令
#常用参数如下:
-f #指定dockerfile文件
-t #指定镜像标签
#打包命令如下,把稳末了那个点别丢了,代表当前目录
docker bulid -f mydockerfile -t mycentos:1.0 .
查看镜像构建的过程,可以利用docker history 镜像id来查看
#查看一下nginx的构建过程
docker history nginx
发布自己的镜像发布地址: Dockerhub,阿里云
发布到Dokerhub上注册账号并登录在做事器上向Dockerhub提交
#利用 docker login 命令登录
#利用 docker push 发布镜像
利用 docker login -u 用户名 -p 密码
登录成功如下:
利用 docker push 命令发布镜像到dockerhub,结果报错
denied: requested access to the resource is denied
#办理办法:
在build自己的镜像的时候添加tag时必须在前面加上自己的dockerhub的username,然后再push就可以了
#我这里利用 docker tag 命令修正标签
#命令如下:
docker tag mycentos:1.0 lnssm/mycentos:1.0
#再push就可以了
docker push lnssm/mycentos:1.0
发布到阿里云,海内速率快登录阿里云掌握台搜索容器镜像做事->实例列表->个人实例->命令空间新建创建完命名空间后,打开镜像仓库,创建镜像仓库,选择本地仓库
根据官方给的文档开始提交就可以,这里就不截图了
ps:后面还要对docker中的网络部分记录分享一下!!!!!