docker入门

110 阅读5分钟

简介

Docker 使用 Google 公司推出的 Golang 实现,基于 Linux 内核的cgroup、 namesapce等技术对进程进行封装隔离,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等,极大的简化了容器的创建和维护。使得 Docker 比虚拟机更为方便快捷。

基本概念

  1. 容器 (Container)

    • 容器是 Docker 的核心概念。它是一个独立、可运行的软件包,包含应用程序以及所有运行时所需的依赖项,如代码、运行时、系统工具、系统库等。
    • 容器是基于操作系统级别的虚拟化,使得应用程序能够在任何环境中以相同的方式运行,无论是开发、测试还是生产环境。
  2. 镜像 (Image)

    • 镜像是容器的基础,它包含了运行容器所需的文件系统、运行时配置和应用程序代码,以及其他依赖项。
    • 镜像可以从 Docker Hub 或者其他 Docker Registry 中获取,也可以通过 Dockerfile 构建。
  3. Dockerfile

    • Dockerfile 是一个文本文件,包含了一系列指令,用于构建 Docker 镜像。这些指令描述了如何从一个基础镜像构建一个新的镜像,如何设置环境变量、安装软件包、复制文件等。
  4. Docker 镜像仓库 (Docker Registry)

    • Docker 镜像仓库用于存储和分享 Docker 镜像。Docker Hub 是最常用的公共镜像仓库,包含了大量的官方和社区维护的镜像。除此之外,还可以搭建私有的镜像仓库,如 Docker Trusted Registry (DTR)、Harbor 等。
  5. Docker 引擎 (Docker Engine)

    • Docker 引擎是 Docker 的核心组件,负责管理容器的生命周期、构建和运行容器、管理镜像、以及与其他 Docker 守护进程通信等任务。
    • Docker 引擎由两个核心组件组成:Docker 守护进程 (dockerd) 和 Docker 客户端 (docker)。Docker 守护进程负责管理容器和镜像,而 Docker 客户端则允许用户通过命令行或者 API 与 Docker 守护进程进行交互。
  6. 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> .