博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
docker 基本操作Ⅱ(关于镜像操作)
阅读量:6539 次
发布时间:2019-06-24

本文共 7122 字,大约阅读时间需要 23 分钟。

1 通过模板创建镜像

- 导入镜像基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
https:
//openvz
.org
/Download/template/precreated 
在这个网址里面下载对应的模板
[root@chy src]
# wget http://download.openvz.org/template/precreated/centos-7-x86_64-minimal.tar.gz //下载centos7的模板
[root@chy src]
# cat centos-7-x86_64-minimal.tar.gz |docker import - centos7 //导入镜像
sha256:3e6c83d2f3749ae4cde27673354cab305bfdc360e40d10d072f6a7dfd3edcdca
[root@chy src]
# docker images //查看已经导入的镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos7             latest              3e6c83d2f374        2 minutes ago       435MB
centos_with_net     latest              87dde0ff7187        21 hours ago        277MB
centos              latest              d123f4e55e12        10 days ago         197MB
[root@chy src]
# docker run -itd centos7 bash//将镜像启动centos7的容器
67c68340c58643e4e085dc04fe7552bad4ff6c41c612c26e9ce99e63b4872317
[root@chy src]
# docker exec -it 67c68340c5 bash //进入到centos7的容器里
[root@67c68340c586 /]
# cat /etc/issue //查看版本
[root@67c68340c586 /]
# uname -a //查看内核(这个内核与宿主机的内核是一致的,如果我的镜像的模板是centos6的,我的宿主机是centos7的那我最后在docker镜像里查看的内核也就是centos7的。
Linux 67c68340c586 3.10.0-514.el7.x86_64 
#1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

- 导出/恢复镜像基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@chy ~]
# docker save -o centos7-daochu.tar centos7// -o 后面跟的是centos7-daochu(导出后的文件名)centos7这个是要导出的镜像名
[root@chy ~]
# docker rm -f 67c68340c586//删除运行的容器
67c68340c586
[root@chy ~]
# docker rmi 3e6c83d2f374 删除镜像
Untagged: centos7:latest
Deleted: sha256:3e6c83d2f3749ae4cde27673354cab305bfdc360e40d10d072f6a7dfd3edcdca
Deleted: sha256:788edba9eaa8ade63d8ba9d5747281c5da2b34b12a6c80f4dffd8ad9e05f68c1
[root@chy ~]
# docker images //查看没有镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos_with_net     latest              87dde0ff7187        22 hours ago        277MB
centos              latest              d123f4e55e12        10 days ago         197MB
[root@chy ~]
# docker load --input centos7-daochu.tar //恢复镜像(恢复镜像还有一个命令是docker load < centos7-daochu
788edba9eaa8: Loading layer [==================================================>]  446.1MB
/446
.1MB
Loaded image: centos7:latest
[root@chy ~]
# docker images //查看已经恢复成功
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos7             latest              3e6c83d2f374        38 minutes ago      435MB
centos_with_net     latest              87dde0ff7187        22 hours ago        277MB
centos              latest              d123f4e55e12        10 days ago         197MB

导出镜像还有一个命令是如下

1
2
docker 
export 
container_id > 
file
.
tar 
// 
导出容器,可以迁移到其他机器上,需要导入
cat 
file
.
tar 
|docker 
import 
- aming_test  
//
这样会生成aming_test的镜像(导入镜像)

