Dockerfile格式,Dockerfile示例(安装nginx)

Dockerfile格式

dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。

类似于Makfile,用户使用docker build就可以编译镜像,使用该命令可以设置编译镜像时使用的CPU数量、内存大小、文件路径等。

dockerfile由多条指令组成,每条指令在编译镜像时执行相应的程序完成某些功能,由指令+参数组成,以逗号分隔,#作为注释起始符,虽说指令不区分大小写,但是一般指令使用大些,参数使用小写。

FROM:指定基于哪个基础镜像
格式:FROM 或者 FROM :
如 FROM centos ; FROM centos:latest

MAINTAINER:指定作者信息

格式:MAINTAINER
如 MAINTAINER lzx [email protected]

RUN:镜像操作指令
格式:RUN 或者 RUN [“executable”,‘param1",“param2”]
如 RUN yum install httpd 或者 RUN ["/bin/bash","-c",“echo hello”]

CMD:指定容器启动时执行的命令,只能有一条
格式:CMD [“executable”,“param1”,“param2] 或
CMD command param1 param2 或
CMD [“param1”,“param2”]
如 CMD [”/bin/bash","/usr/local/nginx/sbin/nginx","-c","/usr/local/nginx/conf/nginx.conf"]

EXPOSE:指定要映射出去的端口
格式:EXPOSE …
(-P(大写)指定容器端口,宿主机端口随机分配;-p(小写)指定宿主机端口和容器端口)
如 EXPOSE 22 80 443 或 EXPOSE -P 80 或 EXPOSE -p 8088:80

ENV:为后续的RUN指令提供一个环境变量
格式:ENV
如 ENV PATH /usr/local/mysql/bin:$PATH

ADD:将本地的一个文件或目录拷贝到容器的某个目录里
格式: ADD
(src为dockfile所在目录的相对路径,也可以是一个url)
如 ADD <conf/vhosts> </usr/local/nginx/conf>

COPY:将本地的一个文件或目录拷贝到容器的某个目录里
格式:COPY
(用法与ADD基本相同,但不支持url)
如 COPY <conf/vhosts> </usr/local/nginx/conf>

ENTRYPOINT:指定容器启动时执行的命令,只能有一条,写多条也只有最后一条生效
格式:ENTRYPOINT [“executable”,“param1”,“param2] 或
ENTRYPOINT command param1 param2 或
ENTRYPOINT [“param1”,“param2”]
(用法与CMD基本相同,但CMD可以被docker run指令覆盖,而ENTRYPOINT不能覆盖,且会比CMD或docker run指定的命令更早执行)
如 ENTRYPOINT [”/bin/bash","/usr/local/nginx/sbin/nginx","-c","/usr/local/nginx/conf/nginx.conf"]

VOLUME:创建一个可以从本机或者其他容器挂载的挂载点
格式:VOLUME ["/data"]

USER:指定运行容器的用户
格式:USER daemon

WORKDIR:为后续的RUN、CMD或者ENTERPOINT指定工作目录
格式:WORKDIR /path/to/workdir

Dockerfile 示例

上面介绍了dockerfile的语法格式,现在我们进行安装nginx实例操作。

编辑dockerfile:

vim Dockerfile

## Set the base image to CentOS

FROM centos

# File Auther / Maintainer

Maintainer jin [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.19.5.tar.gz .

RUN tar zxvf nginx-1.19.5.tar.gz

RUN mkdir -p /usr/local/nginx

RUN cd nginx-1.19.5 && ./configure --prefix=/usr/local/nginx && make && make install

RUN rm -fv /usr/local/nginx/conf/nginx.conf

ADD http://www.apelearn.com/study_v2/.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

加上tail -f 防止容器启动完nginx就自动停止

创建镜像:

docker build -t centos_nginx .

(.):表示在当前路径下查找dockerfile,如果在其他路径,可以写路径;

(-t)指定新的镜像名称

…………………………………………….省略一万字

Successfully built 91a1362358a1

Successfully tagged centos_nginx:latest

出现这个就说明运行成功

[root@jinkai02 src]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

centos_nginx latest 91a1362358a1 2 minutes ago 384MB

运行镜像:

[root@jinkai02 src]# docker run -itd -p 81:80 centos_nginx bash

92a9cd33fdd7350af4a3287edde8bd468108ad01f83c5e88014307bdebcae963

[root@jinkai02 src]# docker exec -it 92a9cd bash

[root@92a9cd33fdd7 /]# ps aux | grep nginx

root 8 0.0 0.0 18532 624 ? Ss 15:52 0:00 nginx: master process /usr/localnginx/sbin/nginx

nobody 9 0.0 0.3 41796 3708 ? S 15:52 0:00 nginx: worker process

nobody 10 0.0 0.3 41796 3708 ? S 15:52 0:00 nginx: worker process

root 26 0.0 0.0 9172 720 pts/1 S+ 15:53 0:00 grep --color=auto nginx

[root@92a9cd33fdd7 /]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

​ inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255

​ ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)

​ RX packets 8 bytes 656 (656.0 B)

​ RX errors 0 dropped 0 overruns 0 frame 0

​ TX packets 0 bytes 0 (0.0 B)

​ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536

​ inet 127.0.0.1 netmask 255.0.0.0

​ loop txqueuelen 1000 (Local Loopback)

​ RX packets 0 bytes 0 (0.0 B)

​ RX errors 0 dropped 0 overruns 0 frame 0

​ TX packets 0 bytes 0 (0.0 B)

​ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@92a9cd33fdd7 /]# exit

Exit

[root@92a9cd33fdd7 /]# exit

Exit

访问宿主机的81端口

[root@jinkai02 src]# curl 127.0.0.1:81

<!DOCTYPE html>

<html>

<head>

<title>Welcome to nginx!</title>

<style>

body {

​ width: 35em;

​ margin: 0 auto;

​ font-family: Tahoma, Verdana, Arial, sans-serif;

}

</style>

</head>

<body>

<h1>Welcome to nginx!</h1>

<p>If you see this page, the nginx web server is successfully installed and

working. Further configuration is required.</p>

<p>For online documentation and support please refer to

<a href="http://nginx.org/">nginx.org</a>.<br/>;

Commercial support is available at

<a href="http://nginx.com/">nginx.com</a>.</p>;

<p><em>Thank you for using nginx.</em></p>

</body>

</html>

成功访问,说明上面使用Dockerfile创建镜像成功

猜你喜欢

转载自blog.51cto.com/11451960/2640819