docker 基本操作Ⅱ(关于镜像操作)

1 通过模板创建镜像

- 导入镜像基本操作

https://openvz.org/Download/template/precreated 在这个网址里面下载对应的模板
[[email protected] src]# wget http://download.openvz.org/template/precreated/centos-7-x86_64-minimal.tar.gz //下载centos7的模板
[[email protected] src]# cat centos-7-x86_64-minimal.tar.gz |docker import - centos7 //导入镜像
sha256:3e6c83d2f3749ae4cde27673354cab305bfdc360e40d10d072f6a7dfd3edcdca
[[email protected] 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
[[email protected] src]# docker run -itd centos7 bash//将镜像启动centos7的容器
67c68340c58643e4e085dc04fe7552bad4ff6c41c612c26e9ce99e63b4872317
[[email protected] src]# docker exec -it 67c68340c5 bash //进入到centos7的容器里
[[email protected] /]# cat /etc/issue //查看版本
[[email protected] /]# 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

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

[[email protected] ~]# docker save -o centos7-daochu centos7// -o 后面跟的是centos7-daochu(导出后的文件名)centos7这个是要导出的镜像名
[[email protected] ~]# docker rm -f 67c68340c586//删除运行的容器
67c68340c586
[[email protected] ~]# docker rmi 3e6c83d2f374 删除镜像
Untagged: centos7:latest
Deleted: sha256:3e6c83d2f3749ae4cde27673354cab305bfdc360e40d10d072f6a7dfd3edcdca
Deleted: sha256:788edba9eaa8ade63d8ba9d5747281c5da2b34b12a6c80f4dffd8ad9e05f68c1
[[email protected] ~]# docker images //查看没有镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos_with_net     latest              87dde0ff7187        22 hours ago        277MB
centos              latest              d123f4e55e12        10 days ago         197MB
[[email protected] ~]# docker load --input centos7-daochu //恢复镜像(恢复镜像还有一个命令是docker load < centos7-daochu
788edba9eaa8: Loading layer [==================================================>]  446.1MB/446.1MB
Loaded image: centos7:latest
[[email protected] ~]# 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

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

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

2 容器管理

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

3 仓库管理

- 创建私有仓库

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

- 将镜像上传到私有仓库

[[email protected] ~]# docker tag centos7 192.168.212.10:5000/centos7 //标记一下tag,必须要带有私有仓库的ip:port
[[email protected] ~]# 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
[[email protected] ~]# 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
解决方法如下:
[[email protected] ~]# vi /etc/docker/daemon.json //更改配置文件
{ "insecure-registries":["192.168.212.10:5000"] }
如上指定一个私有仓库的地址,这个地址是宿主机的地址
[[email protected] ~]# systemctl restart docker //重启服务
[[email protected] ~]# docker start ef587be45616 //启动私有仓库的容器
ef587be45616
[[email protected] ~]# 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
[[email protected] ~]# curl 127.0.0.1:5000/v2/_catalog //查看到推送上来的镜像
{"repositories":["centos7"]}

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

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

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

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

4 数据管理

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

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

[[email protected] ~]# docker run -tid -v /data/:/data centos7 bash ////-v 用来指定挂载目录,:前面的/data/为宿主机本地目录,:后面的/data/为容器里的目录,会在容器中自动创建
bc7f95597ceb71a3ebfcb5f4955d171b69f740c9598396eae1234966d68d1f81
[[email protected] ~]# 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
[[email protected] ~]# docker exec -it bc7f9559 bash
[[email protected] /]# mkdir /data/123 之后在容器中创建一个目录
[[email protected] /]# exit
[[email protected] ~]# ls /data/ 在宿主机可以查看到在容器中创建的目录
123/       backup/    gitroot/   .htpasswd  mariadb/   wwwroot/

- 挂载数据卷

[[email protected] ~]# docker ps //这里需要先查看容器的名字centos7的为sharp_kepler
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
[[email protected] ~]# docker run -itd --volumes-from sharp_kepler  centos7  bash //--volumes-from后面跟容器的名字,之后在跟新的容器名
12204913c07468253f58a52c52e328ff5cdb1d01866ae55e86d7c9f088a0bf2f

- 定义数据卷容器

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

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

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

时间: 2024-10-08 02:27:59

docker 基本操作Ⅱ(关于镜像操作)的相关文章

Docker学习之镜像操作

使用Docker镜像 以下都是Docker镜像的一系列重要名操作,包括获取.查看.搜索.删除.创建.存出或载入.上传等.可使用docker image help命令查看帮助. 1.获取镜像(pull) 使用pull子命令下载镜像 格式为: docker [image] pull NAME[:TAG],其中,NAME是镜像仓库名称,用以区分镜像, TAG是镜像的标签,往往用来表示版本信息,如果不显示指定TAG,则默认为latest标签,这会下载仓库中最新版本的镜像. 例如获取一个centos系统的

【Docker】docker 的常用命令&amp;操作

一.在linux虚拟机上安装docker XShell1:检查内核版本,必须是3.10及以上 uname -r2:安装docker yum install docker3:输入y确认安装4:启动docker [[email protected] ~]# systemctl start docker [[email protected] ~]# docker -v Docker version 19.03.2, build 6a30dfc5:开机启动docker [[email protected

Docker架构、镜像及容器的基本操作

Docker架构.镜像及容器的基本操作 前言引导 Docker是在Linux容器里运行应用的开源工具,是一种轻量级的虚拟机,诞生于2013年.Docker的设计宗旨:Build.Ship and Run Any.Anywhere,即通过对应用组件的封装.发布.部署.运行等生命周期的管理,达到应用组件级别的"一次封装,到处运行"的目的. Docker概述 如上图所示,Docker的logo设计为蓝色鲸鱼,拖着许多集装箱.其中鲸鱼可以看作为宿主机,而集装箱可以理解为相互隔离的容器,每个集装

(五)Docker镜像管理1之镜像操作

这篇文章将介绍镜像的一般操作,包括查看.查找.下载.删除等. 下载镜像 使用下面的命令来下载镜像 docker pull 镜像名称或者镜像名称:标签 列出本地镜像 使用下面的命令来列出本地镜像 docker images 查看镜像内部的层 使用下面的命令来查看镜像内部的封装层 docker history 镜像ID或者名称:标签 这里面展示此镜像封装中的所有层以及每层执行的什么操作. 查找HUB中的镜像 使用下面的命令查找HUB中的镜像 docker search 关键字 这里搜索出来的就是HU

Docker学习笔记(2)-docker镜像操作

本节将会涉及Docker的镜像操作. 1. 获取镜像 如何获取Docker Hub上的镜像?可通过docker pull命令获取,其格式为: docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签],具体可通过docker pull --help命令查看. Docker镜像仓库地址的格式一般为<域名/IP>[:端口号],仓库名一般为两段式名称,即<用户名>/<软件名>,对于Docker Hub,默认的用户名为library

