文件目录

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

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

# Dockerfile

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

# docker_run.sh

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

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

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

  1. chmod +x docker_run.sh
  2. chmod +x gin_test

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

格式化命令如下

  1. # vim打开sh文件
  2. vim docker_run.sh
  3.  
  4. # 输出
  5. :set fileformat=unix

链接

执行sh文件

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

输出如下

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

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

docker 编译开发代码做镜像的更多相关文章

  1. Android 开发怎样做代码加密或混淆?

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 在大公司怎么做android代码混淆的?发现他们的软件用apktool反编译居然没看到classes.dex文件和当前安卓APP加固到底该如何做到防 ...

  2. 【转载】使用Docker Hub官方gcc:latest镜像编译C/C++程序以及缩小镜像的方法

    摘要:使用Docker Hub官方gcc:latest镜像(1.2GB)编译C/C++程序,以及缩小镜像的方法. 方法1: 在gcc容器里编译C/C++程序 将C/C++代码运行在gcc容器内的最简单 ...

  3. 几款比较好用的C语言的集成开发环境及在windows下用命令行编译C代码

    最近要用到C,所以尝试了这几款windows平台下比较好的IDE. VS2015:比较复杂和庞大,据说从2013版本开始支持C99标准. C-free:轻巧,但是不支持C99. vc++6.0:很多学 ...

  4. [译]如何使用 Docker 组件开发 Django 项目?

    原文地址:Django Development With Docker Compose and Machine 以下为译文 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包 ...

  5. Docker详细介绍安装与镜像制作和拉取

    一.Docker是什么? 产生背景: 开发和运维之间因为环境不同和导致的矛盾(不同的操作系统.软件环境.应用配置等)DevOps 代码.系统.环境.配置等封装成镜像Image--->运维: 集群 ...

  6. Docker学习笔记之从镜像仓库获得镜像

    0x00 概述 之前我们说到了,Docker 与其他虚拟化软件的一处不同就是将镜像管理纳入到了功能之中.实现虚拟化只是程序能够无缝移植的一部分,而有了镜像管理,就真正取代了我们在移植过程中的繁琐操作. ...

  7. 如何使用URLOS进行docker应用开发

    使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力.在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如今在微服务架构越来越流行的情况下,微服务+Docker的完 ...

  8. [转]利用Docker构建开发环境

    利用Docker构建开发环境 Posted by  makewonder on 2014 年 4 月 2 日   最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境, ...

  9. 利用Docker构建开发环境

    最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境,感觉生活在PAAS时代的程序员真是幸福,本文会简要介绍下Docker是什么,如何利用Docker来搭建自己的开发环 ...

随机推荐

  1. mysql简介/安装以及破解密码等

    1.什么是数据库: 数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的 过去人们将数据存放在文件柜里,现在数据量庞大,已经不再适用 数据库是长期存放在计算机内.有 ...

  2. webservice入门程序学习中经验总结

    ***第一步:创建客户端服务 1)创建一个服务接口 2)创建一个实现类实现接口 3)创建一个方法开启服务 这三步注意点:::实现类上必须添加@WebService标签 :::发布服务的时候用到的函数是 ...

  3. javaee验证码如何使用

    首先需要导入jar包 ValidateCode.jar 110   25  为验证码框的大小  4为验证码数目 9为干扰线条数 Servlet代码如下 运行截图如下

  4. django Field选项中null和blank的区别

    blank只是在填写表单的时候可以为空,而在数据库上存储的是一个空字符串:null是在数据库上表现NULL,而不是一个空字符串: 需要注意的是,日期型(DateField.TimeField.Date ...

  5. mysql表关联问题(第二卷:外键1对多之2)

    接着上一卷内容我们继续: 上卷我用的查询语句我们可以看到全部数据,很明显这样的方式查找的数据并不详细: SELECT * FROM usr LEFT JOIN fzu ON usr.fzu = fzu ...

  6. 快速搭建本地Nuget服务

    一  创建Nuget 服务项目 1.创建一个空白的asp.net web项目,需要.net 4.6以上 2.在Nuget中搜索 nuget.server ,可以看到是由 .Net 基金再维护的,几乎傻 ...

  7. LibreOJ β Round #2」贪心只能过样例

    题目友链:https://loj.ac/problem/515 话说这题蛮简单,bitset暴力直接过. 话不多说,上代码! #include <bits/stdc++.h> using ...

  8. java 通过数据库名获得 该数据所有的表名以及字段名、字段类型

    package com.nf.lc.sql_meta_data; import java.sql.*; import java.util.HashMap; import java.util.Map; ...

  9. Django中加载static无法成功的解决方法

    我试着进入/admin/ 结果它的/static/ 能够正常找到目标文件…真是日了哈*奇了. 我的link标签href=/static/…. 并没有什么问题 试着在urls中加入下面代码,但是没什么用 ...

  10. Java的锁机制--synchronsized关键字

    引言 高并发环境下,多线程可能需要同时访问一个资源,并交替执行非原子性的操作,很容易出现最终结果与期望值相违背的情况,或者直接引发程序错误. 举个简单示例,存在一个初始静态变量count=0,两个线程 ...