Docker打包镜像的两种方式

前言

Docker镜像是一个特殊的文件系统,既提供了运行时所需的程序、库和资源,还提供了相应的配置参数,只是不包含动态数据。我们可以将任何我们的软件产品打包成镜像,以供服务器能够用Docker直接快速安装并部署运行。

System:Linux(CentOS 7)
Docker Version:19.03.12

构建Image

通过Dockerfile

通过编写Dockerfile文件,Dockerfile示例如下:

FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py

每条指令创建一层:

  • FROMubuntu:18.04Docker镜像创建一个图层。
  • COPY从Docker客户端的当前目录添加文件。
  • RUN通过make构建您的应用程序。
  • CMD指定在容器中运行什么命令。

运行镜像生成容器时,可以在基础层之上添加一个新的_可写层_(“容器层”)。对运行中的容器所做的所有更改(例如写入新文件,修改现有文件和删除文件)都将写入这层薄的但是可写的容器层。

然后执行命令docker build生成镜像,如下

docker build -t myUbuntu:v1.0 .

通过docker commit

当我们觉得某个运行中的容器特别好用,就想把它保留起来,这时候我们可以通过docker build指令将这个运行中的容器构建成一个镜像,然后在其他电脑上也可以使用了;

还有就是针对容器进行改造,通过把一个运行中的容器通过增删改文件或者安装卸载一个程序改造成自己心仪的容器,然后通过命令行生成对应的镜像文件;

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

OPTIONS说明:

  • -a :提交的镜像作者;
  • -c :使用Dockerfile指令来创建镜像;
  • -m :提交时的说明文字;
  • -p :在commit时,将容器暂停。

镜像的用户权限

这里强调一个点,所有的镜像在构建的时候如果在Dockerfile不指定uid,那么运行成容器的时候都会默认生成用户权限为uid为 0,其实就是相当于root权限。

就会出现你以普通用户运行的一个挂载目录的容器,它操作过的目录,你在宿主机会无法操作的问题;

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值