6. 迁移与备份
其中涉及到的命令有:
- docker commit 将容器保存为镜像
- docker save 将镜像备份为tar文件
- docker load 根据tar文件恢复为镜像
6.1 将Docker容器保存为镜像
使用docker commit命令可以将容器保存为镜像。
命令形式:docker commit 容器名称 镜像名称
# 保存nginx容器为镜像 docker commit mynginx mynginx
此镜像的内容就是当前容器的内容,接下来你可以用此镜像再次运行新的容器
6.2 镜像备份
使用docker save命令可以将已有镜像保存为tar 文件。
命令形式:docker save –o tar文件名 镜像名
# 保存镜像为文件 docker save -o mynginx.tar mynginx
6.3 镜像恢复与迁移
使用docker load命令可以根据tar文件恢复为docker镜像。
命令形式:docker load -i tar文件名
# 停止mynginx容器 docker stop mynginx # 删除mynginx容器 docker rm mynginx # 删除mynginx镜像 docker rmi mynginx # 加载恢复mynginx镜像 docker load -i mynginx.tar # 在镜像恢复之后,基于该镜像再次创建启动容器 docker run -di --name=mynginx -p 80:80 mynginx
7. Dockerfile文件
7.1 什么是Dockerfile文件
前面的课程中已经知道了,要获得镜像,可以从Docker仓库中进行下载。那如果我们想自己开发一个镜像,那该如何做呢?答案是:Dockerfile
Dockerfile其实就是一个文本文件,由一系列命令和参数构成,Docker可以读取Dockerfile文件并根据Dockerfile文件的描述来构建镜像。
Dockerfile文件内容一般分为4部分:
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时执行的指令
7.2 Dockerfile常用命令
7.3 使用Dockerfile创建镜像
# 1、创建目录 mkdir –p /usr/local/dockerjdk8 cd /usr/local/dockerjdk8 # 2、下载jdk-8u202-linux-x64.tar.gz并上传到服务器(虚拟机)中的/usr/local/dockerjdk8目录 # 3、在/usr/local/dockerjdk8目录下创建Dockerfile文件,文件内容如下: vi Dockerfile FROM centos:7 MAINTAINER ITCAST WORKDIR /usr RUN mkdir /usr/local/java ADD jdk-8u202-linux-x64.tar.gz /usr/local/java/ ENV JAVA_HOME /usr/local/java/jdk1.8.0_202 ENV JRE_HOME $JAVA_HOME/jre ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH ENV PATH $JAVA_HOME/bin:$PATH # 4、执行命令构建镜像;不要忘了后面的那个 . docker build -t='jdk1.8' . # 5、查看镜像是否建立完成 docker images
7.4 基于镜像创建容器
基于刚刚创建的镜像 jdk1.8 创建并启动容器进行测试;
# 创建并启动容器 docker run -it --name=testjdk jdk1.8 /bin/bash # 在容器中测试jdk是否已经安装 java -version
8. Docker私有仓库
8.1 私有仓库搭建与配置
Docker官方的Docker hub(https://hub.docker.com)是一个用于管理公共镜像的仓库,我们可以从上面拉取镜像到本地,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜像放到公网当中,那么我们就需要搭建自己的私有仓库来存储和管理自己的镜像。
私有仓库搭建步骤:
# 1、拉取私有仓库镜像 docker pull registry # 2、启动私有仓库容器 docker run -di --name=registry -p 5000:5000 registry # 3、打开浏览器 输入地址http://宿主机ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库搭建成功 # 4、修改daemon.json vi /etc/docker/daemon.json # 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将宿主机ip修改为自己宿主机真实ip {"insecure-registries":["宿主机ip:5000"]} # 5、重启docker 服务 systemctl restart docker docker start registry
8.2 将镜像上传至私有仓库
操作步骤:
# 1、标记镜像为私有仓库的镜像 docker tag jdk1.8 宿主机IP:5000/jdk1.8 # 2、再次启动私有仓库容器 docker restart registry # 3、上传标记的镜像 docker push 宿主机IP:5000/jdk1.8 # 4、输入网址查看仓库效果
8.3 从私有仓库拉取镜像
8.3.1 私有仓库所在服务器拉取镜像
若是在私有仓库所在的服务器上去拉取镜像;那么直接执行如下命令:
# 因为私有仓库所在的服务器上已经存在相关镜像;所以先删除;请指定镜像名,不是id docker rmi 服务器ip:5000/jdk1.8 #拉取镜像 docker pull 服务器ip:5000/jdk1.8 #可以通过如下命令查看 docker 的信息;了解到私有仓库地址 docker info
8.3.2 其它服务器拉取私有仓库镜像
大多数情况下,都是某台服务器部署了私有镜像仓库之后;到其它服务器上从私有仓库中拉取镜像,若要拉取私有仓库镜像需要去修改docker的配置文件,设置启动时候的仓库地址。
# 打开配置文件 vi /usr/lib/systemd/system/docker.service # 在打开的上述文件中按照下面的图,添加如下的内容;注意修改下面内容中的ip地址 --add-registry=192.168.12.135:5000 --insecure-registry=192.168.12.135:5000 \ # 修改完后需要重新加载docker配置文件并重启docker systemctl daemon-reload systemctl restart docker
在重启之后;那么则可以去拉取私有仓库中的镜像:
# 执行拉取镜像命令并查看 docker pull jdk1.8 docker images
整体docker的私有仓库运作形如下图: