zoukankan      html  css  js  c++  java
  • Docker入门-docker运行springboot应用(二)

    环境准备

    • jdk8
    • 安装docker
    • 镜像加速器配置
    • docker私有仓库
    • springboot工程的jar包

    docker部署项目

    dockfile

    Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile。Docker程序将读取Dockerfile,根据指令生成定制的image。相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是怎么产生的。有了Dockerfile,当我们需要定制自己额外的需求时,只需在Dockerfile上添加或者修改指令,重新生成image即可,省去了敲命令的麻烦。参考

    注意Dockerfile必须和Jar包在同一路径下

    创建并编辑dockfile文件

    touch Dockerfile

    Dockfile

    FROM java:8
    EXPOSE 8080
    VOLUME /slm
    ADD helloworld-1.0-SNAPSHOT.jar app.jar
    RUN sh -c 'touch /app.jar'
    ENV JAVA_OPTS=""
    ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
    • FROM 基础镜像必要,代表你的项目将构建在这个基础上面
    • EXPOSE 允许指定端口转发
    • VOLUME 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
    • ADD 将文件从路径
    • ENV 可以用于为docker容器设置环境变量
    • ENTRYPOINT 指定 Docker image 运行成 instance (也就是 Docker container) 时,要执行的命令或者文件。

    开始构建:

    docker build -t app .

    -t boot-docker 代表你要构建的名字

    控制台输出:

    Sending build context to Docker daemon  14.35MB
    Step 1/7 : FROM java:8
    8: Pulling from library/java
    5040bd298390: Pull complete 
    fce5728aad85: Pull complete 
    76610ec20bf5: Pull complete 
    60170fec2151: Pull complete 
    e98f73de8f0d: Pull complete 
    11f7af24ed9c: Pull complete 
    49e2d6393f32: Pull complete 
    bb9cdec9c7f3: Pull complete 
    Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
    Status: Downloaded newer image for java:8
     ---> d23bdf5b1b1b
    Step 2/7 : EXPOSE 8080
     ---> Running in baa4bf07bb14
    Removing intermediate container baa4bf07bb14
     ---> f11644c60f39
    Step 3/7 : VOLUME /slm
     ---> Running in b9416fbc0df5
    Removing intermediate container b9416fbc0df5
     ---> 3f5578b86bca
    Step 4/7 : ADD helloworld-1.0-SNAPSHOT.jar app.jar
     ---> 2644a63eee12
    Step 5/7 : RUN sh -c 'touch /app.jar'
     ---> Running in 287d2c7fea63
    Removing intermediate container 287d2c7fea63
     ---> 5eadcec67575
    Step 6/7 : ENV JAVA_OPTS=""
     ---> Running in df119f19b273
    Removing intermediate container df119f19b273
     ---> 1259b5b9c02a
    Step 7/7 : ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
     ---> Running in 7bdbc2046342
    Removing intermediate container 7bdbc2046342
     ---> 20a76c5f6685
    Successfully built 20a76c5f6685
    Successfully tagged app:latest

    我们可以看到已经构建完成,Successfully built 20a76c5f6685这句话指明了刚刚构建的镜像ID现在我们可以根据这个ID来进行操作。

    docker run -d -p 8080:8080 20a76c5f6685

    控制台输出:

    [root@iZ2ze895xh98oa4skpbtiuZ hello]# docker run -d -p 8080:8080 20a76c5f6685
    4e3881ca9f99bbf59852a1b54131783ceec264334d708d4f8ddbfdf0f9fcf306

    查看镜像

    [root@iZ2ze895xh98oa4skpbtiuZ hello]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    app                 latest              20a76c5f6685        6 seconds ago       672MB
    hello-world         latest              fce289e99eb9        11 months ago       1.84kB
    java                8                   d23bdf5b1b1b        2 years ago         643MB

    可以看到app镜像已经有了

    查看正在运行的镜像

    [root@iZ2ze895xh98oa4skpbtiuZ hello]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    4e3881ca9f99        20a76c5f6685        "sh -c 'java $JAVA_O…"   10 minutes ago      Up 10 minutes       0.0.0.0:8080->8080/tcp   strange_knuth

    可以看到app镜像的CONTAINER的ID为4e3881ca9f99,名称为strange_knuth,映射的端口号为8080

    进入app镜像所在的容器

    [root@iZ2ze895xh98oa4skpbtiuZ hello]# docker exec -it 4e3881ca9f99 /bin/bash
    root@4e3881ca9f99:/#

    查看容器中的信息

    root@4e3881ca9f99:/# ls
    app.jar  bin  boot  dev  etc  home  lib  lib64    media  mnt  opt  proc  root  run  sbin    slm  srv  sys  tmp  usr  var

    可以看到app.jar在容器中

    宿主机开放8080访问端口,在浏览器中进行访问

     访问成功

    docker相关命令

    目录挂载

    我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。

    创建容器   添加-v参数,   后边为 宿主机目录:容器目录    --name后边是容器名称     centos:7指的是镜像以及版本号

    docker run -di /usr/local/myhtml:/usr/local/myhtml --name=mycentos7 centos:7

    如果你共享的是多级的目录,可能会出现权限不足的提示。

     Permission denied

    这是因为Centos7中的安全模块selinux把权限禁掉了,我们需要添加参数 -privileged=true来解决挂载目录没有权限的问题

    将容器保存为镜像

    docker commit contailer_nginx mynginx
    contailer_nginx是容器名称   mynginx是新的镜像名称

    镜像备份
    docker save -o mynginx.tar mynginx

    -o 输出到的文件

    执行后,运行ls命令即可看到打成的jar包

    恢复镜像

    doker load -i mynginx.tar
    
    

    参考网址:

    https://www.jb51.net/article/165159.htm

    https://www.runoob.com/docker/docker-architecture.html

  • 相关阅读:
    集合类
    ajax技术
    Java中的Runnable、Callable、Future、FutureTask的区别与示例
    python 检测文件编码等
    android发送/接收Json包含中文的处理
    android 获取 imei号码 及相关信息
    RelativeLayout常用属性介绍
    Android之读取 AndroidManifest.xml 中的数据
    Java中int与Integer
    Handler sendMessage 与 obtainMessage (sendToTarget)
  • 原文地址:https://www.cnblogs.com/yanduanduan/p/12038490.html
Copyright © 2011-2022 走看看