docker
三个核心概念:
镜像:docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
容器:镜像运行的实体,Docker利用容器来运行应用
镜像和容器的关系,就像是面对对象程序设计中类和实例一样,镜像是静态的定义,容器是镜像运行时的实体,容器可以被创建、启动、停止、删除、暂停等。
Docker仓库:集中存放镜像文件的地方
镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其他服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。
一个Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。所以说,镜像仓库是Docker用来集中存放镜像文件的地方,类似于我们之前常用的代码仓库
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本
仓库分为公开仓库被私有仓库两种形式
基本操作
安装和部署:
docker-ce镜像_docker-ce下载地址_docker-ce安装教程-阿里巴巴开源镜像站
配置docker镜像加速:
vi /etc/docker/daemon.json进行配置
执行docker info
出现该内容表示镜像加速
镜像操作:
1.搜索官方仓库镜像 docker search
参数说明:
NAME | 镜像名称 |
DESCRIPTION | 镜像说明 |
STARS | 点赞数量 |
OFFICEAL | 是否为docker官方发布的 |
AUTOMATED | 是否是自动构建的 |
2.拉取镜像docker pull
Docker Hub上有大量高质量的镜像可以用。从Docker镜像仓库获取镜像的命令是docker pull ,其命令格式为
docker pull [选项] [Docker Registry地址[:端口号]/]仓库名[:标签]
docker镜像仓库地址:地址的格式一般是:[端口号],默认地址是Docker Hub
仓库名:仓库名是两段式名称。即/。对于Docker Hub,如果不给出用户名,默认为library,也就是官方镜像。一个仓库会包含同一个软件不通版本的镜像,而标签就常用于对应该软件的各个版本。
根据镜像名称(tag指定版本)拉取镜像
例:docker pull nginx:1.14-alpine
从下载过程中可以看到镜像是由多层存储所构成,下载也是一层层的去下载,并非单一文件。下载过程中给出了每一层的ID的前12位。并且下载结束后,给出该镜像的完整的sha256额摘要,以确保下载一致性
注:alpine版本:构建容器小镜像的发型版本,正常不需要加这个,测试拉取最小镜像
3.查看当前主机镜像列表docker images
docker images
docker image ls
docker image ls nginx
4.导出镜像docker image save
docker image save nginx > docker-nginx.tar.gz
docker image save -o ./ubuntu_nginx.tar.gz ubuntu:latest nginx:1.14-alpine
-o 指定导出镜像的位置
可以同时导出多个镜像;为一个文件
指定.tar.ge可以导出并压缩
5.删除镜像docker image rm
-f强制删除(如果镜像已经被容器调用了)
docker image prune 删除没用的镜像
6.导入镜像docker load -i
7.查看镜像信息docker image inspect
容器相关命令docker container
1.启动容器
不推荐docker create docker start
docker run 镜像名
格式
docker run [OPTIONS] IMAGE [COMMAND] [AGE...]
options常用命令选项
-t:打开一个终端,像使用交换机一样使用容器
-i:交互式访问
--name:指定名字
--network:指定网络
--rm:容器一停,自动删除
-d:后台运行容器,返回容器ID;否则会一直占据着终端
-P:随机端口映射,容器内部端口随机映射到主机的端口
-p:端口映射,将容器内服务的端口映射在宿主机的指定端口,格式为:主机(宿主)端口:容器端口
例如:
docker run --name web1 -d -p 8888:80 nginx-alpine
docker port web1 查询docker端口映射
docker run --name ubuntu1 -it ubuntu /bin/bash 在运行容器时,交互式进入容器
2.停止运行中的容器docker stop/kill
3.激活关闭的容器docker start
4.查看容器详情docker inspect
5.查询容器内部日志docker logs
6.对运行的容器执行制度命令docker exec
格式:
docker exec [options] container command [arg...]
options:
-d:在后台运行命令
-e:设备环境
-i:交互式
-t:打开一个终端
如果不进入容器里面,仅执行命令
docker exec xxxx ip a
7.删除容器docker rm
运行状态-f才能删
容器中管理数据
数据卷是一个可供一个或多个容器使用的特殊目录。它绕过UFS,可以提供很多有用的特性:
数据卷可以在容器之间共享和重用
对数据卷的修改会立马生效
数据卷的更新,不会影响镜像
数据卷默认会一直存在,即使容器被删除
注意:数据卷的使用,类似于Linix下对目录或文件进行mount,镜像终端被指定为挂载点的目录中的文件会隐藏掉,能显示看到的是挂载的数据卷
创建一个数据卷:
docker volume create my-vol
docker volume ls
查看指定数据卷的信息:
docker volume inspect my-vol
启动一个挂载数据卷的容器:
在用docker run命令的时候,使用-v标记来将数据卷挂载到容器里,在一次docker run中可以挂载多个数据卷。
下面创建一个名为web的容器,并加载一个数据卷到容器的/use/share/nginx/html/目录
docker run -d -P --name web -v my-vol:/usr/share/nginx/heml nginx:1.14-alpine
docker inspect web
docker ps -a
数据卷是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷,如果需要删除容器同时移除数据卷。可以在删除容器的时候使用docker rm -v这个命令
无主的数据卷可能会占用很多空间,要清理使用docker volume prune
查看镜像、容器、数据卷所占用的空间
docker system df
三种挂载数据卷方式:volume,bind,tmpfs
相同点:无论哪种类型,数据在容器内看起来都是相同的。它被视为容器文件系统中的目录或单个文件
不同点:
卷(volume) 存储在于由Docker管理的主机文件系统的一部分中(在Linux上是:/var/lib/docker/volumes/)
绑定挂载(bind mount)也就是把主机的本地目录挂载到容器中某个挂载点。可以存储在主机系统的任何位置。他们甚至可能是重要的系统文件或目录。Docker主机或Docker容器上的非Docker进程可以随时修改它们
tmpfs挂载(tmpfs mount)仅存储在主机系统的内存中,而不会写入主机系统的文件系统