Docker 学习 02

83 阅读3分钟

Docker 学习 02

一、 Dockerfile命令含义

  • COPY

    • 复制指令,从上下文目录中复制文件或者目录到容器里指定路径

    • COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
      COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]
      
  • ADD

    • 通过这个命令加入的文件,如果文件为压缩文件,会自动解压复制并解压到目标路径

    •     ADD [--chown=<user>:<group>] <源路径1>...  <目标路径>
          ADD [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]
      
  • CMD

    • 该命令为在容器启动时,默认要运行的命令

    • CMD <shell 命令> 
      CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
      CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
      
  • ENTRYPOINT

    • 类似于 CMD 命令,但是他不会被 docker run 的命令行参数指定的指令所覆盖,这些命令参数会被当做参数送给ENTRYPOINT一起运行,如果想要覆盖它可以使用 --entrypoint 选项

    • ENTRYPOINT ["<executeable>","<param1>","<param2>",...]
      
  • ENV

    • 设置环境

    • ENV <key> <value>
      ENV <key1>=<value1> <key2>=<value2>...
      
  • ARG

    • ENV作用一致,只是作用域不一样,他的设置堆Dockerfile内有效

    • ARG <参数名>[=<默认值>]
      
  • VOLUME

    • 定义匿名数据卷

    • VOLUME ["<路径1>", "<路径2>"...]
      VOLUME <路径>
      
  • EXPOSE

    • 端口声明

    • xxxxxxxxxx EXPOSE <端口1> [<端口2>...]
      
  • WORKDIR

    • 指定工作目录

    • WORKDIR <工作目录路径>
      
  • USER

    • 指定执行后续命令的用户和用户组

    • USER <用户名>[:<用户组>]
      
  • HEALTHCHECK

    • 指定某个程序或者指定来监控docker容器服务的运行状态

    • HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
      HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
      
      HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。
      
  • ONBUILD

    • 延迟构建命令的执行

    • ONBUILD <其它指令>
      
  • LABEL

    • 给镜像添加一些元数据,以键值对的形式

    • LABEL <key>=<value> <key>=<value> <key>=<value> ...ss
      

二、通过Dockerfile部署Spring Boot项目

  1. 首先先随便写一个Spring Boot项目在此,不在过多赘述

  2. 在服务器上新建一个名为本项目名的文件夹

    如 我的项目名为 tallybookRearEnd ,所以我就创建了一个 tallybookRearEnd 文件夹;

    ps: 文件夹不是关键,只是为了好识别

  3. 然后将Spring Boot项目打包,放到该目录下,可以使用 scp 命令上传jar

    如: scp F:/Program/SeparateDevelopment/Tally-Book/tallybookRearEnd/target/tallybook-0.0.1-SNAPSHOT.jar root@47.96.147.206:tallybookRearEnd/

    注意,无论是本地还是远端的文件夹最好中间不要带空格以免出现 Invalid scp command parameters 这个错误

  4. 编写 Dockerfile

    1. 在刚刚创建的文件夹下输入vim Dockerfile以创建 Dockerfile

    2. 在文件中输入如下内容

      # 从java:8中开始构建镜像
      FROM java:8
      # 作者
      MAINTAINER fall <time_lock_t@163.com>
      # 将容器中的/tmp的数据持久化到Docker数据为文件夹中
      VOLUME /tmp
      # 加入jar文件
      ADD tallybook-0.0.1-SNAPSHOT.jar /tallybook-0.0.1-SNAPSHOT.jar
      # 开放容器端口
      EXPOSE 8088
      # 相当于在启动容器时,运行此命令
      ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/tallybook-0.0.1-SNAPSHOT.jar"]
      
    3. 然后开始构建镜像

      在当前文件下,输入docker image build -t [项目名]:tag .

      ps: 镜像名应为小写字符

      使用docker images如果看到如下:

      REPOSITORY         TAG       IMAGE ID       CREATED         SIZE
      tallybookrearend   1.0       38687ac6d64f   7 seconds ago   691MB
      

    即为成功

  5. 运行镜像

    输入docker run -d --name [容器名] -p [映射端口] [镜像名]:tag

    使用docker ps如果看到以下:

       CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS             PORTS                               NAMES
       391e5102e94a   tallybookrearend:1.0   "java -Djava.securit…"   4 seconds ago       Up 3 seconds       0.0.0.0:8088->8088/tcp              tallybookrearend
    

    即为成功