10Dcoker容器数据卷 DockerFile

目录

初识DockerFile 

准备工作 

建造

 查看镜像

启动自己写的容器

DockerFile介绍

构架步骤:

DockerFile的构建过程

基础知识:

DockerFile的指令

实战测试:

构建自己的centos

 官方centos镜像

构建自己的centos镜像

编写dockerfile文件

构建镜像

查看镜像

运行镜像

出现问题

解决方法

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

CMD 和 ENTRYPOINT 区别

测试CMD

测试ENTRYPOINT

实战tomcat文件

1、准备镜像文件

2、编写Dokerfile文件

3、构建镜像

4、run镜像

5、查看一下

6、内部测试

7、外部测试 

8、测试(发布项目)

小结:​


初识DockerFile 

dockerfile 就是用来构建 docker 的构建工具! 命令脚本

通过这个脚本可以生成镜像,镜像是一层一层的,脚本的一个个命令,每一个命令就是一层

准备工作 

#创建一个文件夹  miker docker-test-volume  
[root@gh docker-test-volume]# pwd
/home/docker-test-volume
 
#创建一个dockerfile文件, 名字可以随意的 建议 dockerfile
#在此目录下创建文件 vim dockerfile1  
#文件中的内容  脚本  指令都是(大写) 参数
[root@gh docker-test-volume]# cat dockerfile1 
FROM centos

VOLUME ["volume01","volume02"]   # 匿名挂载

CMD echo "------end----"
CMD /bin/bash

#这里的每个命令,就是镜像的一层

建造

#建造
    build  #建造,构建
    -f     #通过什么文件来构建 指的是dockerfile1的地址
    -t	   #生成镜像
    docker build -f dockerfiel1 -t gh/centos .   镜像名前面不能有/
