DockerFile
DockerFile介绍
DockeFile使用来构建docker镜像文件!命令参数脚本
构建步骤
- 编写一个dockerfile文件
- docker build 构建成为一个镜像
- docker run 运行镜像
- docker push 发布镜像(DockerHub, 阿里云镜像)
查看官方是怎么做
很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像
DockerFile构建过程
DockerFile基础知识
- 每个保留关键字(指令)都是必须是大写字母
- 指令是从上到下顺序执行的
#
比哦啊哈斯注释- 每个指令都会创建提交一个新的镜像层,并提交
Dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件
DockerFile:构建文件,定义了一切的步骤,元代码
DockerImages:通过DockerFile构建生成的镜像最终发布和运行的产品
Docker容器:容器就是镜像运行起来提供服务的
DockerFile指令
- FROM:基础镜像,一切从这里开始构建
- MAINTAINER:镜像的作者,一般是姓名+邮箱
- RUN:镜像构建的时候需要运行的命令
- ADD:步骤,搭建Tomcat镜像,这个Tomcat压缩包!,添加内容
- WORKDIR:镜像的工作目录
- VOLUME:挂载的目录
- EXPOSE:指定对外端口
- CMD:指定这个容器启动时候要运行的命令,只有最后一个生效,可被替代
- ENTRTPOINT:指定这个容器启动的时候需要运行的命令,可以追加命令
- ONBUILD:当构建一个被继承 DockerFile 这个时候就会运行ONBUILD 的指令。触发指令
- COPY:类似ADD,将我们文件拷贝到镜像中
- ENV:构建的时候设置环境变量
实战测试
Docker Hub 中99%镜像都是从这个基础镜像过来的 FROM scratch, 然后配置需要的软件和配置来进行的构建
创建一个自己的Centos
-
编写DockerFile文件
-
通过 docker build 构建镜像
命令格式:docker build -f dockerfile文件 -t 目标镜像名:版本号 .
- 启动 docker 容器
可以发现增加的VIM,net-tools都可以使用
还可以通过docker history 镜像id
查看镜像是怎么生成的
CMD 和 ENTRYPOINT 的区别
测试CMD
# 编写 dockerfile 文件
FROM centos
CMD ["ls", "-a"]
# 构建镜像
sudo docker build -f dockerfile-cmd-test -t mycentos:0.2 .
# run运行,发现 ls -a生效了,但是只有最后一个CMD生效
sudo docker run mycentos:0.2
测试 ENTRYPOINT
# 编写 dockerfile 文件
FROM centos
ENTRYPOINT ["ls", "-a"]
# 构建镜像
sudo docker build -f dockerfile-cmd-test -t mycentos:0.2 .
# run运行,发现 ls -a生效了,但是只有最后一个CMD生效
sudo docker run mycentos:0.2
# 区别,我们追加的命令,直接添加到ENTRYPOINT命令后面
ubuntu@VM-0-13-ubuntu:/home/dockerfile$ sudo docker run mycentos:0.3 -l
total 56
drwxr-xr-x 1 root root 4096 Jan 9 07:22 .
drwxr-xr-x 1 root root 4096 Jan 9 07:22 ..
-rwxr-xr-x 1 root root 0 Jan 9 07:22 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 15:22 bin -> usr/bin
drwxr-xr-x 5 root root 340 Jan 9 07:22 dev
drwxr-xr-x 1 root root 4096 Jan 9 07:22 etc
drwxr-xr-x 2 root root 4096 Nov 3 15:22 home
lrwxrwxrwx 1 root root 7 Nov 3 15:22 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Nov 3 15:22 lib64 -> usr/lib64
drwx------ 2 root root 4096 Dec 4 17:37 lost+found
drwxr-xr-x 2 root root 4096 Nov 3 15:22 media
drwxr-xr-x 2 root root 4096 Nov 3 15:22 mnt
drwxr-xr-x 2 root root 4096 Nov 3 15:22 opt
dr-xr-xr-x 113 root root 0 Jan 9 07:22 proc
dr-xr-x--- 2 root root 4096 Dec 4 17:37 root
drwxr-xr-x 11 root root 4096 Dec 4 17:37 run
lrwxrwxrwx 1 root root 8 Nov 3 15:22 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Nov 3 15:22 srv
dr-xr-xr-x 13 root root 0 Jan 8 12:29 sys
drwxrwxrwt 7 root root 4096 Dec 4 17:37 tmp
drwxr-xr-x 12 root root 4096 Dec 4 17:37 usr
drwxr-xr-x 20 root root 4096 Dec 4 17:37 var
实战Tomcat
-
准备镜像文件Tomcat压缩包,jdk的压缩包
-
编写dockerfile文件,官方命名
Dockerfile
,build
命令会自动寻找Dockerfile文件,就不需要-f指定了
FROM centos
MAINTAINER lxl<3419066024@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u162-linux-x64.tar.gz /usr/local
ADD apache-tomcat-9.0.41.tar.gz /usr/local
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_162
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.41
ENV CATALINA_BASH $CATALINA_HOME
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.41/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.41/bin/logs/catatlina.out
- 构建镜像
sudo docker build -t diytomcat .
- 启动容器
docker run -d -p 3344:8080 --name lxltomcat -v /home/ubuntu/tomcat/test:/usr/local/apache-tomcat-9.0.41/webapps/test -v /home/ubuntu/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.41/logs diytomcat
- 发布项目
在本地的挂载目录上可以上传自己的文件
发布镜像
DockerHub
- 要注册自己的账号
- 确定这个账号可以登录
- 使用 docker push
发布到阿里云