目标
掌握Docker迁移和备份
能够运用Dockerfile编写创建容器的脚本
能够搭建和使用Docker私有仓库
迁移与备份
容器保存为镜像
在实际使用中,我们常常需要将一个服务器的容器部署到另外一个服务器,就需要先将这个容器保存为镜像,然后在另一个服务器恢复镜像即可。
我们可以通过以下命令将容器保存为镜像
docker commit mynginx mynginx_i
比如我们已经部署了一个有静态页面的nginx服务,我们将这个mynginx容器保存为镜像mynginx_i
现在我们将基于新创建的镜像mynginx_i
创建一个新的容器mynginx2
,宿主机使用81端口来映射容器的80端口
docker run -id --name=mynginx2 -p 81:80 mynginx_i
浏览器输入:http://192.168.2.8:81/
镜像备份
我们可以通过以下命令将镜像保存为tar 文件,备份时间稍长
docker save -o mynginx.tar mynginx_i
镜像恢复与迁移
首先我们先删除掉mynginx_img镜像 然后执行此命令进行恢复,时间比备份快
docker load -i mynginx.tar
-i 输入的文件
执行后再次查看镜像,可以看到镜像已经恢复
Dockerfile
什么是Dockerfile
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
3、对于运维人员:在部署时,可以实现应用的无缝移植。
常用命令
FROM 设置基础镜像
MAINTAINER 作者,可以省略
ENV 设置环境变量,比如设置jdk的环境变量
RUN 用来执行一个命令,最常见的是创建目录
WORKDIR 设置当前工作目录,设置之后,前面的所有命令都是基于当前目录进行的
使用脚本创建镜像
用构建jdk1.8镜像为例,基础镜像为centos7
创建一个目录:mkdir -p /usr/local/dockerjdk8
我们将在这目录下创建Dockcerfile,并将jdk8的包也放在目录下
创建Dockerfile文件,名称必须是这个Dockerfile:vi Dockerfile
注意需要将#和后面的注释去掉
FROM centos:7 #设置centos:7作为基础镜像
MAINTAINER itcast #创建人
WORKDIR /usr #设置/usr为当前工作目录
RUN mkdir /usr/local/java #创建一个java的目录
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java #上传并自动解压
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171 #设置java环境变量,如果不知道可以在宿主机解压看路径
ENV JRE_HOME $JAVA_HOME/jre #设置jre环境变量
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH #设置classpath环境变量,注意使用冒号:分割
最关键的步骤,构建:docker build -t="jdk1.8" .
-t=jdk1.8
指定镜像名称,点.
表示在当前目录中查找Dockerfile
文件(所以前面创建的文件名称必须是Dockerfile)
查看镜像:docker images
发现已经多了一个刚刚创建的jdk1.8的镜像
Docker私有仓库
docker有官方的仓库了,为什么还要搭建私有仓库呢?
其实官方仓库主要是存储一些通用的镜像,比如tomcat镜像,nginx镜像。
而对于私有仓库来说,一般存储企业内部的一些开发的应用,作用就是为了在一个局域网内部可以共享这些镜像,比如从一台服务器拷贝镜像到另外一台服务器,通过拷贝导出的方式,是很麻烦的。
如果我们通过将我们的镜像打包上传到私有仓库,另外一台服务器直接下载需要的镜像,这样就方便多了。
docker的私有仓库其实也是一个镜像。
私有仓库搭建与配置
拉取私有仓库镜像:docker pull registry
启动私有仓库容器:docker run -di --name=registry -p 5000:5000 registry
打开浏览器 输入地址http://192.168.184.141:5000/v2/_catalog
看到 {"repositories":[]}
表示私有仓库搭建成功并且内容为空
修改daemon.json:vi /etc/docker/daemon.json
添加以下内容,保存退出。
{"insecure-registries":["192.168.2.9:5000"]}
此步用于让 docker信任私有仓库地址,否则本地镜像无法上传。
为了让修改生效,重启docker 服务:systemctl restart docker
镜像上传至私有仓库
标记此镜像为私有仓库的镜像:docker tag jdk1.8 192.168.2.9:5000/jdk1.8
再次启动私服容器:docker start registry
上传标记的镜像:docker push 192.168.2.9:5000/jdk1.8
下载标记的镜像:docker pull 192.168.2.9:5000/jdk1.8
看到Pushed就是完成了