2 容器管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@chy ~]
# docker create -it centos7 bash //创建容器但是容器没有启动
[root@chy ~]
# docker start 438606c //启动容器
438606c
[root@chy src]
# docker run -itd centos7 //这个也是启动容器之不多这个是create与start融为一体了
[root@chy ~]
# docker run -itd --name centos6 centos_with_net bash // --name 给容器自定义名字
46fe5b5e5d2768727e8256e79ba6a3b3255394bda5398ec4011526fec8437dbc
[root@chy ~]
# docker ps //查看定义的名称centos6,这个在进入容器的时候就可以直接跟名字不用给它的id了
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
46fe5b5e5d27        centos_with_net     
"bash"              
7 seconds ago       Up 5 seconds                            centos6
[root@chy ~]
# docker run --rm -it centos_with_net  bash -c "sleep 30" //--rm 可以让容器退出后直接删除,在这里命令执行完容器就会退出
[root@chy ~]
# docker logs 34effba //获取到容器的运行历史信息
111
[root@chy ~]
# docker exec -it 34effba bash //可以临时打开一个虚拟终端,并且exit后,容器依然运行着
[root@chy ~]
# docker rm 34effba//删除容器,如果要删除的是一个运行的容器需要加-m 后面在跟container_id,(container_id是ps的时候查看到的)
34effba
[root@chy ~]
# docker start $(docker ps -a | awk '{ print $1}' | tail -n +2) //启动所有的容器命令
46fe5b5e5d27
438606c2d465
[root@chy ~]
# docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2) //删除所有的容器命令
46fe5b5e5d27
438606c2d465
docker rmi $(docker images | 
awk 
'{print $3}' 
|
tail 
-n +2) 
//
删除所有的镜像

3 仓库管理

- 创建私有仓库

1
2
[root@chy ~]
# docker pull registry //下载registry 镜像,registy为docker官方提供的一个镜像,我们可以用它来创建本地的docker私有仓库
[root@chy ~]
#  docker run -d -p 5000:5000 registry //以registry镜像启动容器,-p会把容器的端口映射到宿主机上,:左边为宿主机监听端口,:右边为容器监听端口

- 将镜像上传到私有仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@chy ~]
# docker tag centos7 192.168.212.10:5000/centos7 //标记一下tag,必须要带有私有仓库的ip:port
[root@chy ~]
# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
192.168.212.10:5000
/centos7   
latest              3e6c83d2f374        2 hours ago         435MB
centos7                       latest              3e6c83d2f374        2 hours ago         435MB
centos_with_net               latest              87dde0ff7187        24 hours ago        277MB
registry                      latest              a07e3f32a779        10 days ago         33.3MB
centos                        latest              d123f4e55e12        10 days ago         197MB
[root@chy ~]
# docker push 192.168.212.10:5000/centos7 //上传时报了如下的错误
The push refers to a repository [192.168.212.10:5000
/centos7
]
Get https:
//192
.168.212.10:5000
/v2/
: http: server gave HTTP response to HTTPS client
解决方法如下:
[root@chy ~]
# vi /etc/docker/daemon.json //更改配置文件
"insecure-registries"
:[
"192.168.212.10:5000"
] }
如上指定一个私有仓库的地址,这个地址是宿主机的地址
[root@chy ~]
# systemctl restart docker //重启服务
[root@chy ~]
# docker start ef587be45616 //启动私有仓库的容器
ef587be45616
[root@chy ~]
# docker push 192.168.212.10:5000/centos7 //上传镜像到私有仓库
The push refers to a repository [192.168.212.10:5000
/centos7
]
788edba9eaa8: Pushed 
latest: digest: sha256:d57bd79f46a10c520a62814d33a13c7c4c2b10ac143650effc9c8e35b2094565 size: 529
[root@chy ~]
# curl 127.0.0.1:5000/v2/_catalog //查看到推送上来的镜像
{
"repositories"
:[
"centos7"
]}

- 怎么下载私有仓库的镜像

1
[root@chy ~]
# docker pull 192.168.212.10:5000/centos7 //直接docker pull即可,这里的ip一定要是私有仓库的地址

如果在其它机器下载私有仓库切记不要忘记指定私有仓库地址的ip。([root@chy ~]# vi /etc/docker/daemon.json //更改配置文件

{ "insecure-registries":["192.168.212.10:5000"] })

 4 数据管理

- 容器是由镜像启动的,这时如果将容器关闭或者是删除那容器里面的数据去哪了呢?这时数据也会一并的消除,这样肯定是不符合我们的要求的,所以呢想到了一个方法就是将宿主机的一个目录挂载到容器中,这时容器里产生的数据都会在宿主机的目录中显示。下面就是如何将容器中的数据搞到容器中

