构建自己的docker镜像

程序猿欧文 2021-01-23 16:05:47
docker 其他 镜像 构建 开源中国


今天玩一下怎么构建一个我们自己的docker镜像,然后我们试试将本地的springboot项目打包成一个镜像,然后发送到远程服务器的docker中,最后我们运行这个docker镜像成功访问;

提前须知:要知道docker的基本操作,怎么拉取镜像,启动容器;还有云服务器是centos7

 

1.手动构建一个jdk8的镜像

我们知道docker的每一个镜像其实就是一个单独的linux操作系统,只不过不同的镜像里面装的软件不一样;

所以我们要怎么做一个自己的镜像呢?肯定不可能先去做一个linux操作系统的镜像吧,这也太坑爹了.....

解决方案是我们在做一个自己的镜像的时候,需要依赖一个linux镜像,就像一个类一样,你需要继承一个父类之后你就拥有了父类的所有功能,然后只需要专注于开发自己的功能就好;

所以自己做镜像的本质就是我们在linux镜像的基础上,我们给它安装一点东西,然后再打包成一个镜像,就行了,很容易;

 

1.1.准备

首先准备jdk8的安装包和一个文件名为docker_jdk8的文件,这个文件名可以随意

 

然后docker拉取一个centos7的镜像:docker pull centos:7

 

1.2 编写docker_jdk8文件

这个docker_jdk8其实就是一个dockerfile的文件,主要是一些特殊的关键字+linux命令,关键字如下所示:

 

编写文件,注意安装包的名字和解压之后的名字

#依赖的镜像名称和版本号FROM centos:7#指定镜像创建者信息,这里可以随意写MAINTAINER java小新人#切换工作目录,这里就是当你一进入容器所在的目录WORKDIR /usr#创建一个目录RUN mkdir /usr/local/java#把jdk压缩包添加到容器中并解压ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/#配置java环境变量ENV JAVA_HOME /usr/local/java/jdk1.8.0_171ENV JRE_HOME $JAVA_HOME/jreENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATHENV PATH $JAVA_HOME/bin:$PATH

 

文件写完之后,使用命令打包镜像:docker build -f ./docker_jdk8 -t myjdk1.8:1.0 .     -f表示要执行的dockerfile文件路径,-t表示打包后的镜像名,冒号后面表示我们镜像的版本

 

查看镜像,可以看到我们自己的镜像已经做出来了;

可以使用命令:docker run -it myjdk1.8 /bin/bash    进入容器看看jdk是否配置成功(注意,使用这个命令进入容器的话,每一次都会创建一个新的容器,你可以先启动,然后使用docker exec -it 容器id /bin/bash进入容器)

 

 

 

2.搭建私有仓库

我们创建了这么厉害的一个jdk8的镜像,我们不能一个人默默的使用,肯定需要我们的小伙伴也能用一下,快乐是要分享的嘛( ̄▽ ̄)ノ

而且总不能我们换了一台服务器都需要这样手动的构建这个镜像吧,这种重复的工作我们可是不想去干的;

所以我们需要弄一个私有仓库,将我们做出来的镜像丢到私有仓库中,然后小伙伴想用可以直接去拉取就行了;

2.1 拉取私有仓库镜像

私有仓库本质上也是一个docker镜像,我们使用命令:docker pull registry

 

  2.2.修改docker配置文件

使用命令:vim /etc/docker/daemon.json

这里配置的第一个是docker的源,提高下载速度;第二个就是配置私有仓库地址,填入你的ip,让docker信任你的私有仓库

注意,私有仓库的端口是5000端口,等下我们启动私有仓库容器的时候会用到这个端口的;

{ "registry-mirrors": [ "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn" ], "insecure-registries":["你的本机ip:5000"]}

 

2.3 使用私有仓库

因为改了配置文件,首先我们需要重启docker:systemctl restart docker

然后启动私有仓库容器:docker run -id --name registry -p 5000:5000 registry

注意,绑定的5000端口哦!!!

然后根据下面这个路径访问能看到这个就是成功了!

 

  2.4. 上传镜像

将前面我们做的jdk8的镜像放到这个私有仓库里面;

首先必须标记一下我们的镜像:docker tag myjdk1.8:1.0 106.52.104.190:5000/myjdk1.8:1.0    

 

 

注意,后面的这个名字是你linux服务器的ip地址加上私有仓库的端口,标记的作用,你可以看做可以更好区分私有仓库镜像和从公有仓库拉取的镜像,名字必须要是这样的格式,后面的推送就是根据这个名字的ip和端口进行推送到私有仓库的

 

然后将这标记的镜像给推送到私有仓库:docker push 106.52.104.190:5000/myjdk1.8:1.0   

我们查看一下私有仓库中的镜像:

 

 3.sprignboot项目配置docker

服务器部署java项目的方式很多种:

最开始在服务器部署javaweb项目,首先安装tomcat,配置环境变量,然后将我们的项目打成war包丢到tomcat中的webapp中,启动tomcat,就可以访问了

后来使用了springboot之后,我们可以将springboot项目打包成一个jar包,然后使用nohup java -jar app.jar & 这种方式运行一个项目,就可以访问了;

然后用了docker之后,我们不需要手动安装tomcat了,可以直接使用tomcat镜像,启动容器,然后将容器中tomcat的webapp目录挂载到宿主机上的xxx目录,我们只需要将项目war包丢到宿主机的xxx目录,然后启动tomcat容器就可以访问了

但是上面这种方式还是需要我们去手动打war包,丢到服务器上,很繁琐,我们还可以进行简化一下:在springboot项目中配置docker插件,我们只需要输入打包命令,就可以将项目打包成一个docker镜像,上传到docker私有仓库中,其他人也可以在这个私有仓库中拉取这个镜像启动容器;

3.1 准备

首先,我们随便创建一个springboot项目

 

3.2 在pom.

我们看看pom.

<??><project ="http://maven.apache.org/POM/4.0.0" =.........
版权声明
本文为[程序猿欧文]所创,转载请带上原文链接,感谢
https://my.oschina.net/mikeowen/blog/4921647

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云