DockerFile
dockerfile是用来构建docker镜像的文件!命令参数脚本
Centos的官方DockerFile文件
FROM scratch
ADD centos-7-docker.tar.xz /
LABEL name="CentOS Base Image"
vendor="CentOS"
license="GPLv2"
build-date="20170801"
CMD ["/bin/bash"]
DockerFile构建过程
- 每个保留关键字(指令)都是必须是大写字母
- 执行从上到下顺序执行
#
表示注释- 每一个指令都会创建提交一个新的镜像层,并提交!
DockerFile是面向开发的,我们以后要发布项目,做镜像,就需要编写DockerFile文件,这个文件十分简单!
DockerFile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile件,这个文件十分简单!
Docker镜像逐渐成为企业交付的标准,必须要掌握!
DockerFile:构建文件,定义了一切的步骤,源代码
Dockerlmages:通过DockerFile构建生成的镜像,最终发布和运行的产品,原来是jar war
DockerFile指令
FROM # 基础镜镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤:tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 指定暴露的端口
CMD # CMD用于指定容器启动时执行的命令,只能有一个CMD命令,多个CMD只执行最后一个。若容器启动时指定了运行的命令,则会覆盖掉CMD中指定的命令。
ENTRYPOINT # 容器启动后执行的命令,这些命令不能被docker run提供的参数覆盖。和CMD一样,每个Dockerfile中只能有一个ENTRYPOINT,当有多个时最后一个生效
ONBUILD # 当构建一个被继承的DockerFile这个时候就会运行ONBUILD指令。
COPY # 类似于ADD,将我们的文件拷贝到镜像中
ENV # 构建的时候设置环境变量
实战测试
Docker Hub中99%的镜像都是从
FROM scratch
开始的
# 编写dockerFile文件
[root@shop docker]# cat dockerfile01-centos
FROM centos
MAINTAINER cuianbing<cuianbing@outlook.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 "------end----"
CMD /bin/bash
###### 通过命令构建 docker build -f 文件名 -t 镜像名:版本号 目录
[root@shop docker]# docker build -f dockerfile01-centos -t mycentos:0.1 .
Sending build context to Docker daemon 2.048kB
Step 1/10 : FROM centos
---> 300e315adb2f
Step 2/10 : MAINTAINER cuianbing<cuianbing@outlook.com>
---> Running in 98d33c863dda
Removing intermediate container 98d33c863dda
---> b717036e60d5
Step 3/10 : ENV MYPATH /usr/local
---> Running in 05d4e87aca21
Removing intermediate container 05d4e87aca21
---> e0a4373db132
Step 4/10 : WORKDIR $MYPATH
---> Running in 81c620ede86d
Removing intermediate container 81c620ede86d
---> c77290079833
Step 5/10 : RUN yum -y install vim
---> Running in 2cd380622588
CentOS Linux 8 - AppStream 3.5 MB/s | 6.2 MB 00:01
CentOS Linux 8 - BaseOS 2.9 MB/s | 2.3 MB 00:00
CentOS Linux 8 - Extras 5.0 kB/s | 8.1 kB 00:01
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-15.el8 appstream 1.4 M
Installing dependencies:
gpm-libs x86_64 1.20.7-15.el8 appstream 39 k
vim-common x86_64 2:8.0.1763-15.el8 appstream 6.3 M
vim-filesystem noarch 2:8.0.1763-15.el8 appstream 48 k
which x86_64 2.21-12.el8 baseos 49 k
Transaction Summary
================================================================================
Install 5 Packages
Total download size: 7.8 M
Installed size: 30 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm 325 kB/s | 39 kB 00:00
(2/5): vim-filesystem-8.0.1763-15.el8.noarch.rp 675 kB/s | 48 kB 00:00
(3/5): which-2.21-12.el8.x86_64.rpm 520 kB/s | 49 kB 00:00
(4/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm 3.6 MB/s | 1.4 MB 00:00
(5/5): vim-common-8.0.1763-15.el8.x86_64.rpm 4.4 MB/s | 6.3 MB 00:01
--------------------------------------------------------------------------------
Total 3.4 MB/s | 7.8 MB 00:02
warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS Linux 8 - AppStream 1.6 MB/s | 1.6 kB 00:00
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : which-2.21-12.el8.x86_64 1/5
Installing : vim-filesystem-2:8.0.1763-15.el8.noarch 2/5
Installing : vim-common-2:8.0.1763-15.el8.x86_64 3/5
Installing : gpm-libs-1.20.7-15.el8.x86_64 4/5
Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64 4/5
Installing : vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5
Running scriptlet: vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5
Running scriptlet: vim-common-2:8.0.1763-15.el8.x86_64 5/5
Verifying : gpm-libs-1.20.7-15.el8.x86_64 1/5
Verifying : vim-common-2:8.0.1763-15.el8.x86_64 2/5
Verifying : vim-enhanced-2:8.0.1763-15.el8.x86_64 3/5
Verifying : vim-filesystem-2:8.0.1763-15.el8.noarch 4/5
Verifying : which-2.21-12.el8.x86_64 5/5
Installed:
gpm-libs-1.20.7-15.el8.x86_64 vim-common-2:8.0.1763-15.el8.x86_64
vim-enhanced-2:8.0.1763-15.el8.x86_64 vim-filesystem-2:8.0.1763-15.el8.noarch
which-2.21-12.el8.x86_64
Complete!
Removing intermediate container 2cd380622588
---> 088c154f7a11
Step 6/10 : RUN yum -y install net-tools
---> Running in ce36ab4986aa
Last metadata expiration check: 0:00:07 ago on Sat Dec 12 07:51:28 2020.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
net-tools x86_64 2.0-0.52.20160912git.el8 baseos 322 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 322 k
Installed size: 942 k
Downloading Packages:
net-tools-2.0-0.52.20160912git.el8.x86_64.rpm 258 kB/s | 322 kB 00:01
--------------------------------------------------------------------------------
Total 118 kB/s | 322 kB 00:02
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : net-tools-2.0-0.52.20160912git.el8.x86_64 1/1
Running scriptlet: net-tools-2.0-0.52.20160912git.el8.x86_64 1/1
Verifying : net-tools-2.0-0.52.20160912git.el8.x86_64 1/1
Installed:
net-tools-2.0-0.52.20160912git.el8.x86_64
Complete!
Removing intermediate container ce36ab4986aa
---> 3923f76a5d3c
Step 7/10 : EXPOSE 80
---> Running in 215d7fdaa550
Removing intermediate container 215d7fdaa550
---> c21de33703e9
Step 8/10 : CMD echo $MYPATH
---> Running in 70a41035a36c
Removing intermediate container 70a41035a36c
---> 04758d48d7c0
Step 9/10 : CMD echo "------end----"
---> Running in d88a0800a4f3
Removing intermediate container d88a0800a4f3
---> eeba7ca1e1de
Step 10/10 : CMD /bin/bash
---> Running in 0030be87637a
Removing intermediate container 0030be87637a
---> 71a40e79759b
Successfully built 71a40e79759b
Successfully tagged mycentos:0.1
########### 测试运行
查看镜像构建历史
docker history 容器ID
CMD 和 ENTRYPOINT
CMD # CMD用于指定容器启动时执行的命令,只能有一个CMD命令,多个CMD只执行最后一个。若容器启动时指定了运行的命令,则会覆盖掉CMD中指定的命令。
ENTRYPOINT # 容器启动后执行的命令,这些命令不能被docker run提供的参数覆盖。和CMD一样,每个Dockerfile中只能有一个ENTRYPOINT,当有多个时最后一个生效
发布镜像
docker login # 登录