[root@gh docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile1 -t gh/centos .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 5d0da3dc9764
Step 2/4 : VOLUME ["volume01","volume02"]
 ---> Running in 4054c62bb0a3
Removing intermediate container 4054c62bb0a3
 ---> bc7a985144b6
Step 3/4 : CMD echo "------end----"
 ---> Running in 0ccf028a5bcf
Removing intermediate container 0ccf028a5bcf
 ---> 410a0fd04303
Step 4/4 : CMD /bin/bash
 ---> Running in 16d863cb2355
Removing intermediate container 16d863cb2355
 ---> cacef2eba361
Successfully built cacef2eba361
Successfully tagged gh/centos:latest
[root@gh docker-test-volume]# 

 查看镜像

[root@gh docker-test-volume]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
gh/centos             latest    cacef2eba361   4 minutes ago   231MB
centos                latest    5d0da3dc9764   6 months ago    231MB

启动自己写的容器

[root@gh docker-test-volume]# docker run -it cacef2eba361 /bin/bash
[root@abc64ad16f61 /]# ls -l
total 56
lrwxrwxrwx   1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x   5 root root  360 Mar 21 03:46 dev
drwxr-xr-x   1 root root 4096 Mar 21 03:46 etc
drwxr-xr-x   2 root root 4096 Nov  3  2020 home
lrwxrwxrwx   1 root root    7 Nov  3  2020 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3  2020 lib64 -> usr/lib64
drwx------   2 root root 4096 Sep 15  2021 lost+found
drwxr-xr-x   2 root root 4096 Nov  3  2020 media
drwxr-xr-x   2 root root 4096 Nov  3  2020 mnt
drwxr-xr-x   2 root root 4096 Nov  3  2020 opt
dr-xr-xr-x 106 root root    0 Mar 21 03:46 proc
dr-xr-x---   2 root root 4096 Sep 15  2021 root
drwxr-xr-x  11 root root 4096 Sep 15  2021 run
lrwxrwxrwx   1 root root    8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3  2020 srv
dr-xr-xr-x  13 root root    0 Mar 21 03:46 sys
drwxrwxrwt   7 root root 4096 Sep 15  2021 tmp
drwxr-xr-x  12 root root 4096 Sep 15  2021 usr
drwxr-xr-x  20 root root 4096 Sep 15  2021 var
drwxr-xr-x   2 root root 4096 Mar 21 03:46 volume01
drwxr-xr-x   2 root root 4096 Mar 21 03:46 volume02

 这个卷和外部一定有一个同步的目录!

DockerFile介绍

        dockerfile 就是用来构建 docker 的构建工具! 命令脚本

构架步骤:

       1、编写一个 dockerfile 文件

       2、docker build 构建一个镜像

       3、docker run 运行一个镜像

       4、docker push 发布镜像(Docker Hub 、阿里云镜像仓库)

DockerFile的构建过程

基础知识:

1、每个保留关键字(指令)都是必须是大写字母

2、执行从上到下顺序

3、#表示注释

4、每一个指令都会创建提交一个新的镜像曾,并提交!

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

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

步骤:开发。部署、运维。。。缺一不可

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

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

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

DockerFile的指令

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

实战测试:

构建自己的centos

Docker Hub中99%镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来进行的构建

 官方centos镜像

# 初始目录是根目录  没有vim 和 ficonfig 
[root@gh ~]# docker run -it centos
[root@ef06d26faed3 /]# pwd
/
[root@ef06d26faed3 /]# vim
bash: vim: command not found
[root@ef06d26faed3 /]# ifconfig
bash: ifconfig: command not found
[root@ef06d26faed3 /]# 

构建自己的centos镜像

编写dockerfile文件

[root@gh dockerfile]# pwd
/home/dockerfile
[root@gh dockerfile]# vim mydockerfile-centos
FROM centos:centos7                # 基础镜像
MAINTAINER gh<2495140780@qq.com>   # 镜像谁写的 

ENV MYPATH /usr/local              # 环境变量
WORKDIR $MYPATH                    # 工作目录

RUN yum -y install vim                 # 执行yum install 
RUN yum -y install net-tools            
 
EXPOSE 80                          # 暴露端口 80   
 
CMD echo $MYPATH                   # 输出 MYPATH   
CMD echo "---end---"               # 输出 ---end--- 
CMD /bin/bash                      # 进入哪个命令行  

构建镜像

[root@gh dockerfile]# docker build -f mydockerfile-centos -t mycentos .
Sending build context to Docker daemon  2.048kB
Step 1/10 : FROM centos:centos7
 ---> eeb6ee3f44bd
Step 2/10 : MAINTAINER gh<2495140780@qq.com>
 ---> Running in b407d7f8f9de
Removing intermediate container b407d7f8f9de
 ---> 15887db2e09a
Step 3/10 : ENV MYPATH /usr/local
 ---> Running in f80aa6b7841c
Removing intermediate container f80aa6b7841c
 ---> e0d0868b9233
Step 4/10 : WORKDIR $MYPATH
 ---> Running in c21baf5e97c1
Removing intermediate container c21baf5e97c1
 ---> 50a7bdb40b70
Step 5/10 : RUN yum -y install vim
 ---> Running in 4599fc04fef4

    ........
Step 6/10 : RUN yum -y install net-tools
 ---> Running in 0b53256d68c1
Step 7/10 : EXPOSE 80
 ---> Running in 4a04122bd97c
Removing intermediate container 4a04122bd97c
 ---> 09d2fb3ba294
Step 8/10 : CMD echo $MYPATH
 ---> Running in 5bdcadb8a2cc
Removing intermediate container 5bdcadb8a2cc
 ---> 464b57806c04
Step 9/10 : CMD echo "---end---"
 ---> Running in 00b262f8523e
Removing intermediate container 00b262f8523e
 ---> d984bd39b5fb
Step 10/10 : CMD /bin/bash
 ---> Running in d827409c4ce5
Removing intermediate container d827409c4ce5
 ---> e35f53cf074a
Successfully built e35f53cf074a
Successfully tagged mycentos:latest

查看镜像

[root@gh dockerfile]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
mycentos              1.0       709e14a0127a   23 seconds ago   231MB

运行镜像

出现问题

解决方法

centos last 默认版本是8版本 需要改成centos7  

[root@gh dockerfile]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
centos          centos7   eeb6ee3f44bd   6 months ago     204MB

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

CMD 和 ENTRYPOINT 区别

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

测试CMD

 # 编写dockerfile文件
 $ vim dockerfile-test-cmd
 FROM centos
 CMD ["ls","-a"]                    # 启动后执行 ls -a 命令
 ​
 # 构建镜像
 $ docker build  -f dockerfile-test-cmd -t cmd-test:0.1 .
 ​
 # 运行镜像
 $ docker run cmd-test:0.1        # 由结果可得,运行后就执行了 ls -a 命令
 .
 ..
 .dockerenv
 bin
 dev
 etc
 home
 ​
 # 想追加一个命令  -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","-a "] 而 -l  不是命令所以报错

测试ENTRYPOINT

 # 编写dockerfile文件
 $ vim dockerfile-test-entrypoint
 FROM centos
 ENTRYPOINT ["ls","-a"]
 ​
 # 构建镜像
 $ docker build  -f dockerfile-test-entrypoint -t cmd-test:0.1 .
 ​
 # 运行镜像
 $ 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 ....

实战tomcat文件

1、准备镜像文件

        readme.txt  帮助文档

2、编写Dokerfile文件

        官方命名 Dockfile buil自动会寻找这个文件,就不需要- f 指定了  ​

 $ vim dockerfile
 FROM centos                                          # 基础镜像centos
 MAINTAINER cao<1165680007@qq.com>                    # 作者
 COPY README /usr/local/README                        # 复制README文件
 ADD jdk-8u231-linux-x64.tar.gz /usr/local/           # 添加jdk,ADD 命令会自动解压
 ADD apache-tomcat-9.0.35.tar.gz /usr/local/          # 添加tomcat,ADD 命令会自动解压
 RUN yum -y install vim                               # 安装 vim 命令
 ENV MYPATH /usr/local                                # 环境变量设置 工作目录
 WORKDIR $MYPATH
 ​
 ENV JAVA_HOME /usr/local/jdk1.8.0_231                 # 环境变量: JAVA_HOME环境变量
 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 ​
 ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.35     # 环境变量: tomcat环境变量
 ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.35
 ​
 # 设置环境变量 分隔符是:
 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin     
 ​
 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                     # 设置默认命令
 ​
 ​
 ​
 #自己的 
FROM centos:centos7                
MAINTAINER gh<2495140780@qq.com> 

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u311-linux-x64.tar.gz /usr/local
ADD apache-tomcat-10.0.16.tar.gz /usr/local

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk-8u311
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV CATALINA_HOME /usr/local/apache-tomcat-10.0.16
ENV CATALINA_BASH /usr/local/apache-tomcat-10.0.16

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-10.0.16/startup.sh && tail -F /url/local/apache-tomcat-10.0.16/bin/logs/catalina.out

3、构建镜像

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

[root@gh dockerfile]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
diytomcat       latest    fe2bf1d54863   2 minutes ago    801MB

4、run镜像

# -v:绑定路径webapps(test文件发布文件位置) 和 logs 日志文件
[root@gh dockerfile]# docker run -d -p 8090:8080 --name diytomcat01 -v /home/dockerfile/tomcat/test:/url/local/apache-tomcat-10.0.16/webapps/test -v/home/dockerfile/tomcat/logs:/url/local/apache-tomcat-10.0.16/logs diytomcat
648ad59a6e4917c17d4d1fb30d8209d954256c4d9df4fd20344f2b8fd396cd28

5、查看一下

[root@gh dockerfile]# docker exec -it e23bb17424f2 /bin/bash
[root@e23bb17424f2 local]# pwd
/usr/local
[root@e23bb17424f2 local]# ls -l
total 52
drwxr-xr-x 3 root  root  4096 Mar 22 13:55 aegis
drwxr-xr-x 1 root  root  4096 Mar 22 12:47 apache-tomcat-10.0.16
drwxr-xr-x 2 root  root  4096 Apr 11  2018 bin
drwxr-xr-x 2 root  root  4096 Apr 11  2018 etc
drwxr-xr-x 2 root  root  4096 Apr 11  2018 games
drwxr-xr-x 2 root  root  4096 Apr 11  2018 include
drwxr-xr-x 8 10143 10143 4096 Sep 27 12:29 jdk1.8.0_311
drwxr-xr-x 2 root  root  4096 Apr 11  2018 lib
drwxr-xr-x 2 root  root  4096 Apr 11  2018 lib64
drwxr-xr-x 2 root  root  4096 Apr 11  2018 libexec
-rw-r--r-- 1 root  root     0 Mar 22 11:05 readme.txt
drwxr-xr-x 2 root  root  4096 Apr 11  2018 sbin
drwxr-xr-x 5 root  root  4096 Nov 13  2020 share
drwxr-xr-x 2 root  root  4096 Apr 11  2018 src
[root@e23bb17424f2 local]# cd a
aegis/                 apache-tomcat-10.0.16/ 
[root@e23bb17424f2 local]# cd appachpache-tomcat-10.0.16
bash: cd: appachpache-tomcat-10.0.16: No such file or directory
[root@e23bb17424f2 local]# clear
[root@e23bb17424f2 local]# pwd
/usr/local
[root@e23bb17424f2 local]# ls -l
total 52
drwxr-xr-x 3 root  root  4096 Mar 22 13:55 aegis
drwxr-xr-x 1 root  root  4096 Mar 22 12:47 apache-tomcat-10.0.16
drwxr-xr-x 2 root  root  4096 Apr 11  2018 bin
drwxr-xr-x 2 root  root  4096 Apr 11  2018 etc
drwxr-xr-x 2 root  root  4096 Apr 11  2018 games
drwxr-xr-x 2 root  root  4096 Apr 11  2018 include
drwxr-xr-x 8 10143 10143 4096 Sep 27 12:29 jdk1.8.0_311
drwxr-xr-x 2 root  root  4096 Apr 11  2018 lib
drwxr-xr-x 2 root  root  4096 Apr 11  2018 lib64
drwxr-xr-x 2 root  root  4096 Apr 11  2018 libexec
-rw-r--r-- 1 root  root     0 Mar 22 11:05 readme.txt
drwxr-xr-x 2 root  root  4096 Apr 11  2018 sbin
drwxr-xr-x 5 root  root  4096 Nov 13  2020 share
drwxr-xr-x 2 root  root  4096 Apr 11  2018 src
[root@e23bb17424f2 local]# cd apache-tomcat-10.0.16
[root@e23bb17424f2 apache-tomcat-10.0.16]# ls -l
total 152
-rw-r----- 1 root root 19004 Jan 15 13:19 BUILDING.txt
-rw-r----- 1 root root  6210 Jan 15 13:19 CONTRIBUTING.md
-rw-r----- 1 root root 60269 Jan 15 13:19 LICENSE
-rw-r----- 1 root root  2333 Jan 15 13:19 NOTICE
-rw-r----- 1 root root  3378 Jan 15 13:19 README.md
-rw-r----- 1 root root  6905 Jan 15 13:19 RELEASE-NOTES
-rw-r----- 1 root root 16517 Jan 15 13:19 RUNNING.txt
drwxr-x--- 2 root root  4096 Jan 15 13:19 bin
drwx------ 1 root root  4096 Mar 22 13:54 conf
drwxr-x--- 2 root root  4096 Jan 15 13:19 lib
drwxr-x--- 1 root root  4096 Mar 22 13:58 logs
drwxr-x--- 2 root root  4096 Jan 15 13:19 temp
drwxr-x--- 7 root root  4096 Jan 15 13:19 webapps
drwxr-x--- 1 root root  4096 Mar 22 13:54 work
[root@e23bb17424f2 apache-tomcat-10.0.16]# 

6、内部测试

7、外部测试 

8、测试(发布项目)

        做了数据卷挂载、直接在本地编写就可以发布!

小结:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gh-xiaohe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值