linux怎么查看本机内存大小
227
2022-10-19
Docker-使用Dockerfile创建镜像
Dockerfile是一个文本格式的配置文件,用户可以使用Docker来快速创建自定义的镜像
基本结构
Dockerfile由一行行命令语句组成,并且支持以#开头的注释行
一般而言,Dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令和启动时执行指令
FROM ubuntuMAINTAINER docker_user docker_user@email.comRUN echo “deb raring main universe” >> /etc/apt/sources.listRUN apt-get update && apt-get install –y nginxRUN echo “\ndaemon off;” >> /ect/nginx/nginx.confCMD /usr/sbin/nginx
其中,一开始必须指明所基于的镜像名称,接下来一般是说明维护者信息。后面则是镜像操作指令,例如RUN指令,RUN指令将对镜像执行跟随的命令。每运行一条RUN指令,镜像就添加新的一层,并提交。最后是CMD指令,用来指定运行容器时的操作指令
指令说明
指令的一般格式为 INSTRUCTION arguments,指令包括FROM、MAINTAINER、RUN等,如下
1. FROM指定所创建镜像的基础镜像,如果本地不存在,则默认会去Docker Hub下载指定镜像。格式为FROM
RUN apt-get updata \&& apt-get install –y libsnappy-dev zliblg-dev libbz2-dev \&& rm –rf /var/cache/apt
4. CMDCMD指令用来启动容器时默认执行的命令。它支持三种格式:(1)CMD [“executable”,”param1”,”param2”]使用exec执行,是推荐使用的方式(2)CMD command param1 param2 在/bin/sh中执行,提供给需要交互的应用(3)CMD [“param1”,”param2”]提供给ENTRYPOINT的默认参数每个Dockerfile只能有一条CMD命令。如果指定了多条命令,之后最后一条命令会被执行如果用户启动容器时手动指定了运行的命令(作为run的参数),则会覆盖掉CMD指定的命令5. LABELLABEL指令用来指定生成镜像的元数据标签信息格式为 LABEL
LABEL version=“1.0”LABEL description=”This text illustrates \ that label-values can span multiple lines.”
EXPOSE 22 80 8443
ENV PG_MAJOR 9.3ENV PG_VERSION 9.3.4RUN curl –SL | tar –xJC /usr/src/postgress && ...ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
指令指定的环境变量在运行时可以被覆盖掉,如docker run –env
WORKDIR /aWORKDIR bWORKDIR cRUN pwd
则最终路径为/a/b/c14. ARG指定一些镜像内使用的参数(例如版本号信息等),这些参数在执行docker build命令时才以--build-arg
[...]ONBUILD ADD . /app/srcONBUILD RUN /usr/local/bin/python-build --dir /app/src[...]
如果基于image-A创建新的镜像时,新的Dockerfile中使用FROM image-A指定基础镜像,会自动执行ONBUILD指令的内容,等价于在后面添加了两条指令
FROM image-AADD . /app/srcRUN /usr/local/bin/python-build --dir /app/src
使用ONBUILD指令的镜像,推荐在标签中注明,例如ruby:1.9-onbuild16. STOPSIGNAL指定所创建镜像启动的容器接收退出的信号值,例如STOPSIGNAL signal17. HEALTHCHECK配置所启动容器如何进行健康检查(如何判断靖康与否),自docker1.12开始支持格式有两种HEALTHCHECK [OPTIONS] CMD command:根据所执行命令返回值是否为0来判断HEALTHCHECK NONE:禁止基础镜像中的健康检查OPTION支持--interval=DURATION(默认为30s):过多久检查一次--timeout=DURATION(默认为30s):每次检查结果的等待超时--retries=N(默认为3):如果失败了,重试几次才最终确定失败18. SHELL 指定其他命令使用shell时的默认shell类型 SHELL [“executable”,”parameters”] 默认值为[“/bin/sh”,”-c”].注意:对于Windows系统,建议在Dockerfile开头添加#escape=`来指定转义信息
创建镜像
编写完成Dockerfile之后,可以通过docker build命令来创建镜像基本的格式为docker build[选项]内容路径,该命令将读取指定路径下(包括子目录)的Dockerfile,并将该路径下的所有内容发送给Docker服务端,由服务端来创建镜像。因此除非生成镜像需要,否则一般建议放置Dockerfile的目录为空目录。有两点经验如果使用非内容路径下的dockerfile,可以通过-f选项来指定其路径要指定生成镜像的标签信息,可以使用-t选项例如,指定Dockerfile所在路径为/tmp/docker_builder/,并且希望生成镜像标签为build_repo/first_image,可以使用以下命令docker build -t build_repo/first_image /tmp/docker_builder/
示例
基于centos安装nginx
FengZhendeMacBook-Pro:docker_demo FengZhen$ lltotal 1984-rw-r--r-- 1 FengZhen staff 919 6 18 18:26 Dockerfile-rw-r--r--@ 1 FengZhen staff 981687 6 18 18:29 nginx-1.12.2.tar.gz
Dockerfile内容如下
# base imageFROM centos#MAINTAINERMAINTAINER FengZhen@163.comADD nginx-1.12.2.tar.gz /usr/local/srcRUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-develRUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre-develRUN useradd -M -s /sbin/nologin nginxWORKDIR /usr/local/src/nginx-1.12.2RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with---with---with---with---with---with---with---with---with---with---with---with---with---with---with---with---with-&& make && make installEXPOSE 80
指定docker build开始构建
FengZhendeMacBook-Pro:docker FengZhen$ docker build -t centos_nginx:v1 docker_demo/
查看本地镜像
FengZhendeMacBook-Pro:docker FengZhen$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEcentos_nginx v1 9f9e5add9182 About a minute ago 519MB
发现该镜像已存在使用该镜像启动一个container并开启nginx服务
FengZhendeMacBook-Pro:docker FengZhen$ docker run -d centos_nginx:v1 /usr/local/nginx/sbin/nginx -g "daemon off;"0896b5bc727871bbdd4287a9af149c1bcdc3efbc0e63a6079bd8c919c6e72ea2
docker ps看下该容器是否在运行
FengZhendeMacBook-Pro:docker FengZhen$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES0896b5bc7278 centos_nginx:v1 "/usr/local/nginx/sb…" 8 seconds ago Up 12 seconds 80/tcp festive_visvesvaraya
虽然nginx服务开启了,但是port并没有映射到本机host,所以这个container并不能进行访问,重新启动一个并指定映射端口
FengZhendeMacBook-Pro:docker FengZhen$ docker run -d -P centos_nginx:v1 /usr/local/nginx/sbin/nginx -g "daemon off;"a8a29716b2590934bae0100a5ae6b9694ae7d508a846f05d209b2b87169b6533FengZhendeMacBook-Pro:docker FengZhen$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESa8a29716b259 centos_nginx:v1 "/usr/local/nginx/sb…" 6 seconds ago Up 10 seconds 0.0.0.0:32784->80/tcp compassionate_darwin
可以看到容器的80端口映射到宿主机的32784端口,此时通过32784端口访问
成功。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~