Docker 镜像操作

概念 image 镜像: 层叠的只读文件系统,比如有Linux针对于docker而创建的最小的镜像,和其他共享的镜像.简言之就是系统镜像文件.利用面向对象的思想,可以认为image就是一个类,而容器就该类的一个实例. Docker镜像的层次如下: 最底端是一个引导文件系统,即bootfs,这很像典型的Linux/Unix的引导文 件系统.Dockei?用户几乎永远不会和引导文件系统有什么交互.实际上,当一个容器启动 后,它将会被移到内存中,而引导文件系统则会被卸载(unmount),以留出更多的

Docker的安装、镜像操作、容器操作及资源控制

Docker概述 Docker是在linux容器里运行应用的开源工具,是一种轻量级的虚拟机.Docker包含三大核心概念,分别是:镜像.容器和仓库.Docker的容器技术可以在一台主机上轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.通过这种容器打包应用程序,意味着简化了重新部署.调试这些琐碎的重复工作.极大地提高了工作效率. Docker容器与传统虚拟化的比较 特性 Docker容器 虚拟机 启动速度 秒级 分钟级 计算能力消耗 几乎无 消耗50% 性能 接近原生 弱于 单机系统支

docker镜像操作常用命令

镜像操作 检索 拉取 列表 删除 原文地址:https://www.cnblogs.com/tripleDemo/p/11032925.html

Docker基本介绍和操作

Docker基本介绍和操作 Docker基本介绍 什么是Docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护.Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类

docker技术剖析--镜像、容器管理

防伪码:博观而约取,厚积而薄发                                 docker技术剖析--镜像.容器管理 一.Docker简介 Docker是什么? Docker的英文本意是"搬运工",在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的.可移植的.自管理的组件,可以在任何主流系统中开发.调试和运行. 说白了,docker是一种用了新颖方式实现的轻量级虚拟机,