Docker Base Image自己创建具体实现

Docker Base Image 创建

本着学习的态度,想了解创建 Docker Base Image的方法,在官网,在百度,在相关论坛,查找相关资料,这里记录下实现的步骤,

一. 环境

宿主机操作系统: OS X  ,需要安装VirtualBox  ;
容器环境:centos7

二. 用VirtualBox 安装系统,这里以centos 7为例(CentOS-7-x86_64-Minimal-1503-01.iso)

创建虚拟机,并安装centos7,以下记录了详细安装过程。

* 安装过程简单,我这里网速太慢了,就不上图了,有需要的朋友留个邮箱,我发pdf。*

安装完后,重启后进入系统。

三. 修改网络配置

修改网络配置 /etc/sysconfig/network-script/ifcfg-enp0s3。
删除 UUID,HWADDR ;
修改ONBOOT=no 为 ONBOOT=yes , 然后保存 。

$ ifconfig
Cannot find a valid baseurl for repo: base/7/x86_6

重启网络接口:
[root@centos7 ~]#ifdown enps03
[root@centos7 ~]#ifup enps03

$ yum install ifconfig
 提示:Nothing to do
 通过” yum provides” 命令列出那个包提供ifconfig命令
$ yum provides ifconfig
// 安装
$ yum -y install net-tools

四. 安装Docker

