<返回更多

DockeFIile知识点总结和发布自己的镜像

2021-07-05  今日头条  石老师小跟班
加入收藏

Dockerfile的基本认识

1. dockerfile的基本定义

`dockerfile`是一个包含用于组合镜像的命令的文本文档,可以在命令中调用任何命令,
  docker通过读取Dockerfile中的指令自动生成镜像

2.dockerfile的基本结构

`dockerfile`一般分为四部分:
  基本镜像信息,
  维护者信息,
  镜像操作指令,
  容器启动时的执行指令,
  `#`为`dockerfile`中的注释3

3.dockerfile的常用指令

常用指令一般都要大写

DockeFIile知识点总结和发布自己的镜像

 

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 .

DockeFIile知识点总结和发布自己的镜像

 

查看镜像构建的过程,可以使用docker history 镜像id来查看

#查看一下nginx的构建过程

docker history nginx

DockeFIile知识点总结和发布自己的镜像

 

发布自己的镜像

发布地址: Dockerhub,阿里云

 

发布到Dokerhub上

  1. 注册账号并登录
  2. 在服务器上向Dockerhub提交

#使用 docker login 命令登录

#使用 docker push 发布镜像

使用 docker login -u 用户名 -p 密码

登录成功如下:

DockeFIile知识点总结和发布自己的镜像

 

使用 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

发布到阿里云,国内速度快

  1. 登录阿里云控制台
  2. 搜索容器镜像服务->实例列表->个人实例->命令空间新建
DockeFIile知识点总结和发布自己的镜像

 

创建完命名空间后,打开镜像仓库,创建镜像仓库,选择本地仓库

DockeFIile知识点总结和发布自己的镜像

 

根据官方给的文档开始提交就可以,这里就不截图了

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>