Dockerfile

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

#构建步骤

  •       编写一个dockerfile文件
  •       通过docker build 构建成为一个镜像
  •       docker run 运行镜像
  •       docker push发布镜像(Dockerhub,阿里云镜像仓库)

基础知识:

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

#dockerfile的指令

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

#先创建一个Dockerfile文件

[root@localhost home]# ls
docker-test-volume  mysql  test  xiezuotao
[root@localhost home]# cd docker-test-volume/
[root@localhost docker-test-volume]# touch Dockerfile

#利用vim编辑器打开Dockerfile编写一些脚本命令

FROM centos

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

CMD echo"------end------"

CMD /bin/bash



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

#docker build 构建成为一个镜像

[root@localhost docker-test-volume]# docker build -f Dockerfile -t Xiezuotao/centos .
[+] Building 0.1s (5/5) FINISHED                                                                                                                                             docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                   0.0s
 => => transferring dockerfile: 186B                                                                                                                                                   0.0s
 => [internal] load metadata for docker.io/library/centos:latest                                                                                                                       0.0s
 => [internal] load .dockerignore                                                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                                                        0.0s
 => [1/1] FROM docker.io/library/centos:latest                                                                                                                                         0.0s
 => exporting to image                                                                                                                                                                 0.0s
 => => exporting layers                                                                                                                                                                0.0s
 => => writing image sha256:c7f4fa28ada6acbe53815124afe81f122d5d040144b8714dfe44aa92cef31804                                                                                           0.0s
 => => naming to Xiezuotao/centos                                                                                                                                                      0.0s
[root@localhost docker-test-volume]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED       SIZE
tomcat01              1.0       f65a7f9467f5   5 hours ago   684MB
nginx                 latest    605c77e624dd   2 years ago   141MB
tomcat                latest    fb5657adc892   2 years ago   680MB
mysql                 latest    3218b38490ce   2 years ago   516MB
hello-world           latest    feb5d9fea6a5   2 years ago   13.3kB
Xiezuotao/centos      latest    c7f4fa28ada6   2 years ago   231MB
centos                latest    5d0da3dc9764   2 years ago   231MB
portainer/portainer   latest    580c0e4e98b0   2 years ago   79.1MB

#查看数据卷目录

total 0
lrwxrwxrwx.   1 root root   7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x.   5 root root 360 Feb 19 13:56 dev
drwxr-xr-x.   1 root root  66 Feb 19 13:56 etc
drwxr-xr-x.   2 root root   6 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   6 Sep 15  2021 lost+found
drwxr-xr-x.   2 root root   6 Nov  3  2020 media
drwxr-xr-x.   2 root root   6 Nov  3  2020 mnt
drwxr-xr-x.   2 root root   6 Nov  3  2020 opt
dr-xr-xr-x. 253 root root   0 Feb 19 13:56 proc
dr-xr-x---.   2 root root 162 Sep 15  2021 root
drwxr-xr-x.  11 root root 163 Sep 15  2021 run
lrwxrwxrwx.   1 root root   8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x.   2 root root   6 Nov  3  2020 srv
dr-xr-xr-x.  13 root root   0 Feb 19 07:28 sys
drwxrwxrwt.   7 root root 171 Sep 15  2021 tmp
drwxr-xr-x.  12 root root 144 Sep 15  2021 usr
drwxr-xr-x.  20 root root 262 Sep 15  2021 var
drwxr-xr-x.   2 root root   6 Feb 19 13:56 volume01
drwxr-xr-x.   2 root root   6 Feb 19 13:56 volume02


#volume01和volume02目录是生成镜像时候自动挂载的,数据卷目录

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

#查看一下卷挂载路径

