一、迁移与备份
本质就是把安装好应用的容器打包成镜像,提供给其他机器使用,别的机器只需要load回来,就能看到image--run起来,直接容器就跑起来了。
1.通过以下命令将容器保存为镜像:
docker commit mycentos7 centos7my #docker commit 容器名 新的镜像名
打包之后查看镜像会发现新的镜像centos7my
然后我们可以把centos7my镜像run起来,里面的文件和mycentos7容器的文件一样
2.镜像备份
通过以下命令将镜像保存为tar文件,之后可以通过U盘等形式给别人使用
docker save -o centos7my.tar centos7my
3.镜像恢复与迁移
首先需要先删除掉centos7my的之前的镜像,然后执行此命令进行恢复
docker load -i centos7my.tar #-i 输入的文件
执行后再次查看镜像,可以看到镜像已经恢复
二、导入与导出
1.导出
如果要导出本地某个容器,可以使用docker export命令
2.导入
可以使用docker import从容器快照文件中再导入为镜像
[root@localhost ~]# cat centos.tar | docker import - test/centos:v1.0
sha256:e1e54eebb51a5ddd8f3d4bc1ed9cb8a4ce2841a7e265bf
三、Dockerfile
1.什么是DockerFile
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像(本质:dockerfile能生成镜像)
一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
注意:文件名必须是Dockerfile
2.常用命令
FROM image_name:tag 定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name 声明镜像的创建者 (可有可无)
ENV key value 设置环境变量 (可以写多条)
RUN command 是Dockerfile的核心部分(可以写多条),linux命令
RUN wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz (下载)
RUN tar -xzf Python-3.6.10.tgz (解压)
ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file 和ADD相似,但是如果有压缩文件并不能解压
WORKDIR path_dir 设置工作目录
案例:在python下安装django 1.11.9和requests模块
1.先创建一个Dokcerfile,基于这个Dockerfile来创建镜像
FROM python:3.6 #基于python3.6来创建这个镜像
MAINTAINER xxx #作者xxx,可写可不写
RUN pip3 install django==1.11.9 #运行的命令下载安装django模块
RUN pip3 install requests #运行下载安装requests模块
WORKDIR /home #设置工作目录,这里看需求设置
2.执行命令构建镜像 (注意:不要忘记后面的 . 表示在当前文件下查找Dockerfile文件,然后执行里面的内容)
docker build -t='django1.11.9' . #-t后面加的是生成镜像的名字
在安装django和requests模块的时候出现连接超时的问题ReadTimeoutError,需要更换一下国内的下载源,参考链接:https://www.cnblogs.com/dyd520/p/11867345.html
3.查看镜像是否建立完成
docker images
查询到刚刚用Dockerfile生成的django1.11.9的镜像
把创建好的镜像run起来,pip list检查django1.11.9和requests模块都安装好了,说明Dockerfile成功
四、Docker私有仓库 (是公司自己存放docker镜像image的地方,自己做的镜像)
(1)私有仓库搭建与配置
1.拉取私有仓库镜像
docker pull registry
2.启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry #端口映射自己设定
3.打开浏览器输入地址101.132.167.242:5000/v2/_catalog看到,表示私有仓库搭建成功并且内容为空。(ip地址是自己的远程服务器)
{"repositories":[]}
注意:你设置的端口号需要在远程服务器中已经开启,不然访问不了
4.修改daemon.json
vi /etc/docker/daemon.json
5.添加一下内容,保存退出
{"insecure-registries":["101.132.167.242:5000"]}
6.重启docker服务
systemctl restart docker
(2)镜像上传至私有仓库
1.先标记镜像为私有仓库的镜像
docker tag django1.11.9 101.132.167.242:5000/django1.11.9 #docker tag 镜像名 标签名(一般都加上ip地址)
打完标签之后会多出一个新的镜像
2.再次启动私服容器
docker start registry
3.把镜像提交到私有仓库中
docker push 101.132.167.242:5000/django1.11.9 #刚才标记的镜像名
访问ip地址 101.132.167.242:5000/v2/_catalog ,看到显示的是标记的镜像名
五、私有仓库镜像的使用(本地拉取镜像)
前面已经把镜像存放在私有仓库了,先把原先的镜像删除,试着从私有仓库拉出镜像
先删除之前的101.132.167.242:5000/django1.11.9镜像
docker rmi 101.132.167.242:5000/django1.11.9
需要拉取私服的镜像直接pull,镜像就拉下来了
docker pull 101.132.167.242:5000/django1.11.9
其他服务器拉取本服务器的镜像(121服务器向101的服务器拉取镜像)
1.在121服务器上修改daemon.json(没有该文件就创建)
vi /etc/docker/daemon.json
添加下面内容,保存退出
{ "insecure-registries":["101.132.167.242:5000"] }
2.重启121服务器的docker服务
systemctl restart docker
3.121服务器拉取101服务器的镜像
docker pull 101.132.167.242:5000/redis:v5 #注意:如果你设置镜像的版本,记得带上镜像的标签(也是版本),这个版本是在101服务器上设置的
六、将镜像上传至dockerhub官网
1.首先,去 hub.docker.com 或 cloud.docker.com注册一个账户。然后,用下面的命令登录。
docker login
2.为本地的image标注用户和版本
语法
docker tag 镜像名 用户名/存储仓库:镜像版本
例如
docker tag nginx wangccdocker/mynginx:first #存储仓库可以先去官网建立,如果不建立在上传镜像的时候也会自动创建
3.发布镜像
语法
docker push 用户名/存储仓库:版本
将你的标记镜像上传到存储库
docker push wangccdocker/mynginx:first
在官网查看上传的镜像,如果有人需要使用直接 docker pull wangccdocker/mynginx:first