Docker
什么是docker?
一般来将,人们说“Docker”,通常是指Docker Engine,它是一个客户端-服务器应用程序,由 Docker守护进程、一个REST API指定与守护进程交互的接口、和一个命令行接口(CLI)与守护进程通信(通过封装REST API)。Docker Engine从CLI中接受docker命令,例如docker run 、docker ps来列出正在运行的容器、docker images来列出镜像,等等。所以docker到底是什么?
-
docker是一个软件,可以运行在window、linux、mac等各种操作系统上。
-
docker是一个开源的应用容器引擎,基于Go语言开发并遵从 Apache2.0 协议开源,项目代码托管在github上进行维护
-
docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任 何流行的 Linux 机器上。
-
容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
docker基本组成
-
docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
-
docker仓库(Registry):用来保存各种打包好的软件镜像;仓库分为公有仓库和私有仓库。(很类似 maven)
-
docker镜像(Images):软件打包好的镜像;放在docker仓库中;
-
docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用
docker的安装
docker基本设置
开启docker后台服务
systemctl start docker
systemctl status docker
安装阿里云镜像加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://复制自己的加速器地址.mirror.aliyuncs.com"] }
EOF
systemctl daemon-reload
systemctl restart docker
设置docker开启启动服务
systemctl enable docker
查看docker基本信息
docker -v
docker version
docker info
docker命令分类
-
Docker环境信息 — docker [info|version]
-
容器生命周期管理 — docker [create|exec|run|start|stop|restart|kill|rm|pause|unpause]
-
容器操作管理 — docker [ps|inspect|top|attach|wait|export|port|rename|stat]
-
容器rootfs命令 — docker [commit|cp|diff]
-
镜像仓库 — docker [login|pull|push|search]
-
本地镜像管理 — docker [build|images|rmi|tag|save|import|load]
-
容器资源管理 — docker [volume|network]
-
系统日志信息 — docker [events|history|logs]
docker常用镜像命令
pull命令
-
常用参数
-
-a, --all-tags=true|false : 是否获取仓库中所有镜像,默认为否;
-
--disable-content-trust : 跳过镜像内容的校验,默认为 true;
-
-
基本使用
- docker pull 景象id| 景象名字
images命令
-
基本使用
-
docker images
-
docker image ls
-
-
图片说明
-
REPOSITORY:表示镜像的仓库源
-
TAG:镜像的标签
-
IMAGE ID:镜像ID
-
CREATED:镜像创建时间
-
SIZE:镜像大小
-
save命令
-
基本使用
- 一个景象
mkdir -p /data cd /data docker save tomcat:9.0.20-jre8-alpine -o tomcat9.tar docker save tomcat:9.0.20-jre8-slim > tomcat9.slim.tar- 多个景象
mkdir -p /data cd /data docker save \ ubuntu:20.04 \ alpine:3.12.1 \ debian:10.6-slim \ centos:7.8.2003 \ -o linux.tar docker save \ tomcat:9.0.20-jre8-alpine \ tomcat:9.0.20-jre8-slim \ tomcat:9.0.20-jre8 \ -o tomcat9.0.20.tar -
常用参数
-
o:输出到的文件
-
load命令
-
基本使用
mkdir -p /data cd /data docker load -i linux.tar docker load < tomcat9.0.20.tar -
常用参数
-
--input , -i : 指定导入的文件。
-
--quiet , -q : 精简输出信息。
-
search命令
- 基本使用
docker search tomcat
-
常用参数
- -f, --filter filter : 过滤输出的内容;
- --limit int :指定搜索内容展示个数;
- --no-index : 不截断输出内容;
- --no-trunc :不截断输出内容;
inspect命令
- 基本使用
docker inspect tomcat:9.0.20-jre8-alpine
docker inspect -f {{".Size"}} tomcat:9.0.20-jre8-alpine
-
作用
-
通过 docker inspect 命令,我们可以获取镜像的详细信息,其中,包括创建者,各层的数字摘要等。
-
docker inspect 返回的是 JSON格式的信息,如果您想获取其中指定的一项内容,可以通过 -f 来指 定,如获取镜像大小
-
history命令
- 基本使用
docker history tomcat:9.0.20-jre8-alpine
-
作用
-
通过 docker history命令,可以列出各个层的创建信息
-
rmi命令
- 基本使用
docker rmi tomcat:9.0.20-jre8-alpine
docker image rm tomcat:9.0.20-jre8-alpine
-
常用参数
- -f, -force : 强制删除镜像,即便有容器引用该镜像;
- -no-prune : 不要删除未带标签的父镜像;
清理镜像
- 基本使用
docker image prune
-
常用参数
- -a, --all : 删除所有没有用的镜像,而不仅仅是临时文件;
- -f, --force:强制删除镜像文件,无需弹出提示确认;
docker容器(container)
容器是镜像的运行时实例。正如从虚拟机模板上启动 VM 一样,用户也同样可以从单个镜像上启动一个 或多个容器。虚拟机和容器最大的区别是容器更快并且更轻量级——与虚拟机运行在完整的操作系统之 上相比,容器会共享其所在主机的操作系统/内核。下图为使用单个 Docker镜像启动多个容器的示意图。
-
Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。
-
容器是镜像的一个运行实例。
可以将其启动、开始、停止、删除,而这些容器都是彼此相互隔离的、互不可见的。 可以把容器看做是一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间 等)以及运行在其中的应用程序打包而成的盒子。
-
容器是基于镜像启动起来的,容器中可以运行一个或多个进程。
-
镜像是Docker生命周期 中的构建或打包阶段,而容器则是启动或执行阶段。
-
镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。
docker容器常用命令
docker run : 新建容器并启动
- 语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- 基本使用
docker run -it --rm -p 8080:8080 tomcat:9.0.20-jre8-alpine
-
常用参数
-
-d, --detach=false: 后台运行容器,并返回容器ID
-
-i, --interactive=false: 以交互模式运行容器,通常与 -t 同时使用
-
-P, --publish-all=false: 随机端口映射,容器内部端口随机映射到主机的端口。
-
-p, --publish=[]: 指定端口映射,格式为:主机(宿主)端口:容器端口,
-
-t, --tty=false: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-
--name="nginx-lb": 为容器指定一个名称
-
-h , --hostname="laosiji": 指定容器的hostname
-
-e , --env=[]: 设置环境变量,容器中可以使用该环境变量
-
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型 --link=[]: 添加链接到另一个容器;
-
-v, --volume : 绑定一个卷
-
--privileged=false: 指定容器是否为特权容器,特权容器拥有所有的capabilities
-
--restart=no:指定容器停止后的重启策略
- no:容器退出时不重启
- on-failure:容器故障退出(返回值非零)时重启
- always:容器退出时总是重启,推荐各位小伙伴们使用
-
--rm=false: 指定容器停止后自动删除容器,不能以docker run -d启动的容器
-
docker logs : 获取容器的日志
- 语法
docker logs [OPTIONS] CONTAINER
- 基础使用
docker run -itd --name tomcat9 -p 8080:8080 tomcat:9.0.20-jre8-alpine
docker logs -f tomcat9
-
常用参数
-
-f : 跟踪日志输出
-
--tail :仅列出最新N条容器日志
-
docker rm :删除一个或多个容器
docker rm命令只能删除处于终止或退出状态的容器,并不能删除 还处于运行状态的容器
- 语法
docker rm [OPTIONS] CONTAINER [CONTAINER...]
- 基本使用
按照容器名称删除
docker rm tomcat9
按照容器ID删除
docker rm 8dd95a95e687
-
常用参数
-
-f :通过 SIGKILL 信号强制删除一个运行中的容器。
-
-l :移除容器间的网络连接,而非容器本身。
-
-v :删除与容器关联的卷。
-
docker ps : 列出容器
- 语法
docker ps [OPTIONS]
- 基本使用
查看运行中的容器
docker ps tomcat9
查看所有容器
docker ps -a tomcat9
-
常见参数
-
-a :显示所有的容器,包括未运行的。
-
-q :只显示容器编号。
-
-
常用技巧
停止所有运行容器
docker stop $(docker ps -qa)
删除所有的容器
docker rm $(docker ps -aq)
docker rm $(docker stop $(docker ps -q))
删除所有的镜像
docker rmi $(docker images -q)
docker create :创建一个新的容器但不启动它
- 语法
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
- 基本使用
docker create -it --name tomcat9 -p 8080:8080 9.0.20-jre8-alpine`
- 常用参数与启动容器一致
启动、重启、终止容器
docker start :启动一个或多个已经被停止的容器
docker stop :停止一个运行中的容器
docker restart :重启容器
- 语法
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker restart [OPTIONS] CONTAINER [CONTAINER...]
- 基本使用
docker start tomcat9
docker stop tomcat9
docker restart tomcat9
docker exec :在运行的容器中执行命令(进入容器)
- 语法
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
- 基本使用
有bash命令的linux系统:例如centos
docker run -it --name tomcat9.1 -p 8080:8080 tomcat:9.0.20-jre8-slim docker exec -it tomcat9.1 /bin/bash
没有bash命令的linux系统:例如alpine系统
docker run -it --name tomcat9.2 -p 8081:8080 tomcat:9.0.20-jre8-alpine docker exec -it tomcat9.2 sh
-
常用参数
-
-i :即使没有附加也保持STDIN 打开
-
-t :分配一个伪终端
-
docker inspect : 获取容器/镜像的元数据
- 语法
docker inspect : 获取容器/镜像的元数据
- 基本使用
docker run -it --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine
docker inspect tomcat9
-
常用参数
-
-f :指定返回值的模板文件。
-
-s :显示总的文件大小。
-
--type :为指定类型返回JSON。
-
docker update :可以动态地更新容器配置
可以更新一个或多个容器配置。多个容器名称或ID之间使 用空格分隔。
- 语法
docker update [OPTIONS] CONTAINER [CONTAINER...]
- 基本使用
docker run -it --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine
更新容器restart策略
docker update --restart always tomcat9
docker kill :杀掉一个运行中的容器
- 语法
docker kill [OPTIONS] CONTAINER [CONTAINER...]
- 基本使用
docker run -it --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine
docker kill tomcat9
docker ps
docker ps -a
docker start tomcat9
-
常见参数
- -s :向容器发送一个信号