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 pruneDocker 删除本地镜像
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.tarDocker 容器 容器是 Docker 核心概念
简单的说,容器是独立运行的一个或一组应用,以及它们的运行环境。 对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和运行在上面的 应用。1 查看容器状态
docker ps //查看运行的容器 docker ps –a //查看所有的容器(包含运行和退出) docker container ls docker container ls–a2 Docker 启动容器 启动容器有二种方式,一种是基于镜像新建一个容器并启动,一种是将在终止状态( stopped )的容器重新启动 docker run 参数 镜像名称 :tag 执⾏的命令 常⽤参数 :
-i 保持和 docker 容器内的交互,启动容器时,运⾏的命令结束后,容器依然存活,没有退出(默认是会退出,即停⽌的) -t 为容器的标准输⼊虚拟⼀个 tty -d 后台运⾏容器 --rm 容器在启动后,执⾏完成命令或程序后就销毁 --name 给容器起⼀个⾃定义名称 -p 宿主机:内部端口
docker run --rm -d --name tomcat1 -p 8080:8080 tomcat3 查看正在运行的容器
docker ps
CONTAINER ID 容器 ID IMAGE 容器依赖的镜像 COMMAND 启动容器时执⾏的命令或程序 CREATED 容器启动时到 现在的相隔时间 STATUS 容器状态 PORTS 宿主机到容器的端⼝映射 注意 : 当运⾏⼀个容器的时候,没有⽤参数 -- name 去指定容器名时, Docker 会从⾃⼰的名称库中随机给这个容器起⼀个名字4 查看所有容器
docker ps -a5 停止容器
docker stop 9be696a0c283 //停止正在运行容器(或Ctrl+c) docker container stop tomcat1//停止正运行容器(ID或Names)6 启动已终止容器
#通过docker ps 找到容器id docker start 容器名/容器 ID7 重启已关闭容器
docker restart 9be696a0c283//启动容器(根据ID或NAMES)8 关闭和删除容器
docker rm 容器ID9 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)bash11 在宿主机和容器之间交换⽂件 在宿主机和容器之间相互 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 /rootDocker 查看日志 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



