1.什么是docker

当人们说“Docker”时,他们通常是指 Docker Engine,它是一个客户端 - 服务器应用程序,由 Docker守护进程、一个REST API指定与守护进程交互的接口、和一个命令行接口(CLI)与守护进程通信(通过封装REST API)。Docker Engine 从 CLI 中接受docker 命令,例如 docker run 、docker ps 来列出正在运行的容器、docker images 来列出镜像,等等。

  • docker是一个软件,可以运行在window、linux、mac等各种操作系统上。
  • docker是一个软件,可以运行在window、linux、mac等各种操作系统上。
  • docker 是一个开源的应用容器引擎,基于Go 语言开发并遵从Apache2.0 协议开源,项目代码托管在github上进行维护
  • docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。
  • 容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。

2.docker基本组成

  • docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
  • docker仓库(Registry):用来保存各种打包好的软件镜像;仓库分为公有仓库和私有仓库。(很类似maven)
  • docker镜像(Images):软件打包好的镜像;放在docker仓库中;
  • docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用

3.docker官网地址

docker官网

https://www.docker.com
docker官方文档地址:
https://docs.docker.com/

github地址

https://github.com/docker/docker-ce

二:安装Docker

安装docker前置条件

yum install -y yum-utils device-mapper-persistent-data lvm2

添加源

yum-config-manager --add-repo http://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo
yum makecache fast

查看docker版本

yum list docker-ce --showduplicates | sort -r

执行安装docker

安装最新版:推荐大家安装最新版本
yum -y install docker-ce
安装指定版本:
语法规则:yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING>
containerd.io
yum -y install docker-ce-18.06.3.ce-3.el7 docker-ce-cli.x86_64
yum install -y docker-ce-19.03.9-3.el7 docker-ce-cli-19.03.9-3.el7

开启dock而服务

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官网案例,总的来说分为以下几种:

  • 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 compose版本 查看是否安装docker命令_容器

三:Docker常用命令

pull命令

https://hub.docker.com/_/tomcat
docker pull tomcat:9.0.20-jre8
docker pull tomcat:9.0.20-jre8-slim
docker pull tomcat:9.0.20-jre8-alpine

https://hub.docker.com/_/centos
docker pull centos:7.8.2003
https://hub.docker.com/_/ubuntu
docker pull ubuntu:20.04
https://hub.docker.com/_/debian
docker pull debian:10.6
docker pull debian:10.6-slim
https://hub.docker.com/_/alpine
docker pull alpine:3.12.1

常用参数

  • -a, --all-tags=true|false : 是否获取仓库中所有镜像,默认为否;
  • –disable-content-trust : 跳过镜像内容的校验,默认为 true;

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

常用参数

  • -o :输出到的文件

多个镜像
推荐使用idea开发工具中的列编辑模式制作docker save命令

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

load命令

mkdir -p /data
cd /data
docker load -i linux.tar
docker load < tomcat9.0.20.tar

常用参数

  • –input , -i : 指定导入的文件。
  • –quiet , -q : 精简输出信息。

search命令

不推荐使用search命令查找镜像,不够直观。

docker search tomcat

常用参数

  • -f, --filter filter : 过滤输出的内容;
  • –limit int :指定搜索内容展示个数;
  • –no-index : 不截断输出内容;
  • –no-trunc :不截断输出内容;

inspect命令

  • 通过 docker inspect 命令,我们可以获取镜像的详细信息,其中,包括创建者,各层的数字摘要等。
  • docker inspect 返回的是 JSON格式的信息,如果您想获取其中指定的一项内容,可以通过 -f 来指定,如获取镜像大小
docker inspect tomcat:9.0.20-jre8-alpine
docker inspect -f {{".Size"}} tomcat:9.0.20-jre8-alpine

tag命令

标记本地镜像,将其归入某一仓库

docker tag tomcat:9.0.20-jre8-alpine lagou/tomcat:9

rmi命令

通过如下两个都可以删除镜像:

docker rmi tomcat:9.0.20-jre8-alpine
docker image rm tomcat:9.0.20-jre8-alpine

通过ID删除镜像
除了通过标签名称来删除镜像,我们还可以通过制定镜像 ID, 来删除镜像。一旦制定了通过 ID 来删除镜
像,它会先尝试删除所有指向该镜像的标签,然后在删除镜像本身。
docker rmi ee7cbd482336

常用参数

  • f, -force : 强制删除镜像,即便有容器引用该镜像;
  • -no-prune : 不要删除未带标签的父镜像;
    总结
  • 推荐通过image的名称删除镜像
  • image的ID在终端长度未完全显示,ID值会出现重复

清理镜像

我们在使用 Docker 一段时间后,系统一般都会残存一些临时的、没有被使用的镜像文件,可以通过以下命令进行清理。执行完命令后,还是告诉我们释放了多少存储空间!

docker image prune

常用参数

  • -a, --all : 删除所有没有用的镜像,而不仅仅是临时文件;
  • -f, --force :强制删除镜像文件,无需弹出提示确认;

Docker容器(container)

Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是镜像的一个运行实例。
可以将其启动、开始、停止、删除,而这些容器都是彼此相互隔离的、互不可见的。
可以把容器看做是一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。
容器是基于镜像启动起来的,容 器中可以运行一个或多个进程。
镜像是Docker生命周期 中的构建或打包阶段,而容器则是启动或执行阶段。
镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。

四:Docker容器常用命令

新建并启动容器

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 [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 run -itd --name tomcat9 -p 8080:8080 tomcat:9.0.20-jre8-alpine
需要先停止运行中的容器再删除,否则无法删除容器
docker stop tomcat9
按照容器名称删除
docker rm tomcat9
按照容器ID删除
docker rm 8dd95a95e687

常用参数

  • -f :通过 SIGKILL 信号强制删除一个运行中的容器。
  • -l :移除容器间的网络连接,而非容器本身。
  • -v :删除与容器关联的卷。

列出容器

docker ps [OPTIONS]

docker run -itd --name tomcat9 -p 8080:8080 tomcat:9.0.20-jre8-alpine
查看运行中的容器
docker ps tomcat9
查看所有容器
docker ps -a tomcat9

输出详情介绍

• CONTAINER ID: 容器 ID。
• IMAGE: 使用的镜像。
• COMMAND: 启动容器时运行的命令。
• CREATED: 容器的创建时间。
• STATUS: 容器状态。
 状态有7种:
 created(已创建)
 restarting(重启中)
 running(运行中)
 removing(迁移中)
 paused(暂停)
 exited(停止)
 dead(死亡)• PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
• NAMES: 自动分配的容器名称。

常用参数

  • -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 [OPTIONS] IMAGE [COMMAND] [ARG...]

docker create -it --name tomcat9 -p 8080:8080 9.0.20-jre8-alpine

启动、重启、终止容器

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 [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 [OPTIONS] NAME|ID [NAME|ID...]

docker run -it --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine
docker inspect tomcat9

常用参数

  • -f :指定返回值的模板文件。
  • -s :显示总的文件大小。
  • –type :为指定类型返回JSON。

更新容器

docker update :可以动态地更新容器配置。可以更新一个或多个容器配置。多个容器名称或ID之间使用空格分隔。但update命令不是很成熟,有很多配置项不能动态更新。推荐大家还是rm容器后,再重新run一个新的镜像

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

docker常用命令汇总

如何检测是否安装docker compose版本 查看是否安装docker命令_docker_02