zoukankan      html  css  js  c++  java
  • docker 编译开发代码做镜像

    文件目录

    Dockerfile 是docker制作镜像的文件,docker_run.sh是sh文件,gin_test是go编译之后的linux可执行程序,gintest.env是配置文件夹

    首先写一个Dockerfile的文件 用来执行build 编译为镜像

    # Dockerfile

    # 下载基础镜像 这相当于电脑windows系统 所有一切都要在该系统上操作
    FROM ubuntu:latest
    
    
    # WORKDIR 指定容器中的工作目录,默认文件都是在哪保存执行
    # WORKDIR /webapp/
    
    
    # 暴露镜像的端口供主机做映射,不过一般都是直接docker run ... -p 宿主机端口:容器端口  ... 设置了  可以设置多个
    EXPOSE 7999
    EXPOSE 8888
    
    
    # COPY 将主机的文件复制到镜像内      其中ADD和COPY一样 但是ADD会对压缩文件(tar, gzip, bzip2, etc)做提取和解压操作
    # COPY如果目的位置不存在,Docker会自动创建所有需要的目录结构,但是它只是单纯的复制,并不会去做文件提取和解压工作
    COPY gin_test .
    COPY gintest.env .
    
    
    
    # VOLUME 用来向基于镜像创建的容器添加卷。
    # 比如你可以将mongodb镜像中存储数据的data文件指定为主机的某个文件。(容器内部建议不要存储任何数据)
    # VOLUME 主机目录 容器目录
    # VOLUME /data/db /data/configdb
    
    
    # 镜像内部的执行... 下载数据软件等...           并不是在宿主机上执行 而是到镜像中执行的命令
    # 比如这些命令RUN、COPY、ADD、EXPOSE、WORKDIR、ONBUILD、USER、VOLUME
    # 容器内部执行apt更新
    # RUN ["apt-get" "update"]
    
    
    # 容器启动时执行指令 ENTRYPOINT
    # CMD docker run -it -d -p 7999:7999 ubuntu

    # docker_run.sh

    #!/bin/bash
    # docker build 根据当前目录的Dockerfile文件内容制作镜像 . 代表当前目录(可以绝对路径)  -t表示设置镜像名字
    docker build -t myweb .
    
    # 加载镜像启动容器 根据镜像名字设置启动模式 -itd 表示后台命令行模式... -p在宿主机和容器开启的端口连接一起
    # /bin/bash 表示在容器内部执行一些命令但不进入 -c 如果需要找容器内部执行命令 必须有-c 后面这是执行命令 启动容器内复制过去的./gin_test
    docker run -itd -p 1111:7999 --name="myweb_docker_one" myweb /bin/bash -c ./gin_test
    
    # 展示docker容器的执行状况
    docker ps
    
    
    
    # 持续监控docker容器内部的输出日志 -t 监控日志 --tail 只显示多少条
    # docker logs -t --tail=20 myweb_docker_one
    
    # 进入容器内部 docker exec -it 容器名字 bash 执行命令行模式 如何有其他需求可以进入内部执行,不过一般都在创建容器阶段执行了
    # docker exec -it myweb_docker_one bash
    
    # 进入容器内部执行 接上面的命令
    # ./gin_test

    将工作目录的四个文件拉取到linux服务器上,最好同一个目录

     注意 docker_run.sh 和gin_test 需要进行添加执行权限

    chmod +x docker_run.sh
    chmod +x gin_test

    还有如果sh文件在win上写的,在linux上执行需要转换格式,不然出错

     格式化命令如下

    # vim打开sh文件
    vim docker_run.sh
    
    # 输出
    :set fileformat=unix

    链接

    执行sh文件

    # 已输出每行命令的格式执行
    
    bash -x docker_run.sh

    输出如下

    测试能否外部访问内部web程序

    能看到访问该服务器宿主机ip和端口能访问到 容器内的web程序

  • 相关阅读:
    【巨杉数据库SequoiaDB】巨杉Tech | 四步走,快速诊断数据库集群状态
    【巨杉数据库SequoiaDB】巨杉Tech | 巨杉数据库数据高性能数据导入迁移实践
    【巨杉数据库SequoiaDB】SequoiaDB 巨杉数据库 v3.4 版本正式发布
    【巨杉数据库Sequoiadb】巨杉⼯具系列之一 | ⼤对象存储⼯具sdblobtool
    easynetq发布订阅demo实现注意事项
    C#的排序Sort和OrderBy扩展方法
    程序员,不要急于学习编程语言,先学会如何解决问题(转)
    .Net异步关键字async/await的最终理解
    浅谈C#常用集合类的实现以及基本操作复杂度
    C# SortedDictionary以及SortedList的浅谈
  • 原文地址:https://www.cnblogs.com/zengxm/p/11538266.html
Copyright © 2011-2022 走看看