docker学习(五)

Dockerfile介绍

dockerfile 是用来构建docker镜像的文件!命令行参数脚本

构建步骤

  1. 编写一个dockerfile文件
  2. dockerbuild 构建成为一个镜像
  3. docker run 运行镜像文件
  4. docker push发布镜像(DockerHub,阿里云镜像仓库)

Dockerfile构建过程 

基础知识:

  1. 每个保留关键字都必须是大写字母
  2. 执行从上倒下的顺序
  3. #表示注释
  4. 每个指令都会创建提交一个新的镜像,并提交

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/bash

2.通过这个文件构建镜像

#命令 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中很多命令都十分相似我们需要了解它们的区别最好的学习方式就是测试!!

猜你喜欢

转载自blog.csdn.net/qq_33839972/article/details/121094825