`
qindongliang1922
  • 浏览: 2149030 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:116368
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:124633
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:58536
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:70410
社区版块
存档分类
最新评论

Docker学习笔记二打造基础镜像

阅读更多

在上篇笔记里面http://qindongliang.iteye.com/blog/2279738,我们已经下载好了基于docker的centos最新的镜像,本篇来看下如何构建,我们自己的一个镜像:


构建镜像二种方法:

(1)使用commit命令构建,适合一些简单的场景,定制型差

1,执行命令
docker run -it centos /bin/sh,//启动一个容器

vi /usr/bin/run.sh 编写一个shell脚本
#!/bin/sh

COUNT=0
while(true); do
        COUNT=$(($COUNT+1))
        echo $COUNT
        sleep 2
done

保存退出
然后在执行 chmod +x /usr/bin/run.sh 给与执行权限
执行exit,退出容器

2,执行docker ps -a查看容器镜像id




然后执行提交镜像,执行命令:注意第一列第三个数是容器的id
docker commit 42750406c3d5  mytest:study

再次查看镜像,发现我们提交的镜像,已经可以查到了:
[root@h1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mytest              study               4d396274a0ff        12 minutes ago      196.6 MB
centos              latest              0f0be3675ebb        8 days ago          196.6 MB
hello-world         latest              690ed74de00f        4 months ago        960 B
[root@h1 ~]# 

然后执行,运行我们的镜像文件:
docker run -it mytest:study run.sh

就会打印如下的信息:
[root@h1 ~]# docker run -it mytest:study  run.sh         
1
2
3
4
5
^C6
7
^C8
9

这时候按Ctrl+C并不能直接退出容器,
需要先执行docker ps -a 查询它的容器id
然后在执行docker kill 容器id ,即可成功停止镜像
docker kill 94254a6a607a
//或者
docker stop 94254a6a607a




(2)使用Dockerfile构建  , 适合一些复杂的业务场景,定制型好


Dockerfile是一个文件名,必须这样命令,docker的规定,
通过docker build -t 镜像名字 项目路径
来构建一个image镜像

Dockerfile中的RUN命令,每一行执行完都会提交一个新的镜像
各个镜像直接,是增量编译的,互不影响,几个重要的指令:

FROM {base image}
FROM  必须放在Dockerfile的第一行,表示从哪个基础Image开始构建

MAINTAINER
可选 ,用来表示维护者的信息
#可用#号注意Dockerfile里面的内容

RUN
每个run指令,都会提交为image,作为下一个run的base image

RUN ["executable" ,"arg1",.....]

CMD
  在Dockerfile中定义的cmd命令,在提交成image的时候不会起作用,只有当使用
image运行成container时,才会执行,
一个Dockerfile只能有一个有效的CMD
当运行时指定了command,那么将会覆盖默认设置的这个CMD


EXPOSE port:port 容器对外映射的端口或者暴露的端口,
一个port是容器启动的端口,两个是宿主映射端号:容器启动端口

ENV 指定环境变量:
例子:
ENV JAVA_BASE=/usr/local  VERSION=8   UPDATE=20

ENV JAVA_HOME=${JAVA_BASE}/jdk1.${VERSION}.0_${UPDATE}

ENV PATH=$JAVA_HOME/bin:$PATH

ADD : 添加本地文件至docker容器中,如果是压缩文件会自动解压,
还可以ADD url

COPY:拷贝本地文件至docker容器中,如果是压缩文件,会自动解压

WORKDIR: 切换目录
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd

最终路径时/a/b/c

ENTRYPOINT 容器启动时,执行的命令,不会被run参数的覆盖

如果有多个命令,仅仅会被执行一个,属于入口命令


CMD,容器启动时执行的命令,可以被运行时覆盖,

VOLUME 挂载  格式为  VOLUME ["/data"]
  一个数据卷是一个特别指定的目录,该目录利用容器的UFS文件系统可以为容器提供一些稳定的特性或者数据共享。数据卷可以在多个容器之间共享。

      创建数据卷,只要在docker run命令后面跟上-v参数即可创建一个数据卷,当然你也可以跟多个-v参数来创建多个数据卷,当创建好带有数据卷的容器后,你就可以在其他容器中通过--volumes-froms参数来挂载该数据卷了,而不管该容器是否运行。你也可以在Dockerfile中通过VOLUME指令来增加一个或者多个数据卷。





编写一个例子:
(1)新建一个docker_test目录
(2)进入目录,新建一个Dockerfile,加入下面的简单内容
[root@h1 docker_test]# vi Dockerfile
FROM centos

RUN touch test.sh

CMD ["ls","-al" "/" ]

##默认执行ls -al /
##外部可以传命令进行覆盖


(3)构建镜像docker build -t 仓库:标签 Dockerfile根目录
[root@h1 ~]# docker build -t  dong:hello1 docker_test/
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM centos
 ---> 0f0be3675ebb
Step 2 : RUN touch test.sh
 ---> Running in 776952560bbc
 ---> a6fc535d5520
Removing intermediate container 776952560bbc
Step 3 : CMD ["ls","-al" ,"/" ]
 ---> Running in 4d2b382c4ec5
 ---> 68f78c1771ce
Removing intermediate container 4d2b382c4ec5
Successfully built 68f78c1771ce


(4)查看镜像,会发现我们刚才的镜像,已经构建成功了:




如果命令写错了,则可以重新生成镜像,不过需要远来镜像,使用下面的命令
//根据镜像id强制删除一个镜像
docker rmi -f  68f78c1771ce 
//批量停止:
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
//批量删除已经退出的docker服务
docker ps -a | grep "Exited" | gawk '{print $1 }'| xargs docker rm
//删除none的镜像
docker images|grep none|awk'{print $3 }'|xargs docker rmi
//如果还删除不掉,就强制删除
docker images|grep none|awk '{print $3 }'|xargs docker rmi -f



docker里面安装tomcat例子:
https://open.taobao.com/doc2/detail.htm?articleId=102822&docType=1&treeId=null

参考文章:
http://blog.csdn.net/qq1010885678/article/details/46291461
http://xiaorui.cc/

docker volume的文章:
http://my.oschina.net/guol/blog/271225

有什么问题 可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园




  • 大小: 19.3 KB
  • 大小: 9.7 KB
0
1
分享到:
评论

相关推荐

    docker学习笔记.docx

    Docker_阿里云镜像加速器配置 Docker_帮助命令 Docker_镜像命令 Docker_容器命令 Docker_容器数据卷用V命令添加 Docker_容器数据卷用DockerFile添加 Docker_容器数据卷volumes-from DockerFile保留字指令 DockerFile...

    docker学习笔记汇总记录

    docker学习笔记汇总记录,适用docker初学者,docker镜像操作大全,镜像导入导出容器启动停止等

    Docker学习笔记

    docker学习笔记,主要内容:docker介绍,docker镜像操作,docker容器操作,docker打包备份

    Docker学习笔记.pdf

    docker的笔记,整理的免试题。Docker 是一个开源的应用容器引擎,主要利用 linux 内核 namespace 实现沙盒隔离,用 cgroup 实现资源限制。 Docker 支持三种不同的镜像层次存储的 drivers: aufs、devicemapper、btrfs ;

    docker学习思维笔记.xmind

    docker search 镜像名 docker rmi 删除镜像 docker 运行命令 docker copy 主机路径 容器id/名称:容器中路径  镜像 是什么 UnionFS(联合文件系统) 镜像加载原理 分层镜像 为什么...

    Docker学习笔记(四)镜像原理

    什么是镜像?...Union文件系统是Docker镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。 Docker镜像加载原理 docker的镜像实际上是由一层一层

    Docker学习笔记(1)

    包括docker安装以及常用操作、私有仓库安装和使用、制自己的镜像、迁移镜像、操作镜像

    Docker入门基础笔记

    本笔记记录入门的Docker学习笔记,通俗易懂,适合没有学过docker的小伙伴作一个参看,码字不易,且看且珍惜 Docker的由来背景 Docker的基本操作 Docker应用 Docker自定义镜像 Docker-Compose Dockerfile文件

    docker笔记

    docker学习笔记:windows10系统暗转部署、镜像操作、以及visual studio 2017开发asp .net core 教程

    docker之hbase集群学习笔记

    docker版hbase集群构建,从docker安装开始,再到docker中下载并运行hadoop镜像,之后下载并配置hbase。最后对整个流程做总结,遇到的问题,以及一些docker基础知识和hbase教程。

    Docker 学习笔记

    docker, 云平台应用开发的一个方向, 虚拟机技术的一个应用, 大数据的延伸。

    docker学习笔记之把容器commit成镜像的方法

    本篇文章主要介绍了docker学习笔记之把容器commit成镜像,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Spring Cloud与Docker整合应用-学习笔记

    这是本人初次接触Spring Cloud微服务及Docker结合的学习点滴,帮助自己或他人更好地去理解微服务概念及其庞大的组件体系,给予服务开发上的便利,同时结合Docker虚拟化技术进行整合应用的实践过程,以作者初学的角度...

    Docker学习笔记七(七)Dockerfile

    1.docker从基础镜像运行一个容器 2.执行一条指令并对容器进行修改 3.执行类似docker commit的操作提交一个新的镜像层 4.docker再基于刚提交的镜像运行一个新容器 5.执行dockerfile中的下一条指令直到所有指令都执行...

    Docker学习笔记之容器查看启动终止删除的方法

    本文介绍了Docker学习笔记之容器查看启动终止删除的方法,分享给大家,具体如下: 查看 docker ps 主要有些参数要说一下 1. 不加参数,表示查看当前正在运行的容器 2. -a,查看所有容器包括停止状态的容器 3...

    Docker学习笔记之docker入门

    学习的一些疑问 如何热更新镜像(images)?(你可以快速启动或者销毁容器。这种时间几乎是实时的) 如何热更新游戏服? 好处在于各个应用之间环境...1. docker的二个软件 Docker: 开源的容器虚拟化平台; Docker Hub

    动力节点Docker入门到进阶教程学习笔记分享

    5.深度讲解了docker distribution、docker registry、harbor私有镜像中心的搭建过程及原理。 6.深度剖析了HTTPS加密验证原理, 7.深度讲解了数字证书、根证书、数据摘要、数字签名等概念与用途。度剖析了Swarm的节点...

Global site tag (gtag.js) - Google Analytics