Dockerfile格式, Dockerfile示例

Dockerfile创建镜像 – Dockerfile格式

  1. FROM //指定基于哪个基础镜像
    格式如下:
    FROM centos
    FROM centos:latest

  2. MAINTAINER //指定作者信息
    格式如下:
    MAINTAINER aming [email protected]

  3. RUN //镜像操作指令
    格式如下:
    RUN yum install httpd
    RUN ["/bin/bash", “-c”, “echo hello”]

  4. CMD // 三种格式:
    CMD [“executable”, “param1”, “param2”]
    CMD command param1 param2
    CMD [“param1”, “param2”]
    RUN和CMD看起来挺像,但是CMD用来指定容器启动时用到的命令,只能有一条。比如
    CMD ["/bin/bash", “/usr/local/nginx/sbin/nginx”, “-c”, “/usr/local/nginx/conf/nginx.conf”]

  5. EXPOSE
    格式为 EXPOSE […] , 比如
    EXPOSE 22 80 8443
    这个用来指定要映射出去的端口,比如容器内部我们启动了sshd和nginx,所以我们需要把22和80端口暴漏出去。这个需
    要配合-P(大写)来工作,也就是说在启动容器时,需要加上-P,让它自动分配。如果想指定具体的端口,也可以使用-p(小写)来指定。

  6. ENV
    格式 ENV , 比如
    ENV PATH /usr/local/mysql/bin:$PATH
    它主要是为后续的RUN指令提供一个环境变量,我们也可以定义一些自定义的变量
    ENV MYSQL_version 5.6

  7. ADD
    将本地的一个文件或目录拷贝到容器的某个目录里。 其中src为Dockerfile所在目录的相对路径,它也可以是一个url。
    比如
    ADD <conf/vhosts> </usr/local/nginx/conf>

  8. COPY
    格式同add
    使用方法和add一样,不同的是,它不支持url

  9. ENTRYPOINT 格式类似CMD
    容器启动时要执行的命令,它和CMD很像,也是只有一条生效,如果写多个只有最后一条有效。和CMD不同是:
    CMD 是可以被 docker run 指令覆盖的,而ENTRYPOINT不能覆盖。

  • 比如,容器名字为aming
    我们在Dockerfile中指定如下CMD:
    CMD ["/bin/echo", “test”]
    启动容器的命令是 docker run aming 这样会输出 test
    假如启动容器的命令是 docker run -it aming /bin/bash 什么都不会输出
  • ENTRYPOINT不会被覆盖,而且会比CMD或者docker run指定的命令要靠前执行
    ENTRYPOINT [“echo”, “test”]
    docker run -it aming 123
    则会输出 test 123 ,这相当于要执行命令 echo test 123
  1. VOLUME
    格式 VOLUME ["/data"]
    创建一个可以从本地主机或其他容器挂载的挂载点。
  2. USER
    格式 USER daemon
    指定运行容器的用户
  3. WORKDIR
    格式 WORKDIR /path/to/workdir
    为后续的RUN、CMD或者ENTRYPOINT指定工作目录

ckerfile创建镜像 – Dockerfile示例

  • 先下载nginx的配置文件
    wget http://www.apelearn.com/study_v2/.nginx_conf
  • vim Dockerfile //内容如下
## Set the base image to CentOS
FROM centos
# File Author / Maintainer
MAINTAINER aming [email protected]
# Install necessary tools
RUN yum install -y pcre-devel wget net-tools gcc zlib zlib-devel make openssl-devel
# Install Nginx
ADD http://nginx.org/download/nginx-1.8.0.tar.gz .
RUN tar zxvf nginx-1.8.0.tar.gz
RUN mkdir -p /usr/local/nginx
RUN cd nginx-1.8.0 && ./configure --prefix=/usr/local/nginx && make && make install
RUN rm -fv /usr/local/nginx/conf/nginx.conf
COPY .nginx_conf /usr/local/nginx/conf/nginx.conf
# Expose ports
EXPOSE 80
# Set the default command to execute when creating a new container
ENTRYPOINT /usr/local/nginx/sbin/nginx && tail -f /etc/passwd
  • 创建镜像:
    docker build -t centos_nginx .
    docker images //可以看到我们新建的镜像
    docker run -itd -p 8088:80 centos_nginx bash

操作记录:

<root@linux1 ~>$ vim Dockerfile  #内容如下,yum安装nginx;
FROM ansible/centos7-ansible
# File Author / Maintainer
MAINTAINER tany [email protected]
# Install necessary tools
ADD http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm .
RUN rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum install -y nginx
# Install Nginx
#COPY http://www.apelearn.com/study_v2/.nginx_conf  /etc/nginx/nginx.conf
# Expose ports
#EXPOSE 80/tcp
EXPOSE 80
# Set the default command to execute when creating a new container
ENTRYPOINT nginx && tail -f /etc/passwd  #保持容器启动的语句;
<root@linux1 ~>$ docker build -t centos_nginx:latest -f ./Dockerfile .
<root@linux1 ~>$ docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
centos_nginx              latest              2dd274516f20        9 seconds ago       610MB
registry                  latest              f32a97de94e1        10 months ago       25.8MB
ansible/centos7-ansible   latest              688353a31fde        3 years ago         447MB
<root@linux1 ~>$ docker run -itd -p 8088:80 centos_nginx bash  #-p参数要在镜像文件之前,不然没有实施;
5b62f0396360629fb7a53501581ac40f50e72c826872aee9ec9a98d7551707a4
<root@linux1 ~>$ docker port 5b62f039
80/tcp -> 0.0.0.0:8088
<root@linux1 ~>$ curl 192.168.87.150:8088 -I
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Thu, 09 Jan 2020 04:36:44 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 13 Aug 2019 15:04:31 GMT
Connection: keep-alive
ETag: "5d52d17f-264"
Accept-Ranges: bytes
发布了125 篇原创文章 · 获赞 5 · 访问量 4601

猜你喜欢

转载自blog.csdn.net/tanyyinyu/article/details/103891362