搜索

Docker如何创建镜像?怎么修改,上传镜像

发布网友 发布时间:2022-03-21 00:22

我来回答

2个回答

懂视网 时间:2022-03-21 04:43

产品型号:Thinkpad E15

系统版本:centos8

docker镜像制作方法

Docker Image 有两种制作方法

方法1:docker commit   #将容器实例的当前状态保存成image镜像

方法2:docker build  #使用 Dockerfile 文件制作 image

主介绍docker commit  用法。

实战:使用docker commit生成一个apache docker镜像

1、创建一个安装好apache web服务器的容器镜像

[root@xuegod63 ~]# docker run -it centos:latest /bin/bash

[root@1d3563200047 /]# yum -y install  httpd   #在 container 中安装 apache 软件包

[root@1d3563200047 /]# exit 

2、查看现有的images 镜像列表

[root@xuegod63 ~]# docker images   #查看刚看退出的docker实例。

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

centos    latest              196e0ce0c9fb        13 days ago         196.6 MB注:当前只有一个centos镜像。

3、根据容器当前状态做一个image镜像,创建一个安装了apache工具的centos镜像

语法: docker commit

例:

查看刚才安装了apache软件包的的docker容器ID:

[root@xuegod63 ~]# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES1d3563200047        centos              "/bin/bash"              10 minutes ago      Exited (0) 6 minutes ago                          tender_joliot

以这个安装了apache软件包的docker容器实例,创建一个镜像。

[root@xuegod63 ~]# docker commit 1d3563200047  centos:apache

sha256:e5917c01599c70d0680beeb35f6df988dd22106399efd6907d956d8a943242

[root@xuegod63 ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

centos              apache              4fd446f1034a        16 seconds ago      269MB

centos              latest              0f3e07c0138f        5 weeks ago         220MB

总结:

1、创建一个安装好apache web服务器的容器镜像

2、查看现有的images 镜像列表

3、根据容器当前状态做一个image镜像,创建一个安装了apache工具的centos镜像

热心网友 时间:2022-03-21 01:51

 初次安装部署好docker后,大多数镜像可以从DockerHub 提取,但是大多数人都希望自己可以完全自定义一个镜像,那么这里需要一个第三方工具 febootstrap

  epel6的源提供febootstrap的RPM包

  yum install docker-io febootstrap -y

  service docker start

  chkconfig docker --level35 on
复制代码
  制作CentOS6.6镜像目录

  febootstrap -i yum -i iputils -i iproute -i bash -i vim-minimal -i coreutils -i tar -i net-tools centos6 base   <a href="http://centos.ustc.e.cn/centos/6.6/os/x86_/" target="_blank">http://centos.ustc.e.cn/centos/6.6/os/x86_/</a> -u <a href="http://centos.ustc.e.cn/centos/6.6/updates/x86_/" target="_blank">http://centos.ustc.e.cn/centos/6.6/updates/x86_/</a>
复制代码
  -i 表示镜像里面安装的RPM包(包括一些人为有必要的软件包)
  centos6 表示镜像的版本说明
  base 表示生成的镜像目录
  后面之后了系统安装源和更新源为USTC

  安装执行后,会开始一系列的RPM包下载安装,过程与yum类似,安装完成后当前目录会多了base目录,里面就是一个镜像的系统文件

  进入base目录等于进入镜像的根目录

  [root@image ~]# cd base/

  [root@image base]# ls

  bin boot dev etc home lib lib media mnt opt proc root sbin selinux srv sys tmp usr var
复制代码
  可以像一般的系统文件一样先做一些修改配置,例如配置第三方yum源等等

  把base目录把所有文件打包成二进制文件后导入docker创建为镜像

  cd ~/root/base/ && tar -c . | docker import - centos6:base
复制代码
  docker images 可以查看镜像的信息
  一个基本centos镜像创建完毕,下面再利用Dokcerfile制作mysql镜像
  cat Dockerfile

  FROM centos6:base

  MAINTAINER Lion "lioncui@163.com"

  VOLUME /var/lib/mysql

  RUN yum install mysql-server mysql -y

  RUN echo -ne "NETWORKING=yes\\nHOSTNAME=mysql" > /etc/sysconfig/network

  RUN echo -ne "bind-address = 0.0.0.0\\ndefault-storage-engine=innodb\\ninnodb_file_per_table\\n\

collation-server=utf8_general_ci\\ninit-connect='SET NAMES utf8'\\ncharacter-set-server = utf8" > insert

  RUN sed -i "/user=mysql/r insert" /etc/my.cnf && rm -f insert

  RUN echo -ne "/usr/bin/mysql_install_db\\n/usr/bin/mysqld_safe" >> /opt/mysql_start

  RUN chmod 777 /opt/mysql_start

  ENV PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:

  WORKDIR /opt

  EXPOSE 3306

  CMD /bin/sh -c mysql_start
复制代码

  FROM 声明以centos:base镜像为基础
  MAINTAINER 声明镜像的维护者信息
  VOLUME 挂载本地目录到容器里/var/lib/mysql目录(这是mysql默认的数据保存目录)
  由于我希望数据可以持久化防止因为容器误删除而丢失,所以映射到宿主本地目录
  RUN 在镜像中执行安装mysql
  在新镜像中写入HOSTNAME信息,因为mysql启动过程需要network文件
  在my.cnf配置文件插入一些修改配置
  创建启动脚本
  声明环境变量
  制定默认工作目录
  EXPOSE 声明容器需要暴露的端口号
  CMD 是指镜像生成容器后自动执行的命令,类似docker exec,这里是自动启动mysql服务

  根据Dockerfile创建mysql服务镜像
  docker build --rm=true -t mysql:frist .
  查看镜像的树状关系可以发现,mysql:frist是以centos:base为父镜像
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top