深入浅出Docker原理及实战(四)——构建镜像


声明:这是我在大学毕业后进入第一家互联网公司学习的内容


深入浅出Docker原理及实战系列第四篇,我主要分享制作镜像的两种方法以及如何高效构建镜像的注意点,最后展示一个构建项目级镜像的实践过程

创建镜像的方式

创建一个指定的镜像有两种方式

  • 基于一个现有的镜像来修改 docker commit
  • 基于Dockerfile来创建 docker build

基于一个现有的镜像来修改

命令:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

--author , -a		作者(例如“ rugod.cn ”)
--change , -c		将Dockerfile创建的镜像进行更新
--message , -m		提交讯息
--pause , -p	true	提交期间暂停容器

你可以理解成快照,不过不是你在容器里所有的操作都会快照上,支持更改命令有 CMD| ENTRYPOINT| ENV| EXPOSE| LABEL| ONBUILD| USER| VOLUME|WORKDIR

$ docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS              NAMES
c3f279d17e0a        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            desperate_dubinsky
197387f1b436        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            focused_hamilton

$ docker commit --change='CMD ["apachectl", "-DFOREGROUND"]' -c "EXPOSE 80" c3f279d17e0a  svendowideit/testimage:version4

f5283438590d

$ docker run -d svendowideit/testimage:version4

89373736e2e7f00bc149bd783073ac43d0507da250e999f3f1036e0db60817c0

$ docker ps

CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS              PORTS              NAMES
89373736e2e7        testimage:version4  "apachectl -DFOREGROU"  3 seconds ago       Up 2 seconds        80/tcp             distracted_fermat
c3f279d17e0a        ubuntu:12.04        /bin/bash               7 days ago          Up 25 hours                            desperate_dubinsky
197387f1b436        ubuntu:12.04        /bin/bash               7 days ago          Up 25 hours                            

总结:一般来说这种修改的方式镜像都是用于测试构建,不适合生产环境的构建。

注意!!!提交操作将不包含容器内挂载卷中的任何数据。

基于Dockerfile来创建

常规来讲,镜像都是需要有一个dockerfile来构建的,但是我们在制作前需要理解一下底层的构建原理,这很重要

底层构建原理

先回顾一下Docker的架构=Docker客户端(CLI)+Docker服务端(docker的守护进程)。

Docker 客户端通过 REST API 和服务端进行交互,docker 客户端每发送一条指令,底层都会转化成 REST API 调用的形式发送给服务端,服务端处理客户端发送的请求并给出响应。

Docker 镜像的构建、容器创建、容器运行等工作都是 Docker 服务端来完成的,Docker 客户端只是承担发送指令的角色。

所以构建一个镜像是由Doc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值