1Docker镜像
Docker运行容器前需要本地存在对应的镜像,如果本地不存,Docker会从镜像仓库下载。
Docker 获取镜像
Docker Hub
上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像。
我们也可以使用
docker search
命令来搜索镜像。
docker search tomcat
获取镜像
从
Docker
镜像仓库获取镜像的命令是
docker pull
其命令格式为:
docker pull [选项] [Docker Registey 地址[:端口号]/] 仓库名[:标签]
具体的选项可以通过 docker pull --help 命令看到,这里我们说一下镜像名称的格式。- Docker 镜像仓库地址: 地址的格式一般是 < 域名 /IP>[: 端口号 ] 。默认地址是 Docker Hub 。- 仓库名:这里的仓库名是两段式名称, 即 < 用户名 >/< 软件名 > 。对于 Docker Hub ,如果不给出用户名,则默认为 library , 也就是官方镜像。
Docker 列出镜像
列出已经下载下来的镜像,使用 docker image ls 命令
docker images // docker image ls
列表包含了 仓库名、标签、镜像 ID 、创建时间 以及 所占用的空间 。 其中仓库名、标签在之前的基础概念已经介绍过了。 镜像 ID 则是镜像的唯一标识 ,一个镜像可以对应多个标签。因此,如果拥有相同的 ID ,因为它们对应的是同一个镜像。
镜像体积
如果仔细观察,会注意到,这里标识的所占用空间和在
DockerHub
上看到的镜像大小不同。这是因为DockerHub
中显示的体积是压缩后的体积。在镜像下载和上传过程中镜像是保持着压缩状态的,因此 DockerHub所显示的大小是网络传输中更关心的流量大小。而
dockerimagels
显示的是镜像下载到本地后,展开的大小,准确说,是展开后的各层所占空间的总和,因为镜像到本地后,查看空间的时候,更关心的是本地磁盘空间占用的大小。另外一个需要注意的问题是,dockerimagels
列表中的镜像体积总和并非是所有镜像实际硬盘消耗。由于Docker
镜像是多层存储结构,并且可以继承、复用,因此不同镜像可能会因为使用相同的基础镜像,从而拥有共同的层。由于Docker
使用
UnionFS
,相同的层只需要保存一份即可,因此实际镜像硬盘占
用空间很可能要比这个列表镜像大小的总和要小的多。
虚悬镜像
镜像列表中,还可以看到一个特殊的镜像,这个镜像既没有仓库名,也没有标签,均为
这个镜像原本是有镜像名和标签的,原来为
tomcat:8.0
,随着官方镜像维护,发布了新版本后,重新
docker
pull tomcat:8.0
时,
tomcat:8.0
这个镜像名被转移到了新下载的镜像身上,而旧的镜像上的这个名称则被取消, 从而成为了 。除了 docker pull
可能导致这种情况,
docker build
也同样可以导致这种现象。由于新旧镜像同 名,旧镜像名称被取消,从而出现仓库名、标签均为 的镜像。这类无标签镜像也被称为 虚悬镜像(dangling image) 。 一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除:
docker image prune
Docker 删除本地镜像
docker image rm [选项] <镜像1> [<镜像2>.....]
用
ID
、镜像名、摘要删除镜像 其中,
<
镜像
>
可以是 镜像短
ID
、镜像长
ID
、镜像名 或者 镜像摘要。
如果要删除本地的镜像,可以使用
docker image rmi / rm
命令
docker image rmi 镜像ID //常用
要删除镜像必须确认此镜像⽬前没有被任何容器使⽤
Docker其它辅助命令
查看本地镜像的
IMAGE ID
docker images -q
查看⼀个镜像的制作历程
docker history 镜像名称
Docker保存镜像
备份本地仓库的镜像
1
⽤
save
⼦命令将本地仓库的镜像保存当前⽬录下
docker save -o tomcat.g.tar 镜像名称
2
将本地目录下的镜像备份文件导⼊到本地
Docker
仓库
# ⽅式⼀(不输出详细信息):
[root@localhost ~]# docker load -i tomcat.g.tar
# ⽅式⼆(输出详细信息):
[root@localhost ~]# docker load < tomcat.g.tar
Docker 容器
容器是
Docker
核心概念
简单的说,容器是独立运行的一个或一组应用,以及它们的运行环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和运行在上面的应用。
1 查看容器状态
docker ps //查看运行的容器
docker ps –a //查看所有的容器(包含运行和退出)
docker container ls
docker container ls–a
2 Docker 启动容器
启动容器有二种方式,一种是基于镜像新建一个容器并启动,一种是将在终止状态(
stopped
)的容器重新启动
docker run
参数 镜像名称
:tag
执⾏的命令
常⽤参数
:
-i 保持和 docker 容器内的交互,启动容器时,运⾏的命令结束后,容器依然存活,没有退出(默认是会退出,即停⽌的)-t 为容器的标准输⼊虚拟⼀个 tty-d 后台运⾏容器--rm 容器在启动后,执⾏完成命令或程序后就销毁--name 给容器起⼀个⾃定义名称-p 宿主机:内部端口
docker run --rm -d --name tomcat1 -p 8080:8080 tomcat
3 查看正在运行的容器
docker ps
CONTAINER ID 容器 ID IMAGE 容器依赖的镜像 COMMAND 启动容器时执⾏的命令或程序 CREATED 容器启动时到现在的相隔时间 STATUS 容器状态 PORTS 宿主机到容器的端⼝映射 注意 : 当运⾏⼀个容器的时候,没有⽤参数 --name 去指定容器名时, Docker 会从⾃⼰的名称库中随机给这个容器起⼀个名字
4 查看所有容器
docker ps -a
5 停止容器
docker stop 9be696a0c283 //停止正在运行容器(或Ctrl+c)
docker container stop tomcat1//停止正运行容器(ID或Names)
6 启动已终止容器
#通过docker ps 找到容器id
docker start 容器名/容器 ID
7 重启已关闭容器
docker restart 9be696a0c283//启动容器(根据ID或NAMES)
8 关闭和删除容器
docker rm 容器ID
9 Docker 守护态运行
更多的时候,需要让
Docker
在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添 加 -d
参数来实现 ,如果不使用 -d
参数运行容器
:
将会在当前宿主机运行。
如果使用了
-d
参数运行容器。此时容器会在后台运行并不会把输出的结果
(STDOUT)
打印到宿主机上面
(
输出结果可 以用 docker logs
查看
)
。
查看控制台结果:
docker logs tomcat1//(ID或Names)
10 Docker 进入容器
某些时候需要进入容器进行操作,使用
docker exec
命令
-i -t 参数 docker exec 后边可以跟多个参数,这里主要说明 -i -t 参数。 只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。 当 -i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。
docker exec -it 容器ID(Names)bash
11 在宿主机和容器之间交换⽂件
在宿主机和容器之间相互
COPY
⽂件
cp
的⽤法如下
docker cp [OPTIONS] CONTAINER:PATH LOCALPATH //容器中 复制到 宿主机
docker cp [OPTIONS] LOCALPATH|- CONTAINER:PATH //宿主机 复制到 容器中
#宿主机复制一个图片到容器中:将png图片复制到了容器指定目录下
docker cp guoweixin.png tomcat2:/usr/local/tomcat/webapps/ROOT
#将容器内的index.jsp 复制出来,修改再复制回去
docker cp tomcat2:/usr/local/tomcat/webapps/ROOT/index.jsp /root
Docker 查看日志
Docker
查看日志
docker logs 容器名称/ID
docker logs -f -t --since="2018-12-1" --tail=10 qfjy_exam
--since :
此参数指定了输出日志开始日期,即只输出指定日期之后的日志。
-f :
查看实时日志
-t :
查看日志产生 的日期 -tail=10 :
查看最后的
10
条日志
qfjy_exam :
容器名称
Docker 数据卷
数据卷 : 是一个可供一个或多个容器使用的特殊目录
数据卷应用
#1 创建数据卷
docker volume create 数据卷名称
# 创建数据卷之后,默认会存放到目录: /var/lib/docker/volume/数据卷名称/_data目录下
#2 查看数据卷
docker volume inspect 数据卷名称
#3 查看全部数据卷信息
docker volume ls
#4 删除数据卷
docker volume rm 数据卷名称
#5 应用数据卷
#5.1 当你映射数据卷时,如果数据卷不存在,Docker会帮你自动创建 docker run -v 数据卷名称:容器内路径 镜像ID
#5.2 直接指定一个路径作为数据卷的存储位置 docker run -v 路径:容器内部的路径 镜像ID