简介
Docker 使用 Google 公司推出的 Golang 实现,基于 Linux 内核的cgroup、 namesapce等技术对进程进行封装隔离,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等,极大的简化了容器的创建和维护。使得 Docker 比虚拟机更为方便快捷。
基本概念
-
容器 (Container) :
- 容器是 Docker 的核心概念。它是一个独立、可运行的软件包,包含应用程序以及所有运行时所需的依赖项,如代码、运行时、系统工具、系统库等。
- 容器是基于操作系统级别的虚拟化,使得应用程序能够在任何环境中以相同的方式运行,无论是开发、测试还是生产环境。
-
镜像 (Image) :
- 镜像是容器的基础,它包含了运行容器所需的文件系统、运行时配置和应用程序代码,以及其他依赖项。
- 镜像可以从 Docker Hub 或者其他 Docker Registry 中获取,也可以通过 Dockerfile 构建。
-
Dockerfile:
- Dockerfile 是一个文本文件,包含了一系列指令,用于构建 Docker 镜像。这些指令描述了如何从一个基础镜像构建一个新的镜像,如何设置环境变量、安装软件包、复制文件等。
-
Docker 镜像仓库 (Docker Registry) :
- Docker 镜像仓库用于存储和分享 Docker 镜像。Docker Hub 是最常用的公共镜像仓库,包含了大量的官方和社区维护的镜像。除此之外,还可以搭建私有的镜像仓库,如 Docker Trusted Registry (DTR)、Harbor 等。
-
Docker 引擎 (Docker Engine) :
- Docker 引擎是 Docker 的核心组件,负责管理容器的生命周期、构建和运行容器、管理镜像、以及与其他 Docker 守护进程通信等任务。
- Docker 引擎由两个核心组件组成:Docker 守护进程 (dockerd) 和 Docker 客户端 (docker)。Docker 守护进程负责管理容器和镜像,而 Docker 客户端则允许用户通过命令行或者 API 与 Docker 守护进程进行交互。
-
Docker Compose:
- Docker Compose 是 Docker 官方提供的工具,用于定义和运行多容器的 Docker 应用。通过一个 YAML 文件描述多个容器之间的关系和配置,可以简化容器集群的部署和管理。
基本命令
1.启动容器
docker run <image>
参数:
- `-d, --detach`:在后台运行容器。
- `-i, --interactive`:交互模式,保持 STDIN 打开。
- `-t, --tty`:为容器分配一个伪终端 (TTY)。
- `--name`:为容器指定一个名称。
- `-e, --env`:设置环境变量。
- `--network`:指定容器连接的网络。
- `-p, --publish`:将容器端口映射到宿主机端口。
- `--volume`:挂载宿主机上的目录或文件到容器中。
- `-v, --volume`:也是用于挂载宿主机上的目录或文件到容器中,通常与 `--volume` 一起使用。
- `--rm`:容器停止后自动删除。
- `--restart`:在容器退出时自动重启。
- `--privileged`:赋予容器更高的权限。
- `--user`:指定容器运行的用户名或 UID。
例如,要使用镜像 nginx 创建并启动一个名为 my_nginx 的容器,在后台运行,并将容器的80端口映射到宿主机的8080端口,可以使用以下命令:
docker run -d -p 8080:80 --name my_nginx nginx
2.查看启动的容器
docker ps
3.列出所有 Docker 容器,包括正在运行和已停止的。
docker ps -a
4.进入容器,在正在运行的容器中执行指定命令。
docker exec -it <container> <command>
参数:
-d, --detach:在后台执行命令。-i, --interactive:交互模式,保持 STDIN 打开。-t, --tty:为命令分配一个伪终端 (TTY)。-u, --user:指定要执行命令的用户名或 UID。
5.重启/暂停
`docker start <container>`:启动一个已停止的容器。
`docker stop <container>`:停止一个正在运行的容器。
`docker restart <container>`:重启一个正在运行的容器。
`docker rm <container>`:删除容器,需要先停掉容器
6.拉取镜像,从 Docker 镜像仓库中拉取指定镜像到本地。
docker pull <image>
7.镜像打标签,用于更改镜像名,便于推送到本地参数
docker tag <source_image> <target_image>
8.推送镜像
docker push <image>
9.查看本地所有的镜像
docker images
10.删除镜像
docker rmi <image>
11.清理本地系统中不再使用的Docker镜像
docker image prune -f
12.把镜像打包成tar包
docker save -o <tag_name> <image_name:tag>
13.加载 Docker 镜像
docker load -i <input_file.tar>
14.查看Docker 对象(容器、镜像、网络等)的详细信息。
docker inspect <contianer_id_or_name>
查看容器/镜像的架构:
docker inspect -f '{{ .Architecture }}' <image_name_or_id>
15.查看容器日志
docker logs <container_name_or_id>
参数:
- `-f, --follow`:实时跟踪容器的日志输出。
- `--since`:显示自指定时间戳之后产生的日志。
- `--until`:显示自指定时间戳之前产生的日志。
- `--tail`:仅显示最后几行日志。
- `--timestamps`:显示日志的时间戳。
查看最后100行日志 :docker logs --tail 100 abcdef123456
16.把代码打包成镜像,需要和Dockerfile配合使用
docker build -t <image_name:tag> .
打包成指定的架构镜像(arm/amd)
docker buildx build --platform linux/arm64 -t <image_name:tag> .