基础介绍
官网安装文档:https://docs.docker.com/engine/install/
架构图:
概念
- Docker镜像(Images)
镜像是一个用于创建 Docker容器(Container) 的静态模板,一个 Docker镜像(Images) 可以创建很多 Docker容器(Container);
主要特点是,分层、写时复制、内容寻址 和 联合挂载;
核心概念主要涉及到:registry、repository、manifest、image 、layer 和 Dockerfile; - Docker容器(Container)
Docker容器(Container) 是独立运行的一个或一组应用,是从 Docker镜像(Images) 创建的运行实例,它可以被启动、开始、停止、 删除。每个Docker容器(Container) 都是相互隔离的、保证安全的平台。我们可以把 Docker容器(Container) 看做是一个简易版的 Linux 环境(包括 root 用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
Docker镜像(Images) 是只读的,Docker容器(Container) 在启动的时候创建一层可写层作为最上层。 - Docker仓库(Registry)
Docker仓库(Registry) 用来保存 Docker镜像(Images),是集中存放 Docker镜像(Images) 文件的场所。类似于Git。
Docker仓库(Registry) 分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括 Docker Pool 等,可以提供大陆用户更稳定快速的访问。
常用命令
Docker环境命令
docker info 查看容器基本信息。
docker version 查看容器版本信息。
Docker容器生命周期管理
docker create 创建一个新的容器,但不启动它。类似 docker run 命令
docker exec 在运行的 Docker 容器中执行一条命令。
docker run 创建一个新的容器,并运行它,区别于 docker create 命令
docker start 启动一个或多个已经被停止的容器,区别于 docker run 命令
docker stop 停止一个运行中的容器
docker restart 重启容器
docker kill 杀掉一个运行中的容器
docker rm 删除容器
docker pause 暂停一个或多个 Docker 容器的所有进程
docker unpause 恢复容器中所有的进程
Docker容器操作运维
docker ps 列出容器
docker inspect 获取容器/镜像的元数据
docker top 显示容器中正在运行的进程信息
docker attach 进入到一个正在运行的 Docker 容器
docker wait 用于阻塞一个或多个容器直到容器停止,然后打印退出代码
docker export 将容器里的文件系统作为一个 tar 归档文件导出到标准输出
docker port 列出指定的容器的端口映射,或者将容器里的端口映射到宿主机
docker rename 重命名一个容器
docker stats 动态显示容器的资源消耗情况,包括:CPU、内存、网络I/O
docker update 更新一个或多个 Docker 容器的配置
# 日志相关:
docker events 用于打印出实时的系统事件
docker history 打印出指定的 Docker 镜像的历史版本信息
docker logs 打印 Docker 容器的日志
Docker镜像仓库命令
docker login 登录 Docker registry
docker logout 登出 Docker registry
docker pull 拉取一个 Docker 镜像或仓库到 registry
docker push 推送一个 Docker镜像或仓库到 registry
docker search 在 Docker Hub 中搜索 Dokcer 镜像
Docker本地镜像
docker build 根据 Dockerfile 文件构建一个 Docker 镜像
docker images 列出 Docker 镜像
docker rmi 删除一个或多个 Docker 镜像
docker tag 为 Docker 镜像创建一个新的标签
docker save 将 Docker 镜像保存成 tar 包
docker import 从一个 tar 文件创建一个 Docker 镜像
docker load 从 tar 包或者标准输入加载 Docker 镜像
docker commit 根据 Docker 容器的更改创建一个新的 Dokcer 镜像。
docker cp 在本地文件系统与 Dokcer 容器之间复制文件或者文件
docker diff 用于比较一个 Docker 容器不同版本提交的文件差异
docker image inspect centos 查看镜像信息
Docker容器资源管理
docker container 管理 Docker 容器
docker image 管理 Docker 镜像
docker node 管理 Docker 节点
docker plugin 管理 Docker 插件
docker secret 管理 Docker 密钥
docker service 管理 Docker 服务
docker network 管理 Docker 网络
docker stack 管理 Docker 栈
docker swarm 管理 Docker 集群
docker system 管理 Docker 系统
docker volume 管理 Docker 卷
案例
HelloWorld
docker search hello-world 远程仓库中搜索hello-world镜像
docker image pull hello-world 拉取镜像到本地
docker images (docker image ls) 查看本地镜像
docker run hello-world 运行本地镜像,创建容器运行
docker run -d --name mycs centos 后台运行centos容器,指定容器名为mycs
docker run -d centos tail -f /dev/null 后台运行,保持容器进程一直运行,不退出容器
docker kill 84aff7ca3a6e 杀掉后台运行的容器,id为84aff7ca3a6e
docker run -it -d centos /bin/bash 以交互式后台方式运行
docker rm 84aff7ca3a6e 删除容器
高级用法
# 端口映射:后台运行centos,宿主机监听8081端口绑定了内部的80端口,宿主机监听的IP可选
docker run -it -d --name mycs -p [127.0.0.1:]8081:80 centos
# 查看运行的容器
docker ps
# 查看容器名为mycs的端口映射:
docker port mycs
# 目录共享:后台运行centos,容器的/etc目录共享到宿主机的/tmp目录(容器停止后原来共享的目录在宿主机不会被删除)
docker run -it -d --name mycs -v /tmp:/etc centos
# 执行容器命令
docker exec -it 容器id cat /etc/hosts (/bin/bash、/bin/sh)
# 进入容器
docker attach 1bf0f43c4d2f
docker exec -it 容器id /bin/bash
# 退出/离开容器
ctrl+p & ctrl+q
# 删除所有的 docker 容器:
docker rm $(docker ps -aq) / docker rm -f `docker ps -a -q`
# docker服务重启,容器自动重启,指定运行平台
docker run -it --restart=always --platform linux/amd64 --name dgraph dgraph/standalone:v21.03.0
# 导出镜像
docker image save centos > docker-centos.tar.gz
# 导入镜像
docker image load -i docker-centos.tar.gz
docker buildx build --platform linux/amd64,linux/arm64
#删除镜像
docker image rm centos:latest
高级概念、原理
分层
容器层保存的是镜像变化的部分,只有容器层是可写的,容器层下面的所有镜像层都是只读的。
镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同路径的文件,比如 /a,上层的 /a 会覆盖下层的 /a,也就是说用户只能访问到上层中的文件 /a。在容器层中,用户看到的是一个叠加之后的文件系统