前言
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
每条指令创建一层:
-
FROM
从ubuntu:18.04
Docker镜像创建一个图层。 -
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权限。
就会出现你以普通用户运行的一个挂载目录的容器,它操作过的目录,你在宿主机会无法操作的问题;