#docker inspect 容器id


 "Mounts": [
            {
                "Type": "volume",
                "Name": "59f2ab5cebb6a0b6c3cdfca6fb315e183821d15422386ff5edf34241f2243536",
                "Source": "/var/lib/docker/volumes/59f2ab5cebb6a0b6c3cdfca6fb315e183821d15422386ff5edf34241f2243536/_data",            #容器外的目录
                "Destination": "volume02",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "68eefb22bf39765bd1c1ecc5d453857aed4a1014471f8a10ae87b66cfac10810",
                "Source": "/var/lib/docker/volumes/68eefb22bf39765bd1c1ecc5d453857aed4a1014471f8a10ae87b66cfac10810/_data",            #容器外的目录
                "Destination": "volume01",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

#测试一下文件是否同步出去

#在volume02处创建一个container.txt文件


[root@3ffed92190ff home]# cd /volume02
[root@3ffed92190ff volume02]# ls
[root@3ffed92190ff volume02]# touch container.txt
[root@3ffed92190ff volume02]# ls
container.txt


#在宿主机中查看
[root@localhost _data]# cd /var/lib/docker/volumes/59f2ab5cebb6a0b6c3cdfca6fb315e183821d15422386ff5edf34241f2243536/_data
[root@localhost _data]# ls
container.txt

这种方式使用多!!! 构建自己的镜像!

假设构建镜像时没有挂载卷,要手动镜像挂载 -v 卷名:容器内路径

#创建一个自己的centos

#1,编写dockerfile文件

FROM centos:7

MAINTAINER xiezuotao<2806897453@qq.com>

ENV MYPATH /user/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 dockerfile文件路径 -t 镜像名[tag]

[root@localhost dockerfile]# docker build -f mydockerfile -t mycentos .
[+] Building 55.4s (8/8) FINISHED                                                                                                                                            docker:default
 => [internal] load build definition from mydockerfile                                                                                                                                 0.0s
 => => transferring dockerfile: 324B                                                                                                                                                   0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                                                                           16.3s
 => [internal] load .dockerignore                                                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                                                        0.0s
 => [1/4] FROM docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987                                                                     12.0s
 => => resolve docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987                                                                      0.0s
 => => sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987 1.20kB / 1.20kB                                                                                         0.0s
 => => sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f 529B / 529B                                                                                             0.0s
 => => sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9 2.75kB / 2.75kB                                                                                         0.0s
 => => sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc 76.10MB / 76.10MB                                                                                       8.2s
 => => extracting sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc                                                                                              3.6s
 => [2/4] WORKDIR /user/local                                                                                                                                                          0.1s
 => [3/4] RUN yum -y install vim                                                                                                                                                      22.1s
 => [4/4] RUN yum -y install net-tools                                                                                                                                                 2.5s 
 => exporting to image                                                                                                                                                                 2.0s 
 => => exporting layers                                                                                                                                                                2.0s 
 => => writing image sha256:4029b853692571236d7a5023df41cbd614b353e4de0f33c8842190591960cee9                                                                                           0.0s 
 => => naming to docker.io/library/mycentos              

#3,测试运行

工作目录:默认为根目录

可以列出本地镜像的变更历史

[root@localhost dockerfile]# docker history 4029b8536925
IMAGE          CREATED          CREATED BY                                       SIZE      COMMENT
4029b8536925   12 minutes ago   CMD ["/bin/sh" "-c" "/bin/bash"]                 0B        buildkit.dockerfile.v0
<missing>      12 minutes ago   CMD ["/bin/sh" "-c" "echo \"-------end------…   0B        buildkit.dockerfile.v0
<missing>      12 minutes ago   CMD ["/bin/sh" "-c" "echo $MYPATH"]              0B        buildkit.dockerfile.v0
<missing>      12 minutes ago   EXPOSE map[80/tcp:{}]                            0B        buildkit.dockerfile.v0
<missing>      12 minutes ago   RUN /bin/sh -c yum -y install net-tools # bu…   208MB     buildkit.dockerfile.v0
<missing>      12 minutes ago   RUN /bin/sh -c yum -y install vim # buildkit     296MB     buildkit.dockerfile.v0
<missing>      12 minutes ago   WORKDIR /user/local                              0B        buildkit.dockerfile.v0
<missing>      12 minutes ago   ENV MYPATH=/user/local                           0B        buildkit.dockerfile.v0
<missing>      12 minutes ago   MAINTAINER xiezuotao<2806897453@qq.com>          0B        buildkit.dockerfile.v0
<missing>      2 years ago      /bin/sh -c #(nop)  CMD ["/bin/bash"]             0B        
<missing>      2 years ago      /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      2 years ago      /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB     

可以通过docker history 镜像id/镜像名来查看暴露端口

通过docker history 镜像id/镜像名 可以分析一下镜像是如何做的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值