- 挂载本地的目录到容器里

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@chy ~]
# docker run -tid -v /data/:/data centos7 bash -v 用来指定挂载目录,:前面的/data/为宿主机本地目录,:后面的/data/为容器里的目录,会在容器中自动创建
bc7f95597ceb71a3ebfcb5f4955d171b69f740c9598396eae1234966d68d1f81
[root@chy ~]
# ls -l /data/ 查看宿主机/data目录
总用量 16
drwxr-xr-x 3 root   root   4096 9月   2 18:38 backup
drwxr-xr-x 3 root   root   4096 10月 27 06:15 gitroot
drwxr-xr-x 9 mysql1 mysql1 4096 11月 14 22:47 mariadb
drwxr-xr-x 5 root   root   4096 8月   5 04:40 wwwroot
[root@chy ~]
# docker exec -it bc7f9559 bash
[root@bc7f95597ceb /]
# mkdir /data/123 之后在容器中创建一个目录
[root@bc7f95597ceb /]
# exit
[root@chy ~]
# ls /data/ 在宿主机可以查看到在容器中创建的目录
123/       backup/    gitroot/   .htpasswd  mariadb/   wwwroot/

- 挂载数据卷

1
2
3
4
5
6
[root@chy ~]
# docker ps //这里需要先查看容器的名字centos7的为sharp_kepler(查看names下面的名字)
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
bc7f95597ceb        centos7             
"bash"                   
8 minutes ago       Up 8 minutes                                 sharp_kepler
ef587be45616        registry            
"/entrypoint.sh /e..."   
About an hour ago   Up About an hour    0.0.0.0:5000->5000
/tcp   
elastic_varahamihira
[root@chy ~]
# docker run -itd --volumes-from sharp_kepler  centos7  bash //--volumes-from后面跟容器的names的名字,之后在跟一个镜像名
12204913c07468253f58a52c52e328ff5cdb1d01866ae55e86d7c9f088a0bf2f

- 定义数据卷容器

有时候,我们需要多个容器之间相互共享数据,类似于linux里面的NFS,所以就可以搭建一个专门的数据卷容器,然后其他容器直接挂载该数据卷。

1
2
3
4
[root@chy ~]
# docker run -itd -v /data/ --name testvol centos bash 
这里的-
v
是有两层含义的第一层含义是: 冒号是用来交互宿主机与容器的目录的映射,第二层含义是作为数据卷容器就是不加冒号的写法,第二层的含义是用来共享一个目录,所以-
v 
/data
的目录为共享目录
然后让其他容器挂载该数据卷
 
docker run -itd --volumes-from testvol aming123 
bash

希望看过的童鞋多多指教,谢谢!

     本文转自我不是瘦子51CTO博客,原文链接:http://blog.51cto.com/chy940405/1981804,如需转载请自行联系原作者

你可能感兴趣的文章
BZOJ-3894 文理分科 最小割
查看>>
GDB 单步调试汇编
查看>>
SQLAlchemy 几种查询方式总结
查看>>
性能测试工具之安装webbench
查看>>
解决Sencha Touch 2 MVC部署App.json不被识别问题
查看>>
zabbix web端有数据但是没有图形
查看>>
[bzoj 1758][Wc2010]重建计划
查看>>
[PHP相关教程] laravel5.1学习手册[一]基本开发环境配置
查看>>
原生 JS 实现手机验证码倒计时
查看>>
关于产品运营的一些思考
查看>>
Tips For Your Maya Plugin Development
查看>>
数据库设计
查看>>
[转]ubuntu下gcc的安装与使用
查看>>
Spreading the Wealth uva 11300
查看>>
Java中重写与重载的区别
查看>>
docker基础
查看>>
博客更换
查看>>
What – if Anything – Have We Learned From C++?
查看>>
3.13上午重点
查看>>
linux 系统下,忘记密码的快捷解决方法。
查看>>