Dockerfile介绍
dockerfile 是用来构建docker镜像的文件!命令行参数脚本
构建步骤
- 编写一个dockerfile文件
- dockerbuild 构建成为一个镜像
- docker run 运行镜像文件
- docker push发布镜像(DockerHub,阿里云镜像仓库)
Dockerfile构建过程
基础知识:
- 每个保留关键字都必须是大写字母
- 执行从上倒下的顺序
- #表示注释
- 每个指令都会创建提交一个新的镜像,并提交
dockerfile是面向开发的,我们以后要发布项目,做镜像,就要编写dockerfile文件,这个文件十分简单
Docker镜像逐渐成为了企业交付的标准
Dockerfile:构建文件,定义了一切步骤,源代码
DockerImages:通过Dockerfile构建生成的镜像,最终发布和运行的产品
Docker容器:容器就是镜像运行起来的提供服务器
Dockerfile命令
FROM #基础镜像,一切从这里开始构建
MAINTAINER #镜像作者,姓名+邮箱
RUN #镜像构建运行的命令
ADD #步骤:添加内容例:tomact镜像,这个就是tomact压缩包
WORKDIR #镜像的工作目录 例:/bin/bash
VOLUME #挂载目录
EXPOSE #指定暴露端口
CMD #指定容器启动时要运行的命令,只有最后一个会生效,且会被替代
ENTERPOINT #指定这个容器启动是运行的命令,可以追加命令
ONBUILD #当构建一个被继承Dockerfile这个时候就会运行ONBUILD命令,触发指令
COPY #类似ADD,将我们的文件拷贝到镜像中
EVN #构建时候设置环境变量
实战测试
创建一个自己的centos
1.构建自己的dockerfile文件
vim mydockerfile-contos #创建dcoekrfile文件
FROM centoss
MAINTAINER Florenza<[email protected]>ENV MYPATH /user/local
WORKDIR $MYPATH
RUN yum -y install vim
RUM yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash2.通过这个文件构建镜像
#命令 docker build -f dockerfile 文件路径 -t 镜像名:[tag]
[root@iZ2z2222e3mgup8rrtkhrsdxxsZ dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos 0.1 5e60270dde9d 2 minutes ago 337MB
test/centos latest 0edd7173368c 37 hours ago 231MB
tomcatweb latest 1f7cffccf751 2 days ago 684MB
tomcat 9.0 43e421a14aec 12 days ago 680MB
tomcat latest b0e0b0a92cf9 12 days ago 680MB
mysql 5.7 938b57d64674 2 weeks ago 448MB
mysql latest ecac195d15af 2 weeks ago 516MB
nginx latest 87a94228f133 3 weeks ago 133MB
hello-world latest feb5d9fea6a5 5 weeks ago 13.3kB
centos latest 5d0da3dc9764 6 weeks ago 231MB
3.测试运行
docker run mycentos:0.1
启动成功~~
4.查看镜像是如何生成
docker history 镜像id
例:
docker history ecac195d15af
CMD/ENTRYPOINT区别
CMD #指定容器启动时要运行的命令,只有最后一个会生效,且会被替代
ENTERPOINT #指定这个容器启动是运行的命令,可以追加命令
测试CMD
#编写dockerfile文件
vim dockerfile-cmd-test #创建dockerfile文件
FROM centos
CMD ["ls","-a"]
docker run build -f dockerfile-cmd-test -t cmdtest .
docker images #查找镜像
[root@iZ2222222ze3mgup8rrtkhrsdxxsZ dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cmdtest latest 609dfee9868d 3 minutes ago 231MB
mycentos 0.1 5e60270dde9d 3 hours ago 337MB
test/centos latest 0edd7173368c 40 hours ago 231MB
tomcatweb latest 1f7cffccf751 2 days ago 684MB
tomcat 9.0 43e421a14aec 12 days ago 680MB
tomcat latest b0e0b0a92cf9 12 days ago 680MB
mysql 5.7 938b57d64674 2 weeks ago 448MB
mysql latest ecac195d15af 2 weeks ago 516MB
nginx latest 87a94228f133 3 weeks ago 133MB
hello-world latest feb5d9fea6a5 5 weeks ago 13.3kB
centos latest 5d0da3dc9764 6 weeks ago 231MB
docker run cmdtest #执行镜像
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
#可以执行,但是如果执行 docker run cmdtest -l
docker: Error response from daemon: OCI runtime create
failed: container_linux.go:380: starting container process
caused: exec: "-l": executable file not found in $PATH: unknown.
ERRO[0000] error waiting for container: context canceled
#报错无法执行 无法追加命令
测试 ENTRYPOINT
#创建文件
vim dockerfile-cmd-entory
#编写指令
FROM centos
ENTRYPOINT ["ls","-a"]
#编译镜像
docker build -f dockerfile-cmd-entory -t entoryponit-test .
#运行镜像
docker run entorypoint-test
#结果
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
#追加命令
docker run entoryponit-test -l
#结果
total 56
drwxr-xr-x 1 root root 4096 Nov 3 06:46 .
drwxr-xr-x 1 root root 4096 Nov 3 06:46 ..
-rwxr-xr-x 1 root root 0 Nov 3 06:46 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bin
drwxr-xr-x 5 root root 340 Nov 3 06:46 dev
drwxr-xr-x 1 root root 4096 Nov 3 06:46 etc
drwxr-xr-x 2 root root 4096 Nov 3 2020 home
lrwxrwxrwx 1 root root 7 Nov 3 2020 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Nov 3 2020 lib64 -> usr/lib64
drwx------ 2 root root 4096 Sep 15 14:17 lost+found
drwxr-xr-x 2 root root 4096 Nov 3 2020 media
drwxr-xr-x 2 root root 4096 Nov 3 2020 mnt
drwxr-xr-x 2 root root 4096 Nov 3 2020 opt
dr-xr-xr-x 110 root root 0 Nov 3 06:46 proc
dr-xr-x--- 2 root root 4096 Sep 15 14:17 root
drwxr-xr-x 11 root root 4096 Sep 15 14:17 run
lrwxrwxrwx 1 root root 8 Nov 3 2020 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Nov 3 2020 srv
dr-xr-xr-x 13 root root 0 Nov 3 06:46 sys
drwxrwxrwt 7 root root 4096 Sep 15 14:17 tmp
drwxr-xr-x 12 root root 4096 Sep 15 14:17 usr
drwxr-xr-x 20 root root 4096 Sep 15 14:17 var
Dockerfile中很多命令都十分相似我们需要了解它们的区别最好的学习方式就是测试!!