Docker高级

目标

掌握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文件,名称必须是这个Dockerfilevi 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就是完成了
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值