Docker学习与应用(五)-DockerFile

1、DockerFile

1)DockerFile介绍

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

构建步骤

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

查一下官方是怎么做的?

Docker学习与应用(五)-DockerFile_第1张图片

Docker学习与应用(五)-DockerFile_第2张图片

2)DockerFile构建过程

基础知识:

1. 每个保留关键字(指令)都必须是大写字母
2. 执行从上到下顺序执行
3. /# 表示注释
4. 每一个指令都会创建提交一个新的镜像层,并提交!

Docker学习与应用(五)-DockerFile_第3张图片

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

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

步骤:开发,部署,运维

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

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

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

3)DockerFile的指令

以前我们使用别人的,现在我们知道了这些指令之后,我们来练习自己写一个镜像!

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

Docker学习与应用(五)-DockerFile_第4张图片

4)实战测试

创建一个自己的centos

# 1.编写Dockerfile的文件
FROM centos
MAINTAINER dainel<[email protected]>

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

# 2.通过这个文件构建镜像
# 命令 docker build -f 文件路径 -t 镜像名:[tag] .
docker build -f mydockerfile-centos -t mycentos:0.1 .

Successfully built 4af56313b71a
Successfully tagged mycentos:0.1

# 3.测试运行

Docker学习与应用(五)-DockerFile_第5张图片

Docker学习与应用(五)-DockerFile_第6张图片

Docker学习与应用(五)-DockerFile_第7张图片

对比:之前原生的centos

我们增加后的镜像:

Docker学习与应用(五)-DockerFile_第8张图片
Docker学习与应用(五)-DockerFile_第9张图片

我们可以列出本地进行的变更历史

docker history 镜像名

我们平时拿到一个镜像,可以研究一下它是怎么做的

Docker学习与应用(五)-DockerFile_第10张图片

CMD 和 ENTRYPOINT区别

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

测试cmd

# 编写dockerfile文件
$ vim dockerfile-test-cmd
FROM centos
CMD ["ls","-a"]
# 构建镜像
$ docker build  -f dockerfile-test-cmd -t cmd-test:0.1 .
# 运行镜像
$ docker run cmd-test:0.1
.
..
.dockerenv
bin
dev

# 想追加一个命令  -l 成为ls -al
$ docker run cmd-test:0.1 -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.
ERRO[0000] error waiting for container: context canceled 
# cmd的情况下 -l 替换了CMD["ls","-l"]。 -l  不是命令所有报错

测试ENTRYPOINT

# 编写dockerfile文件
$ vim dockerfile-test-entrypoint
FROM centos
ENTRYPOINT ["ls","-a"]
$ docker run entrypoint-test:0.1
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found ...
# 我们的命令,是直接拼接在我们得ENTRYPOINT命令后面的
$ docker run entrypoint-test:0.1 -l
total 56
drwxr-xr-x   1 root root 4096 May 16 06:32 .
drwxr-xr-x   1 root root 4096 May 16 06:32 ..
-rwxr-xr-x   1 root root    0 May 16 06:32 .dockerenv
lrwxrwxrwx   1 root root    7 May 11  2019 bin -> usr/bin
drwxr-xr-x   5 root root  340 May 16 06:32 dev
drwxr-xr-x   1 root root 4096 May 16 06:32 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 ....

Docker学习与应用(五)-DockerFile_第11张图片

Dockerfile中很多命令都十分的相似,我们需要了解它们的区别,我们最好的学习就是对比他们然后测试效果!

5)实战: Tomcat镜像

1.准备镜像文件 tomcat压缩包,jdk压缩包

在这里插入图片描述

2.编写dockerfile文件,官方命名Dockerfile,build会自动寻找这个文件,就不需要-f指定了!

FROM centos #
MAINTAINER cheng<1204598429@qq.com>
COPY README /usr/local/README #复制文件
ADD jdk-8u231-linux-x64.tar.gz /usr/local/ #复制解压
ADD apache-tomcat-9.0.35.tar.gz /usr/local/ #复制解压
RUN yum -y install vim
ENV MYPATH /usr/local #设置环境变量
WORKDIR $MYPATH #设置工作目录
ENV JAVA_HOME /usr/local/jdk1.8.0_231 #设置环境变量
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.35 #设置环境变量
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.35
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib #设置环境变量 分隔符是:
EXPOSE 8080 #设置暴露的端口
CMD /usr/local/apache-tomcat-9.0.35/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.35/logs/catalina.out # 设置默认命令

3.构建镜像

# 因为dockerfile命名使用默认命名 因此不用使用-f 指定文件
[root@xxx tomcat]# docker build -t diytomcat .

Docker学习与应用(五)-DockerFile_第12张图片

4.run镜像

[root@AlibabaECS tomcat]# docker run -d -p 9090:8080 --name kuangshentomcat -v /home/deng/build/tomcat/test:/usr/local/apache-tomcat-9.0.37/webapps/test -v /home/deng/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.37/logs diytomcat

Docker学习与应用(五)-DockerFile_第13张图片

Docker学习与应用(五)-DockerFile_第14张图片

进入镜像

Docker学习与应用(五)-DockerFile_第15张图片

5.访问测试

Docker学习与应用(五)-DockerFile_第16张图片

自己在test目录下创建WEB-INF文件夹,并创建web.xml、index.jsp页面

Docker学习与应用(五)-DockerFile_第17张图片

查看日志文件

test目录下的catalina.out(挂载过)

Docker学习与应用(五)-DockerFile_第18张图片

6)发布自己的镜像

Dockerhub

1、地址 https://hub.docker.com/

2、确定这个账号可以登录

3、登录

$ 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

Docker学习与应用(五)-DockerFile_第19张图片

4、提交 push镜像

# 会发现push不上去,因为如果没有前缀的话默认是push到 官方的library
# 解决方法
# 第一种 build的时候添加你的dockerhub用户名,然后在push就可以放到自己的仓库了
$ docker build -t chengcoder/mytomcat:0.1 .
# 第二种 使用docker tag #然后再次push
$ docker tag 容器id chengcoder/mytomcat:1.0 #然后再次push

Docker学习与应用(五)-DockerFile_第20张图片

7)发布到阿里云镜像服务器上
  1. 看官网 很详细https://cr.console.aliyun.com/repository/登录阿里云
  2. 找到容器镜像服务
  3. 创建命名空间
  4. 创建容器镜像
  5. 浏览阿里云

Docker学习与应用(五)-DockerFile_第21张图片
Docker学习与应用(五)-DockerFile_第22张图片

Docker学习与应用(五)-DockerFile_第23张图片

push上远程仓库
Docker学习与应用(五)-DockerFile_第24张图片

从远程仓库拉取下来
Docker学习与应用(五)-DockerFile_第25张图片

①将镜像打包成jar包

Docker学习与应用(五)-DockerFile_第26张图片

8)回顾Docker结构图

Docker学习与应用(五)-DockerFile_第27张图片

Docker学习与应用(五)-DockerFile 的学习笔记到此完结,笔者归纳、创作不易,大佬们给个3连再起飞吧

你可能感兴趣的:(Docker,docker,学习,容器)