一、环境
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它是基于 Google 公司推出的 Go 语言实现。项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
| OS | Docker version |
|---|---|
| CentOS8.2.2004 | 20.10.5 |
CentOS资源下载:传送门
Docker资源下载:传送门
二、通过容器文件系统打包
将容器的文件系统打包成tar文件,也就是把正在运行的容器直接导出为tar包的镜像文件。
1、镜像制作
# 下载进行并运行容器
[root@zhurs ~]# docker pull centos:7.8.2003
[root@zhurs ~]# docker images
[root@zhurs ~]# docker run -itd -u root --privileged=true --name centos7.8 --restart=always centos:7.8.2003
[root@zhurs ~]# docker ps
[root@zhurs ~]# docker exec -it centos7.8 /bin/bash
# 容器中制作测试数据
[root@196669708a19 /]# cd /root/
[root@196669708a19 ~]# echo "test" > a.txt
[root@196669708a19 ~]# cat a.txt
test
# 将容器导出tar包
# 语法:docker export -o 自定义.tar 容器名或容器ID
[root@zhurs ~]# docker export -o centos7.8-1.tar centos7.8
或
# 语法:docker export 容器名或容器ID > 自定义.tar
[root@moscow-1 ~]# docker export centos7.8 > centos7.8-1.tar
2、导入镜像到宿主机(运行容器并验证)
# 导入镜像
[root@zhurs ~]# docker import centos7.8-1.tar centos:v7.8
[root@zhurs ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos v7.8 2b36201c960d 6 seconds ago 341MB
# 查看测试数据
[root@zhurs ~]# docker run -itd -u root --privileged=true --name centos7.8-test --restart=always centos:v7.8 /bin/bash
[root@zhurs ~]# docker exec -it centos7.8-test /bin/bash
[root@7eac1959940b /]# cd /root/
[root@7eac1959940b ~]# cat a.txt
test # 数据保持一致
三、通过容器创建本地镜像
使用 docker commit 指令,把一个正在运行的容器,直接提交为一个本地镜像。
1、制作镜像
# 制作测试数据
[root@196669708a19 ~]# echo "abc" > b.txt
# 语法:docker commit -m "描述" -a "作者" 容器名或容器ID 自定义镜像名:tag
[root@zhurs ~]# docker commit -m "first images version" -a "zhurs" centos7.8 centos:v1
2、运行容器并验证
# 查看测试数据
[root@zhurs ~]# docker run -itd -u root --privileged=true --name centos7.8-v1 --restart=always centos:v1 /bin/bash
[root@zhurs ~]# docker exec -it centos7.8-v1 /bin/bash
[root@6ec514bc44c7 /]# cd root/
[root@6ec514bc44c7 ~]# cat b.txt
abc # 数据保持一致
四、通过Dockerfile创建镜像
Dockerfile 是一个用来构建镜像的文本文件,docker build命令用于根据给定的Dockerfile构建Docker镜像。
1、创建 Dockerfile 文件
[root@zhurs ~]# mkdir dockertest
[root@zhurs ~]# cd dockertest/
[root@zhurs dockertest]# vim Dockerfile
#This is a test # 注释
FROM centos:v7.8 # FROM 基础镜像(已存在)
MAINTAINER test test@zhurs # MAINTAINER 描述 创建人
RUN yum install -y wget # RUN shell命令
RUN echo "hello" >> uu.txt
RUN mkdir /mytest
# 注:如果不加路径,则创建的文件默认在 / 下
# 此处仅做简单演示,还有很多语法指令,后续会再提到
# ...
2、创建镜像
[root@zhurs dockertest]# docker build -t centos:v2 .
3、运行容器并验证
[root@zhurs dockertest]# docker run -itd -u root --privileged=true --restart=always --name centos-v2 centos:v2 /bin/bash
[root@zhurs dockertest]# docker exec -it centos-v2 /bin/bash # 进入容器

五、镜像迁移
保存一台宿主机上的镜像为tar文件,然后可以导入到其他的宿主机上。很简单就两步:save打包和load导入。
1、save打包
[root@zhurs ~]# docker save -o nginx.tar daocloud.io/library/nginx
# 会在当前目录生成nginx.tar包
2、load导入
[root@test ~]# docker load < nginx.tar
[root@test ~]# docker images
#导入后查看镜
2918





