这里不多说了,我们直接上图:
一、docker镜像的创建方法:
创建docker镜像的三种方法,分别是基于已有的容器创建、基于本地模板创建、以及dockerfile创建,
1.基于以有容器创建镜像。
基于已有的容器创建主要是使用docker commit命令。实质就是把一个容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像。
命令:docker commit 选项 容器ID/名称 仓库名称:标签
常用的选项:
-m:说明信息
-a:作者
-p:生成过程中停止容器的运行(一般不会使用)
2.基于本地模板镜像创建:
通过导入操作系模板文件可以生成镜像,模板可以从OPENVZ开源项目下载,下载地址为:https://wiki.openvz.org/Download/template/precreated
Cat 镜像包 | docker import - 生成的镜像名:标签
3.用dockerfile生成镜像:
Dockerfile结构的四个部分:基本镜像信息,维护者信息,镜像操作指令和容器启动执行指令:
3.1:建立工作目录:
[root@123456 ~]# mkdir myapache
[root@123456 ~]# cd myapache/
3.2创建并编写dockerfile文件:
3.3编写执行脚本文件:
[root@123456 myapache]# vim run.sh
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND
3.4创建测试页面:
[root@123456 myapache]# echo "then is httpd">index.html
[root@123456 myapache]# ls
Dockerfile index.html run.sh
3.5使用dockerfile生存镜像文件:
命令docker build 选项 路径
常用选项:
-t:指定镜像的标签选项。
[root@123456 myapache]# docker build -t centos:httpd .
3.6使用新的镜像运行容器:
将容器中的暴露端口映射到宿主机上端口号为8888
[root@123456 myapache]# docker run -it -d -p 8888:80 centos:httpd
c3b0432591612bf0697404e4044eeb45d42e072ea27388e8b498697a2ebb7436
3.7用真实主机去访问宿主机加映射的端口号:
4.将镜像上层到仓库:
为dockerfile创建的镜像添加别名(如果要上传到公共仓库需要在前面标签你的docker hub账号)
[root@123456 myapache]# docker tag centos:httpd 你的dockerhub的账号/centos:httpd
5.创建私有仓库:
可以使用registry来搭建本地私有仓库:
5.1需要在构建私有仓库的服务器上下载registry镜像
[root@123456 ~]# docker pull registry
Using default tag: latest
之后需要在/etc/docker/目录下创建一个json文件。否则在往自定义的私有仓库中上传镜像是会报错:
[root@123456 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://5fpngg16.mirror.aliyuncs.com"]
}
{
"insecure-registres": ["172.16.16.200:5000"]
}
5.2 使用registry镜像创建一个容器,默认情况下仓库放于容器内的/tmp/registry目录下,使用-v选项可以将本地目录挂载到容器内的/tmp/registry下使用这样就不怕容器被删除后镜像也会随之丢失:(默认的监听端口为registry 5000端口号)
将创建的容器5000的端口号映射到本机:
[root@123456 ~]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
5c70a2c6ae9722696bf9004e5dcc637f2bef9ba621be15948b08d461fa515bfb
使用docker tag 命令将要上传的镜像标记为宿主机的IP/+镜像名
[root@123456 ~]# docker tag centos:httpd 172.16.16.200:5000/centos:httpd
用docker push上传标记的镜像: