Web
Linux文件上传百度云盘轻松解决数据传输和备份 - 阿鱼君 - 博客园
NVIDIA GPU Decoder Device Information
Intel GPU Decoder Device Information
AMD GPU Decoder Device Information
群晖DSM7.2 修改Docker配置文件,并重启Docker服务生效
在 Docker Compose 配置环境变量的几种方法
Docker 简明教程
本文档使用 MrDoc 发布
-
+
首页
Docker 简明教程
[Docker](https://www.docker.com/) 是一种流行的容器化平台,提供了一种轻量级且可移植的方式来打包和运行应用程序。它允许开发人员创建独立环境,可以在不同的平台上进行一致部署和管理。 ## 1\. 理解 Docker 概念 1. `Docker` 是一个用于打包、部署和管理在容器中运行的应用程序的平台。容器是一种将资源(如内存、CPU、存储)与底层操作系统隔离开来的方法。每个容器都有自己的隔离环境,可以在其中执行代码,而不会干扰主机上的其他进程。 2. Docker `镜像`是创建容器的蓝图。它们包含运行应用程序或服务所需的全部必要指令和文件,以便在容器化环境中运行。 3. `Dockerfile` 是定义如何创建 Docker 镜像的文本文件。它们使用 `FROM`、`RUN`、`COPY` 等命令逐步构建镜像。 4. Docker `registry` 是一个用于存储和分发 Docker 镜像的存储库。 5. Docker `容器`是 Docker 镜像在主机上运行的实例。它执行由镜像定义的应用程序,对来自系统其他部分的访问提供隔离。 6. `Docker Compose` 是一个用于定义和运行多容器应用程序的工具。它使用 YAML 文件来配置服务(容器)及其依赖项。 7. `Docker 卷`是一种用于在容器之间或与主机之间共享数据的存储机制。卷允许你即使在容器被销毁后仍保留数据,从而可以跨多个容器轻松共享数据。 8. `Docker 群集模式`允许你将多个 Docker 主机管理成一个集群。你可以在群集中的节点上部署服务,然后让 Docker 管理资源分配和容器位置。 9. `Docker 网络`是用于将容器彼此连接或连接到主机的一个隔离网络。它提供了在容器之间进行安全通信,而无需在主机上公开端口。 10. `Docker Machine` 允许你配置和管理 Docker 主机,无论它们是物理机、虚拟机(例如,在云中)还是在其他 Docker 容器内运行的容器。 11. `Docker Hub` 是一个在线存储库,允许将 Docker 镜像与他人共享。它是最大的公共注册表之一,但你也可以使用私有注册表来存储和分发你自己的镜像。 12. `Dockerfile` 是一个文本文件,其中包含构建 Docker 镜像所需的所有命令。在使用 `docker build` 命令构建镜像时,Dockerfile 被用作输入。 13. 容器是轻量级、临时性和可移植的应用程序运行时环境。它们提供与主机和其他容器的隔离,允许你在一台主机上运行多个容器,而不会发生干扰。 14. `Docker Desktop` 是一个应用程序,允许你在 Windows 或 macOS 上运行 Docker,它提供对 Docker CLI(命令行界面)和 GUI 工具的访问,以便管理镜像和容器。 15. `Docker Compose 文件`是用于使用 Docker Compose 定义和配置多容器应用程序的 YAML 文件。它定义了服务、卷、网络以及应用程序运行所需的其他资源。 ## 2\. 安装 Docker - **Windows:** 要在 Windows 上安装 Docker,请按照官方[安装指南](https://docs.docker.com/desktop/windows/install/)进行操作。 - **Mac:** 对于 macOS,请参阅[安装指南](https://docs.docker.com/desktop/mac/install/)。 - **Linux:** 对于 Linux,请查看[针对具体发行版的说明](https://docs.docker.com/engine/install/)。 ## 3\. 运行你的第一个容器 1. 启动一个终端/命令提示符。 2. 从 Docker Hub 拉取预构建的镜像,例如,`docker pull nginx`。 3. 使用拉取的镜像运行容器:`docker run -it --rm nginx`。 4. 打开 Web 浏览器并导航到 `localhost:80` 以查看默认 Nginx 欢迎页面。 ## 4\. 构建你自己的镜像 1. 创建一个空文件夹并在你的终端中导航到它。 2. 创建一个 `Dockerfile`。这是一个包含如何构建我们的镜像的指令的文件。在这种情况中,我们将使用一个简单的 Dockerfile,它从一个基本的 Go 基础镜像开始并将我们的源代码复制到其中: <table class="lntable"><tbody><tr><td class="lntd"><pre class="chroma"><code><span class="lnt"> 1 </span><span class="lnt"> 2 </span><span class="lnt"> 3 </span><span class="lnt"> 4 </span><span class="lnt"> 5 </span><span class="lnt"> 6 </span><span class="lnt"> 7 </span><span class="lnt"> 8 </span><span class="lnt"> 9 </span><span class="lnt">10 </span><span class="lnt">11 </span></code></pre></td><td class="lntd"><pre class="chroma"><code class="language-fallback"><span class="line"><span class="cl"># syntax=docker/dockerfile:1 </span></span><span class="line"><span class="cl">FROM golang:alpine AS builder </span></span><span class="line"><span class="cl">WORKDIR /go/src/github.com/user/my-app </span></span><span class="line"><span class="cl">COPY . ./ </span></span><span class="line"><span class="cl">RUN go mod init my-app </span></span><span class="line"><span class="cl">RUN go build -o /bin/my-app </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl">FROM alpine:latest </span></span><span class="line"><span class="cl">WORKDIR /root/ </span></span><span class="line"><span class="cl">COPY --from=builder /bin/my-app /root/ </span></span><span class="line"><span class="cl">CMD ["./my-app"] </span></span></code></pre></td></tr></tbody></table> 1. 使用以下内容创建一个 `main.go` 文件(一个简单的 “Hello world” 程序): <table class="lntable"><tbody><tr><td class="lntd"><pre class="chroma"><code><span class="lnt">1 </span><span class="lnt">2 </span><span class="lnt">3 </span><span class="lnt">4 </span><span class="lnt">5 </span></code></pre></td><td class="lntd"><pre class="chroma"><code class="language-go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">"fmt"</span> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">"Hello, World!"</span><span class="p">)</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></td></tr></tbody></table> <table class="lntable"><tbody><tr><td class="lntd"><pre class="chroma"><code><span class="lnt">1 </span></code></pre></td><td class="lntd"><pre class="chroma"><code class="language-fallback"><span class="line"><span class="cl">docker build -t my-golang-app . </span></span></code></pre></td></tr></tbody></table> <table class="lntable"><tbody><tr><td class="lntd"><pre class="chroma"><code><span class="lnt">1 </span></code></pre></td><td class="lntd"><pre class="chroma"><code class="language-fallback"><span class="line"><span class="cl">docker run my-golang-app </span></span></code></pre></td></tr></tbody></table> 你应该会看到 “Hello, World!” 打印在你的终端中作为输出。如果一切正常,你现在有一个包含你的 Go 应用的工作的 Docker 镜像。你可以将它推送到注册表或在本地使用它进行开发和测试。 ## 5\. 管理容器 - **docker start/stop/restart:** 启动、停止或重新启动容器。 - **docker exec:** 在正在运行的容器内执行命令。 - **docker attach:** 连接到正在运行的容器的控制台。 - **docker logs:** 查看容器的日志。 - **docker rm:** 移除一个已停止的容器。 ## 6\. 使用 Docker Compose 1. 在项目目录中创建一个 `docker-compose.yml` 文件。你将在其中定义构成你的应用程序的服务,以及支持它们所需的任何卷或网络。 2. 示例 `docker-compose.yml` 文件: <table class="lntable"><tbody><tr><td class="lntd"><pre class="chroma"><code><span class="lnt"> 1 </span><span class="lnt"> 2 </span><span class="lnt"> 3 </span><span class="lnt"> 4 </span><span class="lnt"> 5 </span><span class="lnt"> 6 </span><span class="lnt"> 7 </span><span class="lnt"> 8 </span><span class="lnt"> 9 </span><span class="lnt">10 </span><span class="lnt">11 </span><span class="lnt">12 </span><span class="lnt">13 </span></code></pre></td><td class="lntd"><pre class="chroma"><code class="language-fallback"><span class="line"><span class="cl">version: "3" </span></span><span class="line"><span class="cl">services: </span></span><span class="line"><span class="cl"> gateway: </span></span><span class="line"><span class="cl"> image: "my_registry/gateway:latest" </span></span><span class="line"><span class="cl"> ports: </span></span><span class="line"><span class="cl"> - "80:8080" </span></span><span class="line"><span class="cl"> depends_on: </span></span><span class="line"><span class="cl"> - auth </span></span><span class="line"><span class="cl"> - post </span></span><span class="line"><span class="cl"> auth: </span></span><span class="line"><span class="cl"> image: "my_registry/auth:latest" </span></span><span class="line"><span class="cl"> post: </span></span><span class="line"><span class="cl"> image: "my_registry/post:latest" </span></span></code></pre></td></tr></tbody></table> 此配置定义了三个服务:`gateway`、`auth` 和 `post`。每个服务使用不同的镜像。`gateway` 服务还将端口 80 暴露在主机上,而其他两个服务不会将任何端口暴露给外界。请注意,`gateway` 服务依赖于 `auth` 和 `post` 服务,确保在它之前启动这两个服务。 1. 使用适当的 `Dockerfile` 为每个服务创建 Docker 镜像。你可以使用多阶段构建或为每个服务创建单独的镜像。 2. 使用 `docker compose up -d` 运行你的应用程序,这将启动 `docker-compose.yml` 文件中定义的所有服务。 3. 通过向端口 80 上的 gateway 服务发送请求来测试你的应用程序。Docker Compose 将管理容器之间的网络连接,允许你与每个服务通信,就像它们在本地运行一样。 ## 7\. 常用命令 1. 从 Dockerfile 构建镜像(假设你在包含 Dockerfile 的目录中): <table class="lntable"><tbody><tr><td class="lntd"><pre class="chroma"><code><span class="lnt">1 </span></code></pre></td><td class="lntd"><pre class="chroma"><code class="language-fallback"><span class="line"><span class="cl">$ docker build -t my-image . </span></span></code></pre></td></tr></tbody></table> <table class="lntable"><tbody><tr><td class="lntd"><pre class="chroma"><code><span class="lnt">1 </span></code></pre></td><td class="lntd"><pre class="chroma"><code class="language-fallback"><span class="line"><span class="cl">$ docker run -d --name webserver -p 80:80 nginx </span></span></code></pre></td></tr></tbody></table> <table class="lntable"><tbody><tr><td class="lntd"><pre class="chroma"><code><span class="lnt">1 </span></code></pre></td><td class="lntd"><pre class="chroma"><code class="language-fallback"><span class="line"><span class="cl">$ docker stop <container_id> </span></span></code></pre></td></tr></tbody></table> <table class="lntable"><tbody><tr><td class="lntd"><pre class="chroma"><code><span class="lnt">1 </span></code></pre></td><td class="lntd"><pre class="chroma"><code class="language-fallback"><span class="line"><span class="cl">$ docker start <container_id> </span></span></code></pre></td></tr></tbody></table> <table class="lntable"><tbody><tr><td class="lntd"><pre class="chroma"><code><span class="lnt">1 </span></code></pre></td><td class="lntd"><pre class="chroma"><code class="language-fallback"><span class="line"><span class="cl">$ docker rm <container_id> </span></span></code></pre></td></tr></tbody></table> <table class="lntable"><tbody><tr><td class="lntd"><pre class="chroma"><code><span class="lnt">1 </span></code></pre></td><td class="lntd"><pre class="chroma"><code class="language-fallback"><span class="line"><span class="cl">$ docker pull <image_name>:<tag> </span></span></code></pre></td></tr></tbody></table> 1. 从本地机器移除镜像(请注意,如果其他镜像正在使用它们,这不会移除底层层): <table class="lntable"><tbody><tr><td class="lntd"><pre class="chroma"><code><span class="lnt">1 </span></code></pre></td><td class="lntd"><pre class="chroma"><code class="language-fallback"><span class="line"><span class="cl">$ docker rmi <image_id> </span></span></code></pre></td></tr></tbody></table> <table class="lntable"><tbody><tr><td class="lntd"><pre class="chroma"><code><span class="lnt">1 </span></code></pre></td><td class="lntd"><pre class="chroma"><code class="language-fallback"><span class="line"><span class="cl">$ docker tag <original_image>:<tag> <new_name>:<tag> </span></span></code></pre></td></tr></tbody></table> 1. 将镜像推送到 Docker Hub(确保你已登录): <table class="lntable"><tbody><tr><td class="lntd"><pre class="chroma"><code><span class="lnt">1 </span></code></pre></td><td class="lntd"><pre class="chroma"><code class="language-fallback"><span class="line"><span class="cl">$ docker push <image_name>:<tag> </span></span></code></pre></td></tr></tbody></table> <table class="lntable"><tbody><tr><td class="lntd"><pre class="chroma"><code><span class="lnt">1 </span><span class="lnt">2 </span><span class="lnt">3 </span><span class="lnt">4 </span></code></pre></td><td class="lntd"><pre class="chroma"><code class="language-fallback"><span class="line"><span class="cl">$ docker login </span></span><span class="line"><span class="cl">Username: <your_username> </span></span><span class="line"><span class="cl">Password: *********** </span></span><span class="line"><span class="cl">Login Succeeded </span></span></code></pre></td></tr></tbody></table> 这些是一些在使用 Docker 镜像和容器时可能会用到的常用命令。如果需要了解有关特定 Docker 概念或命令的更多信息,可以查看官方[Docker 文档](https://docs.docker.com/)。
admin
2024年9月18日 22:32
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码