25.5 通过模板创建镜像
25.6 容器管理
25.7 仓库管理
25.8 数据管理
25.5 通过模板创建镜像
先通过下面网址去下载模板文件,再上传到服务器里http://openvz.org/Download/templates/precreated
把模板导入为镜像
格式:cat 模板镜像文件 | docker import - 镜像名
1
[root@kun01 src]# cat centos-6-x86-minimal.tar.gz | docker import - centos6
模板镜像文件一般为压缩包文件1
2
3
4[root@kun01 src]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos6 latest 6566ecb04304 About a minute ago 512MB
`
可以发现多了一个centos6的镜像
把镜像导出为文件
格式:docker save -o 导出的文件名 镜像名
1
2[root@kun01 src]# docker save -o centos_net.tar centos_net ##把镜像centos_net导出为centos_net.tar文件
导出的文件一般用于备份
通过文件来恢复镜像
格式:docker load < 文件名
或者 docker load --input 文件名
1
2
3[root@kun01 src]# docker load < centos_net.tar
[root@kun01 src]# docker load --input centos_net.tar
把本地镜像上传到官网
格式:docker push 镜像名
1
[root@kun01 src]# docker push centos_net ## 前提是需要先注册一个用户
25.6 容器管理
通过镜像创建容器
格式:docker create -it 镜像名 bash
1
2
3
4
5[root@kun01 src]# docker create -it centos_net bash
[root@kun01 src]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3fe3d103b8b0 centos_net "bash" 2 minutes ago Created
可以发现centos_net启动为容器,当容器并没有启动
启动/关闭/重启容器
格式:docker start/stop/restart 容器id
1
[root@kun01 src]# docker start 3fe3d10
创建并启动容器
格式:docker run -it 镜像名 bash
1
2[root@kun01 src]# docker run -it centos bash
[root@55880ea82e93 /]# ##自动进入容器里面来
这样进入了一个虚拟终端里面,我们可以运行一些命令,使用命令exit
或者ctrl d
退出该bash,当退出后这个容器也会停止 -d
后台运行而不进入容器
自定义容器名字
格式:docker run -itd --name 自定义容器名 镜像名 bash
1
2[root@kun01 src]# docker run -itd --name centos6_1 centos6 bash
容器名字是centos6_1
1 | [root@kun01 src]# docker ps |
NAMES
就是表示自定义容器的名字,启动容器直接认输自定义容器的名字也可以启动1
2[root@kun01 src]# docker exec -it centos6_1 bash ##进入centos6_1容器里
[root@7f07c79b1233 /]#
获取到容器的运行历史信息
格式:docker logs 容器id
1
2
3
4[root@kun01 src]# docker run -itd centos6 bash -c "echo 123" ##创建启动容器并执行命令
[root@kun01 src]# docker logs 037b63ca6
123
进入启动的容器里面
格式:docker exec -it 容器id bash
或者 docker attach 容器id
区别:docker attach 退出终端,容器也会退出。docker exec 退出终端,容器还在运行
1
2
3[root@kun01 src]# docker exec -it centos6_1 bash
[root@kun01 src]# docker attach centos6_1 ##不需要家-it bash
删除容器
格式:docker rm [-f] 容器id
1
[root@kun01 src]# docker rm cdc6436e6
-f
把正在运行的容器删除掉1
2[root@kun01 src]# docker rm -f 7f07c7
7f07c7
把容器导出为文件
格式:docker export 容器id > 文件名
1
[root@kun01 src]# docker export centos6_1 > file.tar
一般把容器导出为文件用于迁移到其他机器上,再到另台机器上把文件导入镜像1
[root@kun01 src]# cat file.tar | docker import - centos6_1
25.7 仓库管理
通过registry
镜像来创建私有仓库
,那么自定义的镜像就可以不需要上传到官网的公共仓库上了
步骤
1.下载registry镜像
1 | [root@kun01 src]# docker pull registry |
2.启动registry镜像为容器
1 | [root@kun01 src]# docker run -d -p 5000:5000 registry |
-p
会把容器的端口映射到宿主机上,:左边为宿主机监听端口
,:右边为容器监听端口
3.让上传的镜像打上固定格式标签
1 | [root@kun01 src]# docker tag centos6 192.168.80.101:5000/centos6 |
标签名固定格式 IP地址:端口/标签名
用于上传私有仓库
- 把标记的镜像给推送到私有仓库
格式:docker push ip地址:端口/镜像名
1
2
3[root@kun01 src]# docker push 192.168.80.101:5000/centos6
The push refers to a repository [192.168.80.101:5000/centos6]
Get https://192.168.80.101:5000/v2/: http: server gave HTTP response to HTTPS client
由于默认是使用https://形式上传文件 因此出错
5.修改配置文件
1 | [root@kun01 src]# vim /etc/docker/daemon.json |
添加下面参数1
{ "insecure-registries":["192.168.80.101:5000"] }
配置文件里面指定添加此参数,需要把之前的加速器地址注释掉
6.重启docker服务和启动registry容器并再次上传
1 | [root@kun01 src]# systemctl restart docker |
小提示: docker重启时所有的容器都自动启动systemctl restart docker && docker start $(docker ps -a -q)
查看私有仓库
格式:curl IP地址:端口/v2/_catalog
1
2[root@kun01 src]# curl 192.168.80.101:5000/v2/_catalog
{"repositories":["centos6"]} ##私有库存里面有centos6镜像
下载私有库存中镜像
格式:docker pull ip地址:端口/镜像名
1
[root@kun01 src]# docker push 192.168.80.101:5000/centos6
前提客户机上安装docker和registry镜像和配置了daemon.json
25.8 数据管理
我们需要多个容器之间相互共享数据,类似于linux里面的NFS,所以就可以搭建一个专门的数据卷容器,相当于把容器中的目录给共享除了,然后其他容器直接挂载该数据卷。
步骤
1.建立数据卷容器
格式:docker run -itd -v 容器的目录 --name 容器别名 镜像名 bash
1
[root@kun01 tmp]# docker run -itd -v /data/ --name testvol centos6_1 bash
-v
后面指定共享容器目录 --name
指定容器的别名
centos6_1镜像启动为容器,名字叫testvol1
2
3[root@kun01 tmp]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6ebb513ead13 centos6_1 "bash" 2 minutes ago Up 2 minutes testvol
2.其他容器挂载该数据卷容器
格式:docker run -itd --volumes-from 容器别名 镜像名 bash
1
[root@kun01 tmp]# docker run -itd --volumes-from testvol centos6 bash
当容器关闭删除时产生的数据会丢失掉,因此可以把本地目录挂载到容器里来保持数据,此时此容器也称数据卷容器,其他容器可以挂载它来同步数据并保持到本地目录中
步骤
1.挂载本地的目录到容器里
格式:docker run -itd -v 本地目录:容器的目录 镜像名 bash
1
[root@kun01 ~]# docker run -itd -v /tmp/:/tmp centos6_1 bash
-v
用来指定挂载目录,:前面的/data/为宿主机本地目录
,:后面的/data/为容器里的目录
,会在容器中自动创建
2.其他容器挂载该数据卷容器
由于没有定义–name 因此容器别名由系统随机定义 可以发现为boring_shockley1
2
3
4
5[root@kun01 tmp]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce916b75047d centos6_1 "bash" 2 hours ago Up 2 hours boring_shockley
[root@kun01 tmp]# docker run -itd --volumes-from boring_shockley centos6 bash
进入刚刚运行的容器创建目录
1 | [root@kun01 tmp]# docker exec -it 82e96c2ed9 bash |
回到本地tmp目录下发现有刚刚创建的目录
1 | [root@kun01 tmp]# ls |