Dockerfile入门教程

1.Dockerfile介绍

我们知道,docker容器启动的时候在最上层挂载了一个可写层,比如说我在容器里面创建一个文件,这个文件是存放在可写层的,这时候容器要是销毁了,那么我们对容器的一些写入操作也就没了,我这个文件也会随着容器销毁而销毁了,我们要是想要保存我们对容器的一些写入操作的话,可以使用commit命令然后将容器制作成一个镜像,这样下次run起来该镜像的时候,我们之前的写入操作就还存在了。除了使用commit方式制作镜像,还有一种方式就是编写Dockerfile 然后使用build命令来制作镜像了。
在这里插入图片描述
Dockerfile是我们构建docker镜像的源码,可以理解成我们的脚本,然后docker可以使用Dockerfile里面的指令来自动化构建镜像,其实Dockerfile就像是一个组织镜像的清单,来告诉docker 引擎我这一步干啥,然后下一步干啥。
在这里插入图片描述

2.Dockerfile的规则

2.1 格式

#是注释
指令建议要大写,内容小写。这样更能区分

2.2 执行顺序

docker是按照Dockerfile指令顺序依次执行的,也就是说从上到下。

2.3 其他

每一个Dockerfile的第一行都是非注释性的,也就是说第一行不能是注释,必须是FROM指令,来指定基础镜像,后面的指令都以基础镜像为运行环境。如果构建过程中本地没有指定镜像文件,就会去远端仓库拉。

3. 指令

3.1 FROM

这个FROM指令是dockerfile的第一个指令,然后指定了基础镜像,后面的所有指令都是运行在该基础镜像环境上的。

FROM image
FROM image:tag
FROM image@digest

3.2 MAINTAINER

该指令是描述的维护者信息

MAINTAINER username

3.3 USER

USER 指令指明docker里面主进程,也就是pid是1的那个进程是用什么用户跑的,可以在容器终端中whoami来测试

USER linux用户

3.4 WORKDIR

WORKDIR 是指下面的指令都在WORKDIR 指定目录下面工作,这个与linux 里面的cd 差不多

WORKDIR 目录

演示:
1.Dockerfile:

FROM nginx
WORKDIR /usr/share/nginx

2.build:

docker build . -t docker.io/library/nginx:v1.19.0_workdir

这里. 指的是构建当前目录下的Dockerfile ,然后-t 就是打tag
在这里插入图片描述
3.运行容器:

docker run -it --rm 27bd30f69d34 /bin/bash

在这里插入图片描述
就可以进入容器看到默认是在worddir目录下面了。

3.5 ADD

ADD指令是用来将宿主机某个文件或目录放到(复制)容器某个目录下面。

ADD 宿主句文件 容器文件

演示:
1.准备:
下载index.html

 wget www.baidu.com -O index.html

2.Dockerfile:

FROM nginx
ADD index.html /usr/share/nginx/html/index.html
EXPOSE 80

3.build:

docker build . -t docker.io/library/nginx:v1.19.0_add

在这里插入图片描述
在这里插入图片描述
4.启动容器验证:

 docker run --rm -d --name nginx_add -p80:80  fe12a2f7ccef 

这里使用了-p 指定宿主机端口映射容器端口,可以使用-P 来随机宿主机端口
在这里插入图片描述
浏览器验证:
在这里插入图片描述

3.6 COPY

COPY 指令类似ADD 指令,但是ADD指令范围更广些,ADD能够自动解压文件,能够访问网络资源,而COPY指令做不到。

3.7 EXPOSE

EXPOSE 指令用于暴露容器里的端口,我们在3.5里面演示过了,nginx暴露的端口是80,但是启动容器的时候需要指定宿主机端口来映射你暴露的端口。需要暴露多个端口的话可以使用多个EXPOSE,也可以一个EXPOSE指令后面跟多个端口,端口之间用空格隔开。

EXPOSE 端口

3.8 ENV

ENV指令是用于设置环境变量的

ENV key=value
ENV key value

演示:
1.Dockerfile:

FROM nginx
ENV T_OPT=nginx_c

2.build:

docker build . -t docker.io/library/nginx:v1.19.0_env

在这里插入图片描述
在这里插入图片描述
3.启动容器:

 docker run --rm --name nginx_env 731c7b670c20 printenv

在这里插入图片描述
我们可以看到,我们设置环境的变量就打印出来了。

3.9 RUN

RUN指令用于在容器中执行命令。我们常用来安装基础软件。

RUN 需要执行命令

演示:
1.Dockerfile:

FROM centos:centos7
RUN yum install net-tools.x86_64 -y

2.build

 docker build . -t docker.io/library/centos:7_net-tool

在这里插入图片描述
在这里插入图片描述
3.启动容器

docker run -it 998e648663b1 /bin/bash

在这里插入图片描述
默认centos7镜像里面是没有net-tools这个工具的,我们使用RUN yum install 指令给安装上了。

3.10 CMD

CMD 指令是你在容器启动的时候帮你运行的命令,而RUN 这个指令是构建镜像的时候帮你运行的命令。

CMD ["命令","参数"]

演示:
1.Dockerfile:

FROM centos:centos7
RUN yum install httpd  -y
CMD ["httpd","-D","FOREGROUND"]

2.build

docker build . -t docker.io/library/centos:7_httpd

在这里插入图片描述
在这里插入图片描述
3.启动容器验证:

 docker run --rm -d --name httpd -p80:80  3da609352ae5

在这里插入图片描述
浏览器验证:
在这里插入图片描述

3.11 ENTRYPOINT

我们每一个docker镜像其实都有一个默认的启动命令,我启动这个容器如果不指定命令,它会默认执行根路径下面的entrypoint.sh这个脚本

ENTRYPOINT 脚本

nginx镜像演示
1.Dockerfile

FROM centos:centos7
ADD entrypoint.sh /entrypoint.sh
RUN yum install epel-release -q -y && yum install nginx -y
ENTRYPOINT /entrypoint.sh

2.编辑entrypoint.sh

#!/bin/bash
/sbin/nginx -g "daemon off;"

3.给entrypoint 脚本执行权限

 chmod +x entrypoint.sh 

4.build

 docker build . -t docker.io/library/centos:nginx_

在这里插入图片描述
在这里插入图片描述
5.运行容器

 docker run -d --rm --name c_nginx -p80:80 d10dacbcb9f9

在这里插入图片描述
浏览器访问:
在这里插入图片描述

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页