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

第45天:使用Docker容器

目标

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

背景知识

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

1. Docker的基本概念

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

2. 安装Docker

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

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镜像。

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服务器代码:

package mainimport ("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中添加以下内容:

# 使用官方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目录,执行以下命令:

docker build -t my-go-app .

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

4.5 运行容器

本地运行构建的镜像:

docker run -p 8080:8080 my-go-app

4.6 访问应用程序

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

5. Docker容器与镜像的管理

5.1 列出镜像和容器

要查看本地的Docker镜像:

docker images

要查看运行中的容器:

docker ps

5.2 停止和删除容器

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

docker stop <container_id>

若想删除容器:

docker rm <container_id>

5.3 删除镜像

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

docker rmi my-go-app

6. Docker Compose

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

6.1 安装Docker Compose

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

docker-compose --version

6.2 创建docker-compose.yml

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

version: '3'services:web:build: .ports:- "8080:8080"

6.3 启动服务

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

docker-compose up

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

7. Docker网络和数据管理

7.1 Docker网络

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

docker network ls

7.2 Docker数据管理

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

7.3 创建和使用卷

创建一个卷:

docker volume create my_data

在运行容器时使用该卷:

docker run -v my_data:/data my-go-app

8. 运行流程图

以下是运行Docker容器的流程图:

创建Dockerfile
构建镜像
运行容器
访问应用
使用Docker命令管理

9. 总结

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

相关工具

  • Docker Documentation
  • Docker Hub

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/468421.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【学习笔记】Kylin-Desktop-V10-SP1 麒麟系统知识4——设备设置

提示&#xff1a;学习麒麟Kylin-Desktop-V10-SP1系统设备设置相关知识&#xff0c;包含设备设置进入方法、配置打印机、设置鼠标、键盘相关参数&#xff08;包含输入法的配置&#xff09;、以及管理快捷键组合、和多屏协同相关配置 一、前期准备 成功安装麒麟系统&#xff08…

Linux应用项目之量产工具(一)——显示系统

目录 前言 项目特点及介绍 ① 简单易用 ② 软件可配置、易扩展 ③ 纯 C 语言编程 软件总框架 显示系统 1.数据结构抽象 disp_manager.h 2.Framebuffer编程 framebuffer.c 3.显示管理 disp_manager.c 4.单元测试 disp_test.c 顶层目录Makefile 顶层目录Makefil…

企微SCRM价格解析及其性价比分析

内容概要 在如今的数字化时代&#xff0c;企业对于客户关系管理的需求日益增长&#xff0c;而企微SCRM&#xff08;Social Customer Relationship Management&#xff09;作为一款新兴的客户管理工具&#xff0c;正好满足了这一需求。本文旨在为大家深入解析企微SCRM的价格体系…

leetcode92:反转链表||

给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#xff1a;[1,4,3,2…

Python——数列1/2,2/3,3/4,···,n/(n+1)···的一般项为Xn=n/(n+1),当n—>∞时,判断数列{Xn}是否收敛

没注释的源代码 from sympy import * n symbols(n) s n/(n1) print(数列的极限为&#xff1a;,limit(s,n,oo))

多线程的创建方式以及及Thread类详解

目录 一.线程的创建方法&#xff1a;&#xff08;重点&#xff09; 一&#xff1a;继承Thread类 写法一&#xff1a;正常写法 写法二&#xff1a;匿名内部类 二.实现Runnable接口 写法一&#xff1a;正常写法 写法二&#xff1a;匿名内部类 三. 实现 Callable 接口 ​…

成功解决WSL2上的Ubuntu22.04执行sudo apt-get update指令报错问题

问题&#xff1a;输入sudo apt-get update指令会显示如下报错 问题所在&#xff1a;Temporary failure in name resolution 显然是系统无法解析域名。这可能是 DNS 配置问题。 解决方案&#xff1a; 临时修改 DNS 配置 尝试手动修改 /etc/resolv.conf 文件来使用公共 DNS 服务…

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-19

文件下载与邀请翻译者 学习英特尔开发手册&#xff0c;最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册&#xff0c;会是一件耗时费力的工作。如果有愿意和我一起来做这件事的&#xff0c;那么&#xff…

ffmpeg 视频滤镜:屏蔽边框杂色- fillborders

滤镜描述 fillborders 官网链接 > FFmpeg Filters Documentation fillborders滤镜有几种方式帮你屏蔽边框的杂色、不好的图案。 滤镜使用 参数 left <int> ..FV.....T. set the left fill border (from 0 to INT_MAX) (default 0)right …

Unity性能优化 -- 性能分析工具

Stats窗口Profiler窗口Memory Profiler其他性能分析工具&#xff08;Physica Debugger 窗口&#xff0c;Import Activity 窗口&#xff0c;Code Coverage 窗口&#xff0c;Profile Analyzer 窗口&#xff0c;IMGUI Debugger 窗口&#xff09; Stats 统级数据窗口 game窗口 可…

【Ant.designpro】上传图片

文章目录 一、前端二、后端 一、前端 fieldProps:可以监听并且获取到组件输入的内容 action{“/api/upload_image”} 直接调用后端接口 <ProFormUploadButtonlabel{"上传手续图片"}name{"imgs"}action{"/api/upload_image"}max{5} fieldPro…

王珊数据库系统概论第六版PDF+第五版课后答案+课件

为了保持科学性、先进性和实用性&#xff0c; 编者在第5版教材基础上对全书内容进行了修改、更新和充实。在科学性方面&#xff0c; 编者在系统篇中增加了第9章关系数据库存储管理&#xff0c; 讲解数据库的逻辑与物理组织方式及索引结构。增加这部分内容有助于学生更好地理解关…

胡闹厨房练习(一)

参考教程 参考教程 学习视频 目录 准备工作 一、创建项目 二、处理预置文件和设置 三、编辑器布局 四、Visual Studio设置 五、导入资源 六、设置源素材 七、视觉效果&#xff08;后期处理&#xff09; 角色控制器 一、角色 二、制作动画 三、动画控制 四、运动脚…

「QT」几何数据类 之 QVector2D 二维向量类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

Spring中的过滤器和拦截器

Spring中的过滤器和拦截器 一、引言 在Spring框架中&#xff0c;过滤器&#xff08;Filter&#xff09;和拦截器&#xff08;Interceptor&#xff09;是实现请求处理的两种重要机制。它们都基于AOP&#xff08;面向切面编程&#xff09;思想&#xff0c;用于在请求的生命周期…

网站架构知识之Ansible模块(day021)

1.Ansible模块 作用:通过ansible模块实现批量管理 2.command模块与shell模块 command模块是ansible默认的模块&#xff0c;适用于执行简单的命令&#xff0c;不支持特殊符号 案列01&#xff0c;批量获取主机名 ansible all -m command -a hostname all表示对主机清单所有组…

requestAnimationFrame与setInterval的抉择

&#x1f64c; 如文章有误&#xff0c;恳请评论区指正&#xff0c;谢谢&#xff01; ❤ 写作不易&#xff0c;「点赞」「收藏」「转发」 谢谢支持&#xff01; 背景 在之前的业务中遇到有 JS 动画的实现场景&#xff0c;但当电脑打开太多网页或是同时启动很多应用时&#xff0c…

高性能分布式缓存Redis-分布式锁与布隆过滤器

一、分布式锁 我们先来看一下本地锁 在并发编程中&#xff0c;我们通过锁&#xff0c;来避免由于竞争而造成的数据不一致问题。通常&#xff0c;我们以 synchronized 、Lock 来使用它&#xff08;单机情况&#xff09; 来看这段代码 Autowired RedisTemplate<String,Str…

Flutter运行App时出现“Running Gradle task ‘assembleDebug“问题解决

在参考了众多解决办法中最有用并且最快的方法 Gradle Distributions 在这个地方下载对应你这个文件中的gradle版本 然后将 最后一行本来不是这样的,我们把下载好的zip包保存到本地,然后用这个代替网址,最后成功运行

【CUDA】认识CUDA

目录 一、CUDA编程 二、第一个CUDA程序 三、CUDA关键字 四、device管理 4.1 初始化 4.2 Runtime API查询GPU信息 4.3 决定最佳GPU CUDA C 编程指南CUDA C在线文档&#xff1a;CUDA C 编程指南 CUDA是并行计算的平台和类C编程模型&#xff0c;能很容易的实现并行算法。只…