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:e5917c01599c70d0680beeb35f6df98889dd22106399efd6907d956d8a943242
[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_64/" target="_blank">http://centos.ustc.e.cn/centos/6.6/os/x86_64/</a> -u <a href="http://centos.ustc.e.cn/centos/6.6/updates/x86_64/" target="_blank">http://centos.ustc.e.cn/centos/6.6/updates/x86_64/</a>
复制代码
-i 表示镜像里面安装的RPM包(包括一些人为有必要的软件包)
centos6 表示镜像的版本说明
base 表示生成的镜像目录
后面之后了系统安装源和更新源为USTC
安装执行后,会开始一系列的RPM包下载安装,过程与yum类似,安装完成后当前目录会多了base目录,里面就是一个镜像的系统文件
进入base目录等于进入镜像的根目录
[root@image ~]# cd base/
[root@image base]# ls
bin boot dev etc home lib lib64 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为父镜像