欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DockerFile

程序员文章站 2022-03-07 13:09:42
...

DockerFile

DockerFile介绍

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

构建步骤:

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

DockerFile构建过程

基础知识:

  1. 每个保留关键字(指令)都是必须大写字母

  2. 执行从上到下顺序执行

  3. # 表示注释

  4. 每个指令都会创建提交一个新的镜像层,并提交

dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!

Docker镜像逐渐成为企业交付的标准,必须要掌握!

步骤:开发、部署、运维。。。缺一不可!

DockerFile:构建文件,定义了一切的步骤,源代码

DockerImages:通过DockerFile构建生成的镜像,最终发布和运行产品!

Docker容器:容器就是镜像运行起来提供服务器

DockerFile指令

FROM				# 基础镜像,一切从这里开始构建
MAINTAINER			# 镜像是谁写的,姓名+邮箱
RUN					# 镜像构建的时候需要运行的命令
ADD					# 步骤,tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR				# 镜像的工作目录 
VOLUME				# 挂载到目录位置
EXPOSE				# 保留端口配置
CMD					# 指定这个容器启动的时候要运行的命令
ENTRYPOINT			# 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD				# 当构建一个被继承Dockerfile这个时候就运行ONBUILD 的指令,出发指令
COPY				# 类似ADD, 将我们文件拷贝到镜像中
ENV					# 构建的时候设置环境变量! 

实战测试

Docker Hub中99%镜像都是从这个基础镜像过来的 FROM scratch

创建一个自己的centos

# 1. 编写Dockerfile的文件

# 2. 通过文件构建镜像
# 命令 docker build -f dockerfile文件路径 -t 镜像名:[tag]

CMD 和 ENTRYPOINT 区别

CMD					# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT			# 指定这个容器启动的时候要运行的命令,可以追加命令

测试cmd

# 编写dockerfile 文件
FROM centos

CMD ["ls","-a"]

# 构建镜像
F:\dockerTest>docker build -f dockerfile2 -t cmdtest .

# run运行,发现我们的ls -a命令生效
F:\dockerTest>docker run c79
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

# 想追加一个 -l   ls -al
F:\dockerTest>docker run c79 -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown.

# cmd的清理下 -l 替换了CMD ["ls","-a"] 命令,-l 不是命令所以报错!

测试ENTRYPOINT

# 编写dockerfile 文件
FROM centos
ENTRYPOINT ["ls","-a"]

# 构建镜像
F:\dockerTest>docker build -f dockerfile2 -t enteypointTest .




F:\dockerTest>docker run 497
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

# 我们追加命令
F:\dockerTest>docker run 497 -l
total 56
drwxr-xr-x   1 root root 4096 May 28 14:49 .
drwxr-xr-x   1 root root 4096 May 28 14:49 ..
-rwxr-xr-x   1 root root    0 May 28 14:49 .dockerenv
lrwxrwxrwx   1 root root    7 May 11  2019 bin -> usr/bin
drwxr-xr-x   5 root root  340 May 28 14:49 dev
drwxr-xr-x   1 root root 4096 May 28 14:49 etc
drwxr-xr-x   2 root root 4096 May 11  2019 home
lrwxrwxrwx   1 root root    7 May 11  2019 lib -> usr/lib
lrwxrwxrwx   1 root root    9 May 11  2019 lib64 -> usr/lib64
drwx------   2 root root 4096 Jan 13 21:48 lost+found
drwxr-xr-x   2 root root 4096 May 11  2019 media
drwxr-xr-x   2 root root 4096 May 11  2019 mnt
drwxr-xr-x   2 root root 4096 May 11  2019 opt
dr-xr-xr-x 125 root root    0 May 28 14:49 proc
dr-xr-x---   2 root root 4096 Jan 13 21:49 root
drwxr-xr-x  11 root root 4096 Jan 13 21:49 run
lrwxrwxrwx   1 root root    8 May 11  2019 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 May 11  2019 srv
dr-xr-xr-x  12 root root    0 May 28 11:55 sys
drwxrwxrwt   7 root root 4096 Jan 13 21:49 tmp
drwxr-xr-x  12 root root 4096 Jan 13 21:49 usr
drwxr-xr-x  20 root root 4096 Jan 13 21:49 var

发布自己的镜像

DockerHub

  1. 注册自己账号
  2. 确定这个账号可以登录
  3. 在我们服务器上提交自己的镜像
# 登录
F:\dockerTest>docker login --help

Usage:  docker login [OPTIONS] [SERVER]

Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.

Options:
  -p, --password string   Password
      --password-stdin    Take the password from stdin
  -u, --username string   Username
  
F:\dockerTest>docker login -u dockerID
Password:
Login Succeeded

登录完毕后就可以提交镜像了,就是一步 docker push

# push自己的镜像到服务器上!
F:\dockerTest>docker push cmdtest
The push refers to repository [docker.io/library/cmdtest]
0683de282177: Preparing                                                                                                 denied: requested access to the resource is denied


# 解决:增加一个 tag  注意必须是 dockerID/image名字:版本号
F:\dockerTest>docker tag 497 dockerID/entry:1.0

# docker push上去即可! 自己发布的镜像尽量带上版本号
F:\dockerTest>docker push dockerID/entry:1.0
0683de282177: Pushing [=>                                                 ]  7.627MB/237.1MB                            0683de282177: Preparing

提交的时候也是按照镜像的层级来进行提交的!

小结

DockerFile