15分钟学 Go 第 45 天 : 使用Docker容器

第45天:使用Docker容器

目标

在本节中,我们将深入了解Docker及其基本用法,掌握如何使用Docker容器来简化开发和部署流程。

背景知识

Docker是一个开源平台,用于开发、运输和运行应用程序。它使我们能够使用容器技术将应用程序及其依赖项打包在一起,确保无论在何处运行都能保持一致性。

1. Docker的基本概念

概念 说明
容器 一种轻量级、可移植的虚拟化环境,允许应用程序运行。
镜像 容器的蓝图,包含应用程序及其所有依赖项和运行环境。
Dockerfile 一个文本文件,描述如何构建Docker镜像的步骤。
Docker Hub Docker的公共镜像仓库,可以存储和分享镜像。
守护进程 Docker的核心组件,负责创建、运行和管理容器。

2. 安装Docker

在开始之前,请确保你的开发环境中已安装Docker。可以通过以下命令检查是否成功安装Docker:

bash 复制代码
docker --version

如果未安装,请访问 Docker官网 按照指导进行安装。

3. Docker基础命令

命令 说明
docker pull <image> 从Docker Hub拉取镜像
docker images 列出本地镜像
docker run <image> 创建并运行一个容器
docker ps 列出正在运行的容器
docker stop <container> 停止指定的容器
docker rm <container> 删除指定的容器
docker rmi <image> 删除指定的镜像
docker exec -it <container> /bin/bash 通过交互式终端进入容器指令接口

3.1 运行第一个Docker容器

我们来运行一个简单的Docker容器,以测试Docker是否正常工作。我们将使用Official的hello-world镜像。

bash 复制代码
docker run hello-world

运行该命令后,Docker将从Docker Hub拉取该镜像并运行容器。如果成功,你将看到一条欢迎消息,表明Docker已成功安装并配置。

4. 使用Dockerfile构建镜像

Dockerfile是构建自定义镜像的基础。下面是一个简单的示例,创建一个运行Go应用程序的Docker镜像。

4.1 创建项目结构

在你的工作目录下,创建如下目录结构:

my-go-app/
├── Dockerfile
└── main.go

4.2 编写Go应用程序

main.go中添加以下简单的HTTP服务器代码:

go 复制代码
package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, Docker!")
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

4.3 编辑Dockerfile

Dockerfile中添加以下内容:

Dockerfile 复制代码
# 使用官方Go语言镜像作为基础镜像
FROM golang:1.20

# 设置工作目录
WORKDIR /app

# 复制Go模块文件和代码到容器
COPY go.mod go.sum ./
RUN go mod download
COPY . .

# 编译Go应用程序
RUN go build -o main .

# 运行应用程序
CMD ["./main"]

# 开放服务的端口
EXPOSE 8080

4.4 构建镜像

在终端中切换到my-go-app目录,执行以下命令:

bash 复制代码
docker build -t my-go-app .

这将根据Dockerfile构建一个名为my-go-app的镜像。

4.5 运行容器

本地运行构建的镜像:

bash 复制代码
docker run -p 8080:8080 my-go-app

4.6 访问应用程序

在浏览器中输入 http://localhost:8080,你应该可以看到"Hello, Docker"的消息。

5. Docker容器与镜像的管理

5.1 列出镜像和容器

要查看本地的Docker镜像:

bash 复制代码
docker images

要查看运行中的容器:

bash 复制代码
docker ps

5.2 停止和删除容器

如果需要停止运行的容器,可以通过以下命令停止它:

bash 复制代码
docker stop <container_id>

若想删除容器:

bash 复制代码
docker rm <container_id>

5.3 删除镜像

若要删除不再需要的镜像,可以使用:

bash 复制代码
docker rmi my-go-app

6. Docker Compose

对于更复杂的应用程序,Docker Compose是一种便利的工具,允许你使用一个YAML文件同时定义和管理多个容器。

6.1 安装Docker Compose

确保你的Docker已经安装了Compose。可以通过以下命令检查:

bash 复制代码
docker-compose --version

6.2 创建docker-compose.yml

在项目目录中创建一个名为 docker-compose.yml 的文件,并加入以下内容:

yaml 复制代码
version: '3'

services:
  web:
    build: .
    ports:
      - "8080:8080"

6.3 启动服务

在项目目录中运行以下命令启动服务:

bash 复制代码
docker-compose up

访问 http://localhost:8080,确保应用程序正常工作。

7. Docker网络和数据管理

7.1 Docker网络

Docker提供不同的网络驱动程序,支持容器间的通信。可以通过以下命令查看当前的网络:

bash 复制代码
docker network ls

7.2 Docker数据管理

若要在容器间共享数据,可以使用卷(Volume)来管理数据。卷是存储在主机文件系统上的一个特定路径,能够在不同的容器之间共享数据。

7.3 创建和使用卷

创建一个卷:

bash 复制代码
docker volume create my_data

在运行容器时使用该卷:

bash 复制代码
docker run -v my_data:/data my-go-app

8. 运行流程图

以下是运行Docker容器的流程图:
创建Dockerfile 构建镜像 运行容器 访问应用 使用Docker命令管理

9. 总结

通过本节学习,我们了解了Docker的基础知识,掌握了如何使用Dockerfile构建镜像,运行和管理容器,以及使用Docker Compose管理多容器应用。此外,也学习了如何使用Docker网络和数据卷来支持更复杂的应用架构。

相关工具


怎么样今天的内容还满意吗?再次感谢观众老爷的观看,关注GZH:凡人的AI工具箱,回复666,送您价值199的AI大礼包。最后,祝您早日实现财务自由,还请给个赞,谢谢!

相关推荐
游客5205 分钟前
opencv中的各种滤波器简介
图像处理·人工智能·python·opencv·计算机视觉
一位小说男主5 分钟前
编码器与解码器:从‘乱码’到‘通话’
人工智能·深度学习
დ旧言~6 分钟前
专题八:背包问题
算法·leetcode·动态规划·推荐算法
Monly217 分钟前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat
boligongzhu8 分钟前
DALSA工业相机SDK二次开发(图像采集及保存)C#版
开发语言·c#·dalsa
Eric.Lee20218 分钟前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频
7yewh10 分钟前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux
深圳南柯电子21 分钟前
深圳南柯电子|电子设备EMC测试整改:常见问题与解决方案
人工智能
waicsdn_haha22 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
Kai HVZ22 分钟前
《OpenCV计算机视觉》--介绍及基础操作
人工智能·opencv·计算机视觉