手动构建自己的docker容器镜像实战

目录
  • 前言
  • 一. 设置docker构建镜像的环境
    • 1.1 commit 命令的介绍
    • 1.2 创建一个tomcat容器
  • 二. 开始构建自己的镜像
    • 2.1 查看容器的ID
    • 2.2 使用命令docker commit 生成该容器的镜像,并保存在本地
  • 三. 上传镜像到镜像仓库
    • 3.1 登录docker hub
    • 3.2 创建镜像
    • 3.3 上传到镜像仓库

前言

之前的实战中,我们实战中,我们使用的镜像都是镜像仓库已有的镜像。 已有的镜像都是别人已经开发好上传的。今天我们一起来看看如何构建自己的镜像并上传到镜像仓库中。

一. 设置docker构建镜像的环境

  • 使用docker commit命令进行镜像的构建

1.1 commit 命令的介绍

我们执行 docker help commit来查看:

[root@mufeng63 ~]# docker help commit

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

Create a new image from a container's changes

Aliases:
  docker container commit, docker commit

Options:
  -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
  -c, --change list      Apply Dockerfile instruction to the created image
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)
[root@mufeng63 ~]#

1.2 创建一个tomcat容器

  • 拉取Tomcat的镜像
[root@mufeng63 ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

[root@mufeng63 ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
0e29546d541c: Pull complete
9b829c73b52b: Pull complete
cb5b7ae36172: Pull complete
6494e4811622: Pull complete
668f6fcc5fa5: Pull complete
dc120c3e0290: Pull complete
8f7c0eebb7b1: Pull complete
77b694f83996: Pull complete
0f611256ec3a: Pull complete
4f25def12f23: Pull complete
Digest: sha256:9dee185c3b161cdfede1f5e35e8b56ebc9de88ed3a79526939701f3537a52324
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
[root@mufeng63 ~]#
  • 基于Tomcat的镜像创建容器
[root@mufeng63 ~]# docker run  --name mytomcat -d -p 8080:8080 tomcat
1f5bd6dcca0a614ec047bf3882e3fe2e4cdb17b7f343d7834145b17d1fc3c3c3
[root@mufeng63 ~]#
  • 在Tomcat中部署一个简单的页面

如果不创建页面,直接访问Tomcat是会报错的,所以这里需要手动创建一个web测试页面:

//查看正在运行的容器
[root@mufeng63 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND             CREATED          STATUS          PORTS                                       NAMES
1f5bd6dcca0a   tomcat    "catalina.sh run"   53 seconds ago   Up 52 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   mytomcat

// 登录Tomcat容器
[root@mufeng63 ~]# docker exec -it 1f5bd6dcca0a /bin/bash

root@1f5bd6dcca0a:/usr/local/tomcat# ls
BUILDING.txt	 LICENSE  README.md	 RUNNING.txt  conf  logs	    temp     webapps.dist
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin	      lib   native-jni-lib  webapps  work

// 创建web测试目录
root@1f5bd6dcca0a:/usr/local/tomcat# mkdir webapps/mufeng_demo
//创建index.html
root@1f5bd6dcca0a:/usr/local/tomcat# echo "<h1>This is mufenggrow </>" > webapps/mufeng_demo/index.html
root@1f5bd6dcca0a:/usr/local/tomcat#
  • 浏览器访问测试:
    使用ip+端口号/mufeng_demo/index.html进行访问:

二. 开始构建自己的镜像

2.1 查看容器的ID

先要确定自己要基于哪个容器生成镜像, 这里我们用Tomcat的容器来构建:

[root@mufeng63 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND             CREATED          STATUS          PORTS                                       NAMES
1f5bd6dcca0a   tomcat    "catalina.sh run"   19 minutes ago   Up 19 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   mytomcat
[root@mufeng63 ~]#

可以确定该容器的ID是1f5bd6dcca0a

2.2 使用命令docker commit 生成该容器的镜像,并保存在本地

[root@mufeng63 ~]# docker commit 1f5bd6dcca0a mufeng_tomcat
sha256:3dbdf1f915ac9cc3210fb0e77d9f5d93f24064ac604cf12d24f602693396eed3
[root@mufeng63 ~]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
mufeng_tomcat   latest    3dbdf1f915ac   9 seconds ago   680MB
tomcat          latest    fb5657adc892   15 months ago   680MB
[root@mufeng63 ~]#

执行完成后,看到多了一个mufeng_tomcat 的镜像。

三. 上传镜像到镜像仓库

3.1 登录docker hub

docker hub的官网地址: https://hub.docker.com/

  • 注册:

  • 创建存储库

你可以手动创建存储库,当然也可以不创建,我们这里默认是不创建的,上传的时候直接用mufenggrow/ 即可

3.2 创建镜像

如果要上传到镜像仓库中,需要在镜像名称前加上仓库的路径信息:

[root@mufeng63 ~]# docker commit 1f5bd6dcca0a mufenggrow/mufeng_tomcat
sha256:dc9420341e4bd06cdd7dc5881220481c9dbe8faf4d548356c6dbab265a36416b
[root@mufeng63 ~]# docker images
REPOSITORY                 TAG       IMAGE ID       CREATED          SIZE
mufenggrow/mufeng_tomcat   latest    dc9420341e4b   5 seconds ago    680MB
mufeng_tomcat              latest    3dbdf1f915ac   16 minutes ago   680MB
tomcat                     latest    fb5657adc892   15 months ago    680MB

3.3 上传到镜像仓库

  • 使用docker login 登录
[root@mufeng63 ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: mufenggrow
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@mufeng63 ~]#
  • 开始上传
[root@mufeng63 ~]# docker push mufenggrow/mufeng_tomcat
Using default tag: latest
The push refers to repository [docker.io/mufenggrow/mufeng_tomcat]
66f50273e519: Pushed
3e2ed6847c7a: Mounted from library/tomcat
bd2befca2f7e: Mounted from library/tomcat
59c516e5b6fa: Mounted from library/tomcat
3bb5258f46d2: Mounted from library/tomcat
832e177bb500: Mounted from library/tomcat
f9e18e59a565: Mounted from library/tomcat
26a504e63be4: Mounted from library/tomcat
8bf42db0de72: Mounted from library/tomcat
31892cc314cb: Mounted from library/tomcat
11936051f93b: Mounted from library/tomcat
latest: digest: sha256:4a696362a8586173d7f0f9b12eef1354060d10746796e59519ed083fe0acd5f8 size: 2630
[root@mufeng63 ~]#
  • 到网页端查看

  • 下载测试

先删除系统中已经有的包:

[root@mufeng63 ~]# docker rmi mufenggrow/mufeng_tomcat:latest
Untagged: mufenggrow/mufeng_tomcat:latest
Untagged: mufenggrow/mufeng_tomcat@sha256:4a696362a8586173d7f0f9b12eef1354060d10746796e59519ed083fe0acd5f8
Deleted: sha256:dc9420341e4bd06cdd7dc5881220481c9dbe8faf4d548356c6dbab265a36416b
Deleted: sha256:6d5bd3130a0c60a6075e5856fa11c8acfdab7a2252360a6fbeabdef1f83fc526
[root@mufeng63 ~]# docker rmi mufeng_tomcat
Untagged: mufeng_tomcat:latest
Deleted: sha256:3dbdf1f915ac9cc3210fb0e77d9f5d93f24064ac604cf12d24f602693396eed3
Deleted: sha256:ea120c9388c452a6f215f1761b5981e40370e74b68d1886237e0931ce33a45f3
[root@mufeng63 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
tomcat       latest    fb5657adc892   15 months ago   680MB
[root@mufeng63 ~]#

下载镜像包

[root@mufeng63 ~]# docker search mufenggrow/mufeng_tomcat
NAME                       DESCRIPTION   STARS     OFFICIAL   AUTOMATED
mufenggrow/mufeng_tomcat                 0
[root@mufeng63 ~]# docker pull mufenggrow/mufeng_tomcat
Using default tag: latest
latest: Pulling from mufenggrow/mufeng_tomcat
0e29546d541c: Already exists
9b829c73b52b: Already exists
cb5b7ae36172: Already exists
6494e4811622: Already exists
668f6fcc5fa5: Already exists
dc120c3e0290: Already exists
8f7c0eebb7b1: Already exists
77b694f83996: Already exists
0f611256ec3a: Already exists
4f25def12f23: Already exists
5a8cdbad1b10: Pull complete
Digest: sha256:4a696362a8586173d7f0f9b12eef1354060d10746796e59519ed083fe0acd5f8
Status: Downloaded newer image for mufenggrow/mufeng_tomcat:latest
docker.io/mufenggrow/mufeng_tomcat:latest
[root@mufeng63 ~]# docker images
REPOSITORY                 TAG       IMAGE ID       CREATED          SIZE
mufenggrow/mufeng_tomcat   latest    dc9420341e4b   24 minutes ago   680MB
tomcat                     latest    fb5657adc892   15 months ago    680MB
[root@mufeng63 ~]#

可以看到,我们自己构建的镜像,已经可以下载了。

以上就是手动构建自己的docker容器镜像实战的详细内容,更多关于构建docker容器镜像的资料请关注我们其它相关文章!

(0)

相关推荐

  • docker实践之从新镜像启动容器报错解决

    按照书中所写,输入以下命令: $ sudo docker run -d -p 80 --name static_web yorkz0909/static_web \ nginx -g "daemon off;" 来启动新的容器,容器貌似启动了,但是会报以下错误: 35b5d1f047a51373ca71190b0eed504ba0540c32427f4637b967c7b4ad7fa217 docker: Error response from daemon: invalid head

  • 使用Docker将容器打成镜像的方法步骤

    目录 前言 1. 容器打成镜像 过程示例 2. 镜像打包 前言 工作中遇到三方闭源的中间件运行起来某项特性不符合需求,但是镜像提供方偏偏又没有将配置文件挂载出来以供修改,这就导致要使软件符合需求地运行只能进入到容器内部修改配置文件后重启,可谓非常之蛋疼.笔者平时对 Docker 接触不多,好在有同事提到 Docker 支持将运行中的容器重新打包为镜像,于是网上搜索资料,大致整理出以下步骤解决上面的问题,故有本文聊作记录 进入运行中的容器修改其配置文件,修改完成后重启容器 将已经修改过配置文件的容

  • Docker镜像与容器的导入导出以及常用命令总结

    目录 前言 一.Docker 镜像和容器的导入导出 1.1.镜像的导入导出 1.1.1.镜像的保存 1.1.2.镜像的导入 1.2.容器的导入和导出 1.2.1.容器的导出 1.2.2.容器包的导入 二.Docker 常用命令 总结 前言 大家好,本文是对 Docker 的镜像和容器的一些操作指令的汇总,比如镜像和容器的导入导出,以及一些在使用过程中的常用命令.希望对大家有所帮助~ 一.Docker 镜像和容器的导入导出 1.1.镜像的导入导出 1.1.1.镜像的保存 通过镜像ID保存 方式一:

  • docker容器详细讲解如何精简镜像减小体积

    目录 一.减少镜像层数 1.指令合并 2.多阶段构建 3.启用squash特性 二.缩减容量 1. 选择小的基础镜像 2.上下文管理 3.及时清理下载 精简镜像我们可以从两个方面切入: 减少镜像层数 缩减容量 一.减少镜像层数 1.指令合并 Dockerfile 中的每条指令都将创建一个层,不过查看官方文档中最佳实践有这样一句话: In older versions of Docker, it was important that you minimized the number of laye

  • docker中修改镜像容器的存放目录的方法

    最近在学习docker的路上,今天遇到了个问题,在网上查找了一下资料,顺便留个笔记 在默认情况下,Docker镜像和容器的默认存放位置为: /var/lib/docker 一般根下分区我们不会给太大.镜像和容器越存越多一般我们有两种解决方法: 1. 挂载大分区到/var/lib/docker 一般选择建立逻辑分区lvm,方便后期扩展集体. 建立新分区,并格式化 [root@localhost lib]# lvcreate -L 300G lv_docker vg_home [root@local

  • 修改Docker默认镜像和容器的存储位置的方法

    本文介绍了修改Docker默认镜像和容器的存储位置的方法,分享给大家,具体如下: 一.Why Docker默认的镜像和容器存储位置在/var/lib/docker中,如果仅仅是做测试,我们可能没有必要修改,但是当大量使用的时候,我们可能就要默认存储的位置了. 二.How 2.1 修改docker.service文件 cd /etc/systemd/system/multi-user.target.wants vim docker.service ExecStart=/usr/bin/docker

  • 手动构建自己的docker容器镜像实战

    目录 前言 一. 设置docker构建镜像的环境 1.1 commit 命令的介绍 1.2 创建一个tomcat容器 二. 开始构建自己的镜像 2.1 查看容器的ID 2.2 使用命令docker commit 生成该容器的镜像,并保存在本地 三. 上传镜像到镜像仓库 3.1 登录docker hub 3.2 创建镜像 3.3 上传到镜像仓库 前言 之前的实战中,我们实战中,我们使用的镜像都是镜像仓库已有的镜像. 已有的镜像都是别人已经开发好上传的.今天我们一起来看看如何构建自己的镜像并上传到镜

  • Docker容器镜像相关命令基本介绍与使用

    目录 一.Docker 介绍 1.Docker 架构 2.Docker 三大核心 二.Docker 安装 1.下载 Docker 软件包 1)安装基础包 2)配置 Docker 的 yum 源 3)安装 Docker 4)启动 Docker 并验证 5)配置 Docker 加速器 2.Docker 基础命令介绍 1)镜像相关命令 2)容器相关命令 3.使用 Docker 实现 Nginx 网站 一.Docker 介绍 Docker 是一个用于开发.发布和运行应用程序的开放平台.Docker 可以

  • Docker容器镜像加载及底层基本原理深入解析

    目录 前言 一.Docker run 二.Docker底层原理 1.Docker是怎么工作的 2.为什么Docker比虚拟机快 三.Docker镜像 1.镜像 2.联合文件系统UnionFS 3.Docker镜像的加载原理 4.Docker镜像分层理解 四.Docker容器 五.Docker镜像与容器的形象比喻 前言 回想上学的时候,某老师神采奕奕的讲解着操作系统某个知识点原理,可谓是激情澎湃,我环顾周围基友们,脸上懵逼两字清晰可见,毫不含糊,恍然大悟原来是在讲天书.为了不让大家脸上呈现懵逼二字

  • 详解在Docker容器中运行Spring Boot应用

    spring Boot简化了Spring应用的开发过程,遵循约定优先配置的原则提供了各类开箱即用(out-of-the-box)的框架配置.另一方面,Spring Boot还具备将代码直接构建为可执行jar包的能力,这个jar包是一个可以独立运行的部署单元.基于以上特性,现在普遍认为Spring Boot提供了一种快速构造微服务(Micro-Service)的能力. Docker与Spring Boot Docker是一种Linux容器的实现,Linux容器是基于进程的轻量级资源隔离技术,每一个

  • 详解docker容器的层的概念

    今天我们看看容器的层的概念. 上一节中,我们知道了,容器是一个进程,在这个进程的基础上,添加了下面3个部分: 1.启动Linux Namespace的配置实现与物理机的隔离. 2.设置Cgroups参数限制容器的资源. 3.生成系统文件目录,也就是rootfs文件,也叫镜像文件 这里需要备注的是:rootfs只是容器需要使用的基本文件的组合,并不包括操作系统内核,容器的操作系统内核依旧是使用宿主机的内核.当然,rootfs的存在,并不是没有意义,它的存在,使得容器拥有了一个最主要的性能:一致性.

  • docker 手动构建新镜像的方法

    本文介绍了docker 手动构建新镜像的方法,分享给大家,具体如下: 查看本地现有镜像: [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest c59f17fe53b0 4 days ago 108MB ubuntu latest 747cb2d60bbe 3 weeks ago 122MB centos latest 196e0ce0c9fb 6 weeks ago 197MB 现在利用

  • Docker容器实战之镜像仓库

    目录 一.  镜像仓库 1. 账号注册 2. 创建仓库 二. 上传镜像 一.  镜像仓库 Registry是Docker公司的一项创新,它提供了存放镜像的仓库服务.在构建好镜像后,我们通常会将镜像上传到Registry服务器上进行保存.这样可以保证不会因本机故障而导致镜像丢失,同时,其他机器也能很方便地通过网络方式下载. Docker Hub即为Docker官方的Registry服务器,它的访问地址为 https://hub.docker.com .我们总是习惯将Registry称为仓库,但事实

  • Docker进阶之构建自定义镜像实战指南

    目录 一.什么是 Docker 镜像? 二.自定义镜像的好处? 三.构建自己的Centos 四.RUN.CMD和ENTRYPOINT的区别 五.[实战]Dockerfile制作tomcat镜像 小结 一.什么是 Docker 镜像? Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷.环境变量.用户等).镜像不包含任何动态数据,其内容在构建之后也不会被改变. 镜像是Docker容器的基石,容器是镜

  • Docker容器实战之镜像与容器的工作原理

    目录 一. bootfs和rootfs 二. 镜像结构 三. 容器层 四. 联合文件系统​ 一. bootfs和rootfs 通常而言,Linux的操作系统由两类文件系统组成:bootfs(boot file system)和rootfs(root file system),它们分别对应着系统内核与根目录文件.bootfs层主要为系统内核文件,这层的内容是无法修改的.当我们的系统在启动时会加载bootfs,当加载完成后整个内核都会存到内存中,然后系统会将bootfs卸载掉.而rootfs层则包含

  • Docker Compose快速部署多容器服务实战的实例详解

    目录 1 什么是Docker Compose 2 安装Docker Compose 3 Docker Compose文件格式的简单介绍 4 Docker Compose常用命令 5 使用Docker Compose一键部署Spring Boot+Redis实战 5.1 构建应用 5.1.1 Spring Boot项目 5.1.2 Redis配置文件 5.2 打包应用并构建目录 5.2.1 打包Spring Boot项目 5.2.2 上传redis.conf配置文件 5.3 编写Dockerfil

随机推荐