一、保存容器为镜像
在本小节中,我们将介绍如何将一个已经运行的容器保存为一个新的镜像。
首先,我们需要使用docker ps
命令查找到该容器的容器ID,如下所示:
$ docker ps
CONTAINER ID IMAGE ...
20b843646ebc nginx ...
然后,我们可以使用docker commit
命令将该容器保存为一个新的镜像。例如,如果我们想要将该容器保存为nginx:latest
,可以执行以下命令:
$ docker commit 20b843646ebc nginx:latest
这将创造一个新的镜像nginx:latest
,后续使用时可以像使用其它镜像一样使用它。
二、使用Dockerfile创建镜像
在本小节中,我们将学习如何通过Dockerfile创建镜像。
首先,在你的工作目录中创建一个Dockerfile文件:
$ mkdir myimage
$ cd myimage
$ touch Dockerfile
接着,使用文本编辑器打开Dockerfile文件,添加以下内容:
FROM nginx
COPY index.html /usr/share/nginx/html
这个Dockerfile的第一行指定了使用Nginx作为基础镜像,第二行将当前目录下的index.html
文件复制到Nginx的默认HTML目录中。
最后,使用以下命令在当前目录中构建镜像:
$ docker build -t myimage:latest .
这将创建一个名为myimage:latest
的新镜像。
三、多阶段构建
在开发镜像时,有时候我们需要在同一镜像中完成多个步骤的构建,但最终只需要保留其中的几个步骤。这个时候,我们可以使用多阶段构建来达到这个目的。
以下是多阶段构建的示例Dockerfile:
FROM golang:alpine AS build
WORKDIR /app
COPY . .
RUN go build -o myapp
FROM alpine
WORKDIR /app
COPY --from=build /app/myapp .
CMD ["./myapp"]
在这个Dockerfile中,我们使用golang:alpine
镜像作为第一个阶段,并在其中编译了一个myapp
可执行文件。接着,使用alpine
作为第二个阶段,并从第一个阶段中复制myapp
文件到这个阶段中,最后运行该文件。
这个Dockerfile的运行结果就是只包含了/app/myapp
文件的alpine
镜像。
四、将容器导出为文件
除了可以将容器保存为新的镜像之外,你还可以将容器导出为一个单独的文件。这个功能对于备份或数据恢复非常有用。
使用以下命令将容器导出为文件:
$ docker export 20b843646ebc > mycontainer.tar
这个命令将导出20b843646ebc
容器的文件系统,并将其打包为一个名为mycontainer.tar
的文件。
五、将文件导入为镜像
如果你已经导出了一个容器的文件系统,并且想要将其作为镜像进行使用,可以使用以下命令:
$ cat mycontainer.tar | docker import - myimage:latest
这将创建一个名为myimage:latest
的新镜像,其内容与刚刚导出的容器的文件系统相同。
六、清理Docker资源
在使用Docker过程中,我们需要经常清理不再需要的Docker资源,包括已停止的容器、未使用的镜像和卷等等。以下是几个常用的清理命令:
$ docker container prune
$ docker image prune
$ docker volume prune
$ docker network prune
$ docker system prune
这些命令将删除对应的Docker资源,并释放相应的磁盘空间。