安装 EPEL (参考:http://www.tecmint.com/how-to-enable-epel-repository-for-rhel-centos-6-5/ )
[root@centos7 ~]# rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

修改/etc/yum.repos.d/CentOS-Base.repo 把enabled=0 改成enabled=1
vim /etc/yum.repos.d/CentOS-Base.repo
[centosplus]
enabled=1

安装 Docker
[root@centos7 yum.repos.d]# yum install docker-io

启动 Docker
[root@centos7 yum.repos.d]# service docker start

五. 创建基础镜像

替换变量
把 /etc/yum.repos.d/CentOS-Base.repo 文件中
$releasever 替换成 7
$basearch 替换成 x86_64

快速替换方法:
vim /etc/yum.repos.d/CentOS-Base.repo
:%s/$releasever/7/g
:%s/$basearch/x86_64/g

创建Docker image 生成脚本
[root@centos7 yum.repos.d]# cd /root
[root@centos7 ~]# mkdir scripts
[root@centos7 ~]# cd scripts/
[root@centos7 scripts]# vim createimage.sh
然后把 https://github.com/docker/docker/blob/master/contrib/mkimage-yum.sh 文件中内容粘贴进去

[root@centos7 scripts]# chmod +x createimage.sh

创建image
[root@centos7 scripts]# ./createimage.sh centos7base

创建成功后查看,并把当前运行的容器删除掉
[root@centos7 tmp]# docker images
REPOSITORY     TAG         IMAGE ID      CREATED       VIRTUAL SIZE
centos7base     7.1.1503      112ee00c2cbc    8 minutes ago    227.7 MB

[root@centos7 tmp]# docker ps -all
CONTAINER ID    IMAGE         COMMAND       CREATED       STATUS           PORTS        NAMES
752b9d49a079    centos7base:7.1.1503  "echo success"   10 minutes ago   Exited (0) 10 minutes ago            mad_saha

[root@centos7 tmp]# docker rm 752b9d49a079
752b9d49a079

[root@centos7 tmp]# docker ps -all
CONTAINER ID    IMAGE        COMMAND       CREATED       STATUS       PORTS        NAMES

导出image
[root@centos7 tmp]# cd /tmp/
[root@centos7 tmp]# docker images
REPOSITORY     TAG         IMAGE ID      CREATED       VIRTUAL SIZE
centos7base     7.1.1503      112ee00c2cbc    14 minutes ago   227.7 MB

[root@centos7 tmp]# docker save 112ee00c2cbc > /tmp/centos7base.tar

[root@centos7 tmp]# ls
centos7base.tar ks-script-L8TDO5 yum.log
[root@centos7 tmp]#

六. Docker 常用命令

docker stop <CONTAINER ID> :用来停止运行中的容器,同时你还可以用
docker start <CONTAINER ID>:用来启动一个已经停止的容器。
docker restart <CONTAINER ID>:可以重启一个运行中的容器。这就相当于对一个容器先进行stop再start。
docker attach <CONTAINER ID> :关联到一个正在运行的容器

删除镜像: docker rmi <IMAGE ID>
  docker rmi 2db1e85f26ba

删除容器:docker rm <CONTAINER ID>
  docker rm c3bfb652a491

查看正在运行的容器
  docker ps -all

停止容器:
  exit

重新进入窗口
  docker start <CONTAINER ID>
  docker attach <CONTAINER ID>

暂时退出容器
  ctrl + p 然后 ctrl + q
重新入进:
  docker attach <CONTAINER ID>

将容器保存成镜像:
  docker commit <CONTAINER ID> <NAME>:<TAG>

七. 导到本地镜像库

回去宿主机,把虚拟机中导出的image拷到本地
hr:~ hr$ mkdir -p docker/images
hr:~ hr$ cd docker/images/
hr:images hr$ scp root@192.168.1.4:/tmp/centos7base.tar .
hr:images hr$ ls -lah
total 469392
drwxr-xr-x 3 hr staff  102B 12 5 21:08 .
drwxr-xr-x 3 hr staff  102B 12 5 21:05 ..
-rw-r--r-- 1 hr staff  229M 12 5 21:08 centos7base.tar

启动Docker Quick Start Terminal

加载IMAGE 包到docker image
hr:images hr$ docker load < /Users/hr/docker/images/centos7base.tar

hr:images hr$ docker images
REPOSITORY     TAG         IMAGE ID      CREATED       VIRTUAL SIZE
<none>       <none>       112ee00c2cbc    29 minutes ago   227.7 MB
hello-world     latest       975b84d108f1    7 weeks ago     960 B

TAR 等于none的就是刚刚导入的,把TAG改个名字:
hr:images hr$ docker tag 112ee00c2cbc centos7base:7.1
hr:images hr$ docker images
REPOSITORY     TAG         IMAGE ID      CREATED       VIRTUAL SIZE
centos7base     7.1         112ee00c2cbc    33 minutes ago   227.7 MB
hello-world     latest       975b84d108f1    7 weeks ago     960 B

运行容器:
hr:images hr$ docker run -i -t 112ee00c2cbc /bin/bash
[root@e948acae7b42 /]# hostname
e948acae7b42

[root@e948acae7b42 /]# cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)

八. 发布镜像到docker hub

前提是先注册一个帐号:https://hub.docker.com/

1. 登录

docker login —username=<用户名> —email=<邮箱地址>

2. 按docker REPOSITORY 要求修改镜像TAG

docker tag <IMAGE ID>  用户名/镜像名/TAG
    docker tag 112ee00c2cbc honor/centos7base:7.1

3. 上传

docker push honor/centos7base

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • docker images,info,-d等命令报错的解决方法

    一.发现问题 楼主不管输入那个命令,都出现了: FATA[0000] Cannot connect to the Docker daemon. Is 'docker -d' running on this host? 二.解决方法 以及类似的错误,就连docker version命令都报错了,楼主开始找啊找,找到了好多东西,结果发现没一个能行的,最后楼主使用这样的命令: # vim /etc/default/docker 在该文件中添加如下内容: DOCKER_OPTS="-H unix:///

  • docker image删不掉的解决办法

    在使用Docker的时候遇到删不掉image的情况,如下: root@ubuntu:/opt/docker# docker images REPOSITORY TAG IMAGE ID CREATED SIZE door/ubuntu-nginx v2 5e4f2da203e2 5 minutes ago 283.3 MB <none> <none> 46987ed2da40 33 minutes ago 129 MB <none> <none> 20248

  • Docker Base Image自己创建具体实现

    Docker Base Image 创建 本着学习的态度,想了解创建 Docker Base Image的方法,在官网,在百度,在相关论坛,查找相关资料,这里记录下实现的步骤, 一. 环境 宿主机操作系统: OS X  ,需要安装VirtualBox  ; 容器环境:centos7 二. 用VirtualBox 安装系统,这里以centos 7为例(CentOS-7-x86_64-Minimal-1503-01.iso) 创建虚拟机,并安装centos7,以下记录了详细安装过程. * 安装过程简

  • 聊聊Docker中容器的创建与启停问题

    目录 1. 镜像和容器 2. 新建并启动容器 3. 使用第一个容器 4. 容器命名 5.重启容器 6. 附着到容器上 1. 镜像和容器 看待镜像和容器的一种方式是将它们类比成程序与进程.一个进程可以视为一个被执行的应用程序,同样,一个Docker容器可以视为一个运行中的Docker镜像. 标题Docker镜像与容器 如果大家熟悉面向对象原理,看待镜像和容器的另一种方法是将镜像看作类而将容器看作对象.对象是类的具体实例,同样,容器是镜像的实例.用户可以从单个镜像创建多个容器,就像对象一样,它们之间

  • 在Ubuntu 16.04上用Docker Swarm和DigitalOcean创建一个Docker容器集群的方法

    介绍 Docker Swarm是用于部署Docker主机集群的Docker本地解决方案.您可以使用它来快速部署在本地计算机或受支持的云平台上运行的Docker主机集群. 在Docker 1.12之前,设置和部署Docker主机集群需要使用外部键值存储(如etcd或Consul)来进行服务发现.但是,使用Docker 1.12,不再需要外部发现服务,因为Docker提供了一个内置的键值存储,可以开箱即用. 在本教程中,您将了解如何使用Docker 1.12上的Swarm功能部署一组Docker机器

  • 详解docker中Dockerfile指令创建镜像

    写在前面: 继续docker的学习,昨天用docker成功跑了tomcat,但是在centos中镜像跑的容器手动装jdk和tomcat,今天学习用Dockerfile创建镜像,并在上面搭建java环境,跑一个spring boot小项目. Dockerfile: Dockerfile由一行行命令语句组成,并且支持用"#"开头作为注释,一般的,Dockerfile分为四部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行的指令. Dockerfile的书写规则及指令使用方法 Do

  • Docker集群的创建与管理实例详解

    本文详细讲述了Docker集群的创建与管理.分享给大家供大家参考,具体如下: 在<Docker简单安装与应用入门教程>中编写一个应用程序,并将其转化为服务,在<Docker分布式应用教程>中,使应用程序在生产过程中扩展5倍,并定义应该如何运行.现在将此应用程序部署到集群上,并在多台机器上运行它,通过将多台机器连接到Dockerized集群上,使多容器.多机器应用成为可能. Swarm(集群)是运行Docker并加入到一个集群中的一组机器,在这种情况下,您将继续运行以往的Docker

  • Docker启动PostgreSQL时创建多个数据库的解决方案

    1 前言 在文章<Docker启动PostgreSQL并推荐几款连接工具>中我们介绍如何通过Docker来启动PostgreSQL,但只有一个数据库,如果想要创建多个数据库在同一个Docker容器上怎么办呢? 2 两种方案 一种方案是把shell/sql脚本放入/docker-entrypoint-initdb.d/目录中,让容器启动的时候自动执行创建:另一种是通过shell脚本指定创建,本质是一样的.这里只介绍第一种. 把shell脚本或sql脚本放入指定目录,就会自动执行,两种脚本都可以.

  • Docker使用Dockerfile来创建镜像

    本文学习Dcokerfile的基本命令,并且创建一个支持ssh服务的镜像. 1.Dockerfile 1.1基本案例 dockerfile可以说是docker的描述符,该文件定义了docker镜像的所能拥有哪些东西.基本格式如下: 第一行指定该镜像基于的基础镜像(必须) FROM java:8 维护者信息 MAINTAINER quding niudear@foxmail.com 镜像操作指令 RUN echo $JAVA_HOME 启动时操作的命令 CMD ./usr/sbin/nginx 该

  • Docker 教程之镜像创建及修改详细介绍

    创建镜像 创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个. 修改已有镜像 先使用下载的镜像启动容器. $ sudo docker run -t -i training/sinatra /bin/bash root@0b2616b0e5a8:/# 注意:记住容器的 ID,稍后还会用到. 在容器中添加 json 和 gem 两个应用. root@0b2616b0e5a8:/# gem install json 当结束后,我们使用 exit 来

  • Docker数据卷容器创建及使用方法解析

    数据卷容器是一个专门用来挂载数据卷的容器,该容器主要是供其他容器引用和使用.所谓的数据卷容器,实际上就是一个普通的容器,举例如下: 创建数据卷容器 使用如下方式创建数据卷容器: docker run -itd -v /usr/share/nginx/html/ --name mydata ubuntu 命令执行效果如下图: 引用容器 使用如下命令引用数据卷容器: docker run -itd --volumes-from mydata -p 80:80 --name nginx1 nginx

  • 详解Docker学习之用commit命令创建镜像

    构建镜像的两种方法: 使用docker commit 命令 使用docker build命令和Dockerfile文件 Dockerfile更抢到.灵活,推荐使用. 一般来说不是真的"创建"新镜像,而是基于一个已有的基础镜像,比如Ubuntu.Fedora等,构建新的镜像而已. 用commit创建镜像 创建Docker账号 共享和发布镜像时构建镜像中重要的环节,可以将镜像推送到Docker Hub或资金的私有Registry中.首先到https://hub.docker.com/acc

随机推荐