DockerFile
程序员文章站
2022-03-07 13:09:42
...
DockerFile介绍
dockerfile是用来构建docker镜像的文件!命令参数脚本!
构建步骤:
- 编写一个dockerfile文件
- docker build 构建成为一个镜像
- docker run 运行镜像
- docker push 发布镜像(DockerHub、阿里云镜像仓库!)
DockerFile构建过程
基础知识:
-
每个保留关键字(指令)都是必须大写字母
-
执行从上到下顺序执行
-
# 表示注释
-
每个指令都会创建提交一个新的镜像层,并提交
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
- 注册自己账号
- 确定这个账号可以登录
- 在我们服务器上提交自己的镜像
# 登录
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
提交的时候也是按照镜像的层级来进行提交的!
小结
上一篇: 容器数据卷
下一篇: 如何通过docker运行容器