我们可以通过公共仓库拉取镜像使用,但是,有些时候公共仓库拉取的镜像并不符合我们的需求。尽管已经从繁琐的部署工作中解放出来了,但是在实际开发时,我们可能希望镜像包含整个项目的完整环境,在其他机器上拉取打包完整的镜像,直接运行即可。

​ Docker 支持自己构建镜像,还支持将自己构建的镜像上传到公共仓库,镜像构建可以通过以下两种方式来实现:

  • docker commit:从容器创建一个新的镜像;
  • docker huild:配合 Dockerfile 文件创建镜像;

示例:通过 docker commit 来实现镜像的构建,通过基础镜像 centos:7,将 jdk 和 Tomcat 安装在该镜像中制作成一个新的镜像。

1、创建容器

# 拉取镜像
docker pull centos:7 # 创建容器
docker run -id --name centos7 centos:7

2、拷贝资源

将宿主机的 jdk 和Tomcat 拷贝到容器

docker cp jdk-11.0.7_linux-x64_bin.tar.gz centos7:/root
docker cp apache-tomcat-9.0.39.tar.gz centos7:/root

3、安装资源

# 进入容器
docker exec -it centos7 /bin/bash

在容器中执行以下操作:

# 切换到 /root 目录
cd root/ # 创建 Java 和 Tomcat 目录
mkdir -p /usr/local/java
mkdir -p /usr/local/tomcat # 将 jdk 和 Tomcat 解压到容器的 Java 和 Tomcat 目录中
tar -zxvf jdk-11.0.6_linux-x64_bin.tar.gz -C /usr/local/Java/
tar -zxvf apache-tomcat-9.0.39.tar.gz -C /usr/local/tomcat/ # 在环境变量文件中添加以下内容
export JAVA_HOME=/usr/local/java/jdk-11.0.6/
export PATH=$PATH:$JAVA_HOME/bin # 重新加载环境变量文件
source /etc/profile # 测试环境变量是否配置成功
[root@f1cd1a3df1ed etc]# java -version
java version "11.0.7" 2020-04-14 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.7+8-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.7+8-LTS, mixed mode)

4、构建镜像

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

docker commit -a="xiaoyang" -m="jdk11 and tomcat" centos7 mycentos:7
  • -a:提交的镜像作者;
  • -c:使用 Dockerfile 指令来创建镜像;
  • -m:提交时的说明文字;
  • -p:在 commit 时,将容器暂停;

5、使用构建的镜像创建容器

# 创建容器
docker run -id --name mycentos7 -p 8080:8080 mycentos:7 # 进入容器
docker exec -it mycentos7 /bin/bash # 重新加载配置文件
source /etc/profile # 测试 Java 环境变量
[root@7ed6a969f63a /]# java -version
java version "11.0.7" 2020-04-14 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.7+8-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.7+8-LTS, mixed mode) # 启动 Tomcat
/usr//local/tomcat/apache-tomcat-9.0.39/bin/startup.sh

最新文章

  1. Apache 配置虚拟主机三种方式
  2. redis 快速入门(win7)
  3. WPF:设置MenuItem多种不同状态图标
  4. Android IOS WebRTC 音视频开发总结(七二)-- 看到Google Duo,你想到了什么?
  5. html5 requestAnimationFrame制作动画:旋转风车
  6. 扩展KMP题目
  7. vb中的null.nothing.empty区别
  8. 详解Android ActionBar之二:ActionBar添加Tabs标签和下拉导航
  9. office web apps server 问题和解决办法
  10. MYSQL区分大小写
  11. java Script 中的keyCode 和charCode
  12. win32 sdk绘制ListBox控件
  13. Private和Protected方法
  14. 如何将Windows7系统中“运行”历史记录全部清除
  15. 接口自动化测试:python+json+requests+数据驱动
  16. php进阶篇
  17. mssql sqlserver 指定特定值排在表前面
  18. c/c++ 继承与多态 静态调用与动态调用
  19. jenkins结合svn检测版本变化执行shell脚本实现项目部署
  20. vue插件 使用use注册Vue全局组件和全局指令

热门文章

  1. bool 类型位逻辑运算符(| & ^)与条件逻辑运算符(|| &&)的区别
  2. Oracle的发展历程
  3. rlwrap的使用
  4. linux下确认裸盘是否使用-渐入佳境
  5. OA办公软件篇(一)—组织架构
  6. 基于NopCommerce框架开发的微信小程序UrShop
  7. 实践2:如何使用word2vec和k-means聚类寻找相似的城市
  8. keepalived yum安装后启动报错解决
  9. LGP7890题解
  10. Linux特殊权限之suid、sgid、sbit权限