docker实例入门(下)

lilygg 2019-10-04

接上一篇:docker实例入门(上)

继续以nginx镜像为例介绍docker的一些基本操作

7. 编写Dockerfile文件创建自己的镜像

Dockerfile 文件用于指示如何创建你的镜像。格式由一行行命令语句组成,并且支持以 # 开头的注释行。Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令

docker文件的编写比较复杂,本文只以一个例子让大家体验dockerfile文件的作用

dockerfile有以下常用指令:

FROM指令
指明所基于的镜像名称

之前说过docker是分层,相当于一层文件以另一层为基础创建,我们实际编写时也要

以来已存在的一层或多层的基础镜像,不重复造轮子

格式为 FROM <image>或FROM <image>:<tag>
 
MAINTAINER

指定维护者信息,让别人知道这个镜像是谁创建的,类似于git仓库创建时要指定用户名和邮箱

格式为

MAINTAINER <name>

RUN

执行命令并创建新的镜像层,通常用于安装软件包

每运行一条 RUN 指令,镜像添加新的一层,并提交

格式为

RUN <command> 或 RUN ["executable", "param1", "param2"]

ADD
格式为 ADD <src> <dest>。
该命令将复制指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)
 
例子:以nginx为基础镜像,将当前目录下所有文件添加到nginx容器的html目录中
docker实例入门(下)
docker实例入门(下)
创建好dockerfile文件后,就可以用docker build命令运行它来创建自己的镜像
8.docker build
命令用于使用 Dockerfile 创建镜像
常用参数:
-t: 镜像的名字及标签,通常 name:tag 或者 name 格式,不写tag就是latest(最新版本)
-f :指定要使用的Dockerfile路径
1)在dockerfile文件所在目录创建一个html文件another.html,随便编辑点啥保存退出
vi another.html
docker实例入门(下)
 docker实例入门(下)
2)docker build -t 镜像名 .
使用当前路径的dockerfile文件创建镜像,创建完成后使用docker images查看
docker实例入门(下)
 
docker实例入门(下)
 docker实例入门(下)docker实例入门(下)

3)使用该镜像启动一个新的容器(docker run)

docker实例入门(下)
docker实例入门(下)

访问之前build时构造到该容器的文件


docker实例入门(下)
 docker实例入门(下)

可以看到,nginx的首页已被替换成我们自己的页面,nginx的基础功能仍然复用基础镜像。实际的工作中通常也是这样,以已存在的一个或多个镜像为基础构建新的镜像,再分发给团队成员使用。

9. docker stop 容器
停止一个运行中的容器并用docker ps查看
docker实例入门(下)
 例子中命令后跟着的是要停止容器id的前几位用于定位唯一容器
 
10. docker rm  容器
删除一个或多个容器
使用docker ps -a 查看所有容器(包括停止的),发现之前stop的容器仍然存在,只是exited了

docker实例入门(下)
 docker rm删除容器,再用docker ps -a 查看,发现确实删除了
docker实例入门(下)
 

11.docker rmi 镜像

删除本地一个或多少镜像
注意,如果还有容器正在使用该镜像运行,则不能删除该镜像
docker实例入门(下)
 
可以增加-f选型强制删除,但是不推荐,类似于外键约束,可能会造成不一致的问题。正确的做法是先把使用该镜像的容器停止,删除,然后再删除对应镜像
docker实例入门(下)
 可以看到 ,同构建时一样,删除镜像时也是逐层删除的
12.docker save > 文件
将指定镜像保存成 tar 归档文件。> 表示输出重定向
 
镜像构建好了(不管是用dockerfile从头构建镜像还是通过修改别人镜像的容器commit成新的镜像),可以用docker save命令导出为归档文件,分发给团队成员使用,使大家可以在完备,一致的环境下开发,测试和部署
例子:
1)将一个镜像导出到tar文件中,可以发给别人使用
docker实例入门(下)
 docker实例入门(下)
2)删除容器和镜像

docker实例入门(下)
 
docker实例入门(下)
 
可以看到,现在本地已没有myimg1这个镜像,我们访问其之前映射的端口也不再能访问
3)使用之前save的tar文件还原镜像,参见下面的docker load命令
13.docker load<文件
导入之前使用 docker save 命令导出的镜像tar文件到本地,用于还原镜像
<表示输入重定向
docker实例入门(下)
 docker实例入门(下)
用恢复的镜像运行一个nginx容器,还是映射到100端口
docker实例入门(下)
 docker实例入门(下)
应用恢复
docker实例入门(下)
 

附录1:提供一些扩展学习内容,请大家根据我们提供的文档链接和网络自行扩展提高

扩展1:自行查阅 save export load import命令的区别
扩展2:自行在docker hub或网易云(docker仓库,不是云音乐)上注册,将本地镜像上传到远程仓库上
扩展3:自己去pull tomcat,mysql等镜像,并run
扩展4:将一个web应用打包成docker镜像(自己百度,非常多文章)
 

附录2:

使用docker进行实际工作场景描述:
1.专业运维会编写基础镜像的dockerfile文件,save->tar
2.开发人员拿到tar后,通过load-》还原成基础镜像
3. 开发人员完成开发后,编写自己的dockerfile文件,以基础镜像为基础构建自己的镜像
4.运行自己的dockerfile文件(build),构建自己web应用的镜像
5. save自己的镜像-》tar,发给测试人员去还原并测试,发给运维人员去部署
docker实例入门(下)
docker实例入门(下)
 
以上就是我们的docker实例入门,介绍了docker的基本概念和作用,docker仓库/镜像/容器三大组件,并以nginx应用的一些简单操作为例介绍了docker常用操作场景和命令。限于篇幅分为上下两篇文章
操作过程基本都有截图,大家可结合我们的截图和建议的命令手册自己进行实验,只有自己动了手才能真正理解概念,学会实际使用。

相关推荐

ganyouxianjava / 0评论 2012-05-31