全网最详细的Docker基本使用教程

929 阅读7分钟

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基本设置

开启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官网命令

docker常用镜像命令

pull命令

  • 常用参数

    • -a, --all-tags=true|false : 是否获取仓库中所有镜像,默认为否;

    • --disable-content-trust : 跳过镜像内容的校验,默认为 true;

  • 基本使用

    • docker pull 景象id| 景象名字

images命令

  • 基本使用

    • docker images

    • docker image ls

image.png

  • 图片说明

    • 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镜像启动多个容器的示意图。

image.png

  • 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 :向容器发送一个信号

docker常用命令汇总

image.png