DockerFile
构建Docker镜像的脚本,交付的标准。
使用步骤:
1、编写dockerfile
2、docker build 通过dockerfile构建镜像
3、docker run
4、docker push 发布镜像
编写Dockerfile
基础知识:
- dockerfile的命令都是大写
- 从上到下执行
- 每一个指令都会生成一个镜像层
CMD # 只能执行一条命令
ENTRYPOINT # 可以追加命令
测试
官方dockerfile,docker hub可以找到。如centos,可以找到dockerfile的链接目录。
# 基本上都是从这个基础镜像搭建的
FROM scratch
ADD centos-7-x86_64-docker.tar.xz /
LABEL \
org.label-schema.schema-version="1.0" \
org.label-schema.name="CentOS Base Image" \
org.label-schema.vendor="CentOS" \
org.label-schema.license="GPLv2" \
org.label-schema.build-date="20201113" \
org.opencontainers.image.title="CentOS Base Image" \
org.opencontainers.image.vendor="CentOS" \
org.opencontainers.image.licenses="GPL-2.0-only" \
org.opencontainers.image.created="2020-11-13 00:00:00+00:00"
CMD ["/bin/bash"]
构建自己的dockerfile
# vim /home/dockerfile/dockerfile-mycentos
FROM centos
MAINTAINER kong<hiukong1018@foxmail.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 装一些工具
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "-----------1st CMD----------------"
CMD /bin/bash
# docker build -f dockerfile文件 -t 生成镜像:tag
# docker build -f dockerfile-mycentos -t mycentos:1.0 .
构建镜像完毕
docker history imageName
可以查看镜像的变更历史
CMD
和ENTRYPOINT
的区别
CMD # 只能执行一条命令,并且会被替代
ENTRYPOINT # 可以执行命令,也可以追加命令
- CMD
# vim dockerfile-test-cmd
FROM centos
CMD ["ls","-a"]
# 构建镜像并且运行实例
# docker build -f dockerfile-cmd-test -t testcmd .
# docker run testcmd
.
..
.dockerenv
bin
dev
etc
home
lib
等等...
# 再次新建实例,不过这次添加参数 -l
# docker run testcmd -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.
# 如果想执行 ls -al
# docker run testcmd ls -al
total 56
drwxr-xr-x 1 root root 4096 Nov 26 04:13 .
drwxr-xr-x 1 root root 4096 Nov 26 04:13 ..
-rwxr-xr-x 1 root root 0 Nov 26 04:13 .dockerenv
lrwxrwxrwx 1 root root 7 May 11 2019 bin -> usr/bin
drwxr-xr-x 5 root root 340 Nov 26 04:13 dev
这里希望在ls -a
后面追加参数-l
,实际上是-l
替换了CMD ["ls","-a"]
,因为-l不是命令,因此出错,这就是CMD
可被替换的意思。
- ENTRYPOINT
# vim dockerfile-entrypoint-test
FROM centos
ENTRYPOINT ["ls","-a"]
# docker build -f dockerfile-entrypoint-test -t testentrypoint .
# docker run testentrypoint
.
..
.dockerenv
bin
dev
etc
home
lib
# docker run testentrypoint -l
total 56
drwxr-xr-x 1 root root 4096 Nov 26 05:05 .
drwxr-xr-x 1 root root 4096 Nov 26 05:05 ..
-rwxr-xr-x 1 root root 0 Nov 26 05:05 .dockerenv
ENTRYPOINT
允许追加命令,这里可以看出两者区别。
发布镜像:
1、必须要有docker hub帐号
2、docker login -u username 登录
3、docker push maintainer/image:tag
小结
至此已经了解Docker全流程,此图为docker流程图,看懂此图已经入门。