当前位置: 首页 > news >正文

Docker配置与使用详解

一、引言

随着云计算和微服务的兴起,Docker作为一种轻量级的容器化技术,越来越受到开发者和运维人员的青睐。Docker通过容器化的方式,将应用程序及其依赖项打包成一个可移植的镜像,从而实现了应用程序的快速部署和扩展。本文将详细介绍Docker的配置与使用,包括Docker的安装、镜像管理、容器操作以及Docker Compose的使用等,并附有详细的代码示例。

二、Docker安装

Docker的安装过程因操作系统而异,但大多数操作系统都提供了官方支持的Docker安装包。以下以Ubuntu系统为例,介绍Docker的安装步骤:

1. 更新软件包列表

sudo apt-get update

2. 安装Docker所需的依赖项

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

3. 添加Docker官方GPG密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

4. 添加Docker官方软件源

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

5. 更新软件包列表并安装Docker CE(社区版)

sudo apt-get update
sudo apt-get install docker-ce

6. 启动Docker服务并设置为开机自启

sudo systemctl start docker
sudo systemctl enable docker

7. 验证Docker安装是否成功

sudo docker run hello-world

如果以上命令能正确输出Docker的信息,说明Docker安装成功。

三、Docker镜像管理

Docker镜像是Docker容器的基础,它包含了应用程序及其依赖项的所有文件。Docker提供了丰富的镜像管理工具,如Docker Hub、阿里云容器镜像服务等。以下介绍Docker镜像的拉取、查看、搜索和删除等基本操作。

1. 拉取镜像

使用docker pull命令可以从Docker Hub或其他镜像仓库拉取镜像。例如,拉取Ubuntu 20.04的镜像:

sudo docker pull ubuntu:20.04

2. 查看镜像

使用docker images命令可以查看本地所有的镜像:

sudo docker images

3. 搜索镜像

使用docker search命令可以在Docker Hub上搜索镜像。例如,搜索名为nginx的镜像:

sudo docker search nginx

4. 删除镜像

使用docker rmi命令可以删除本地镜像。例如,删除名为ubuntu:20.04的镜像:

sudo docker rmi ubuntu:20.04

四、Docker容器操作

Docker容器是Docker镜像的实例化对象,它包含了应用程序的运行环境。以下介绍Docker容器的创建、启动、停止、进入和删除等基本操作。

1. 创建并启动容器

使用docker run命令可以创建并启动容器。例如,基于ubuntu:20.04镜像创建一个名为mycontainer的容器,并在其中执行bash命令:

sudo docker run -it --name mycontainer ubuntu:20.04 bash

其中,-it表示以交互模式运行容器,--name用于指定容器名称。

2. 查看容器

使用docker ps命令可以查看正在运行的容器:

sudo docker ps

使用docker ps -a命令可以查看所有容器(包括已停止的容器):

sudo docker ps -a

3. 停止容器

使用docker stop命令可以停止正在运行的容器。例如,停止名为mycontainer的容器:

sudo docker stop mycontainer

4. 进入容器

使用docker exec命令可以在正在运行的容器中执行命令。例如,进入名为mycontainer的容器并执行bash命令:

sudo docker exec -it mycontainer bash

另外,还可以使用docker attach命令进入容器的终端,但这种方式会阻塞其他命令的执行。

5. 删除容器

使用docker rm命令可以删除容器。例如,删除名为mycontainer的容器:

sudo docker rm mycontainer

注意:在删除容器之前,需要先停止该容器。

五、Docker Compose使用

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。它使用YAML文件来配置应用程序的服务、网络和卷等。以下介绍Docker Compose的基本使用步骤。

1. 安装Docker Compose

Docker Compose的安装过程与Docker类似,但它是作为一个独立的工具安装的。在Linux系统上,可以通过下载二进制文件并设置可执行权限来完成安装。以下是在Linux上安装Docker Compose的示例步骤:

首先,下载Docker Compose的二进制文件,比如docker-compose的当前稳定版本(版本号需要替换为最新的):

sudo curl -L "https://github.com/docker/compose/releases/download/vX.Y.Z/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

然后,设置可执行权限:

sudo chmod +x /usr/local/bin/docker-compose

接下来,测试安装是否成功:

docker-compose --version

如果返回了Docker Compose的版本号,则表示安装成功。

2. 创建Docker Compose配置文件

Docker Compose使用YAML文件来定义服务、网络和卷等。以下是一个简单的docker-compose.yml文件示例,它定义了一个名为web的web应用程序服务和一个名为db的数据库服务:

version: '3'
services:web:build: ./webports:- "5000:5000"depends_on:- dbenvironment:DB_HOST: dbDB_USER: exampleDB_PASS: exampleDB_NAME: exampledbdb:image: postgresenvironment:POSTGRES_PASSWORD: example

在这个例子中,web服务基于当前目录下的./web目录中的Dockerfile构建,并将容器的5000端口映射到宿主机的5000端口。web服务依赖于db服务,并使用环境变量来配置数据库连接信息。db服务则基于官方的PostgreSQL镜像创建。

3. 使用Docker Compose启动服务

在包含docker-compose.yml文件的目录下运行以下命令来启动服务:

docker-compose up -d

-d选项表示在后台运行服务。你可以使用docker-compose ps命令来查看正在运行的服务。

4. 停止和删除服务

要停止服务,可以使用以下命令:

docker-compose stop

要删除服务以及它们使用的网络、卷等,可以使用以下命令:

docker-compose down

5. 其他Docker Compose命令

Docker Compose提供了许多其他命令,如docker-compose logs(查看服务日志)、docker-compose restart(重启服务)等。你可以通过docker-compose --help命令查看所有可用的命令和选项。

六、总结

本文详细介绍了Docker的配置与使用,包括Docker的安装、镜像管理、容器操作以及Docker Compose的使用。通过具体的代码示例,展示了如何执行各种Docker操作,并解释了它们的作用和用法。希望本文能帮助读者更好地理解和使用Docker技术。随着云计算和微服务的不断发展,Docker将继续发挥重要作用,为开发者和运维人员提供更高效、更灵活的解决方案。

相关文章:

Docker配置与使用详解

一、引言 随着云计算和微服务的兴起,Docker作为一种轻量级的容器化技术,越来越受到开发者和运维人员的青睐。Docker通过容器化的方式,将应用程序及其依赖项打包成一个可移植的镜像,从而实现了应用程序的快速部署和扩展。本文将详…...

触控MCU芯片(1):英飞凌PSoC第6代第7代

前言: 说到触摸MCU芯片,这个历史也是很久了,比如日常经常接触到的洗衣机、电冰箱、小家电,隔着一层玻璃,轻轻一按就能识别按键,感觉比过去纯机械式的按键更高级更美观,不仅白电,现在很多汽车也都在进行触摸按键的改版,不再使用笨重的机械按键,比如空调调温按键、档位…...

git pull报错:unable to pull from remote repository due to conflicting tag(s)

背景 我在vscode里正常拉取代码,突然就报了如题所示的错误。 原因 因为vscode的拉取按钮执行的实际命令是:git pull --tags origin branch-name,该命令的实际含义是从远程仓库拉取指定的分支和该远程仓库上的所有标签。 在拉取标签时本地的…...

Python将字符串用特定字符分割并前面加序号

Python将字符串用特定字符分割并前面加序号 Python将字符串用特定字符分割并前面加序号,今天项目中就遇到,看着不难,得花点时间搞出来急用啊,在网上找了一圈,没发现有完整流程的文章。所以就搞出来并写了这个文章。仅…...

【第16章】Vue实战篇之跨域解决

文章目录 前言一、浏览器跨域二、配置代理1.公共请求2.代理配置 总结 前言 前后端项目分离衍生出浏览器跨域问题,开发之前我们通过配置代理解决这个问题。 一、浏览器跨域 浏览器的跨域问题主要是由于浏览器的同源策略导致的。同源策略是浏览器的一个安全功能&…...

【PB案例学习笔记】-22制作一个语音朗读金额小应用

写在前面 这是PB案例学习笔记系列文章的第22篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gite…...

glmark2代码阅读总结

glmark2代码阅读总结 一、总体 用输入参数生成testbench项用scene和benchmark管理进行复用通过类的重载,创建出不同的分支和具体的实现点,如scene和mainloop类用例执行又规划,每个scene都统一有setup,等使用scene的继承关系&…...

第 6 章 监控系统 | 监控套路 - 总结

前面,我们使用 Prometheus + Grafana + Node Exporter 实现虚拟机监控及告警。 那么,😇 监控的套路究竟是什么呢? 第 1 步:暴露 metrics,通过某个 exporter 将 metrics 暴露出来第 2 步:配置 Prometheus 抓取上面暴露的 metrics 数据第 3 步:加速 metrics 显示,配置…...

VsCode中C文件调用其他C文件函数失败

之前一直使用CodeBlocks,最近使用vscode多,感觉它比较方便,但在调用其他C文件的时候发现报错以下内容基于单C文件运行成功,否则请移步 博文:VSCode上搭建C/C开发环境 报错信息 没有使用CodeRunner插件,弹…...

css中content属性你了解多少?

在CSS中,content属性通常与伪元素(如 ::before 和 ::after)一起使用,用于在元素的内容之前或之后插入生成的内容。这个属性不接受常规的HTML内容,而是接受一些特定的值,如字符串、属性值、计数器值等。 以…...

JVM-GC-G1垃圾回收器

JVM-GC-G1垃圾回收器 基本概念 card table card table概念是为了解决新生代对象进入老年代时,在进行新生代扫描的时候会遍历老年代对象的问题。将内存分为多个card,如果在一个老年代card中存在引用新生代对象的对象,则将该区域标记及为dirty card。 CS…...

【Ubuntu通用压力测试】Ubuntu16.04 CPU压力测试

使用 stress 对CPU进行压力测试 我也是一个ubuntu初学者,分享是Linux的优良美德。写的不好请大佬不要喷,多谢支持。 sudo apt-get update 日常先更新再安装东西不容易出错 sudo apt-get upgrade -y 继续升级一波 sudo apt-get install -y linux-tools…...

Artix Linux 默认不使用 systemd

开发者选择不使用systemd,而倾向于使用OpenRC或runit作为其初始化系统的原因。 哲学和设计原则:Systemd是一个功能丰富的初始化系统和系统管理器,它集成了许多功能,但这也导致它的设计哲学与一些用户或开发者的偏好不符。有些用户…...

JVM-GC-CMS垃圾回收器

JVM-CMS垃圾回收器 CMS垃圾回收的步骤 1. 初始标记(InitialMarking) 这是一个STW的过程,并行标记,只是标记GC Roots能直接关联到的对象。由于GC Root直接关联的对象少,因此STW时间比较短。 2. 并发标记 非STW的过程&…...

【玩转google云】实战:如何在GKE上使用Helm安装和配置3节点的RabbitMQ集群

需求 因项目需要需要在Google Kubernetes Engine (GKE) 中使用Helm安装一个3节点的RabbitMQ集群,配置用户名和密码,开通公网访问的Web管理界面,指定namespace为mq,并使用5G的硬盘存储MQ的数据。 前提条件 GKE集群:确保你有一个运行中的GKE集群。Helm工具:确保已安装Hel…...

【神经网络】深度神经网络

深度神经网络(Deep Neural Network,简称DNN)是一种模仿人脑神经网络结构和工作原理的机器学习模型。它通过层级化的特征学习和权重调节,能够实现复杂任务的高性能解决方案。深度神经网络由多个神经元层组成,每个神经元…...

机器学习算法 —— K近邻(KNN分类)

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 目录 KNN的介绍和应用KNN的介绍1) KNN建立过程2) 类别的判定KNN的优点KNN的缺点KNN的应用实战KNN分类数据集 —— KNN分类库函数导入数据导入模型训练&可视化原理简析莺尾花数据集 —— KNN分…...

Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码

Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码 可封装APP,适合做猫狗宠物类的发信息发布,当然懂的修改一下,做其他信息发布也是可以的。 Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码...

c++ 智能指针使用注意事项及解决方案

c11智能指针 shared_ptr介绍注意事项示例解决方案 weak_ptr特点示例 unique_ptr特点示例 shared_ptr 介绍 shared_ptr 是一种智能指针,用于自动管理动态分配的对象的生命周期。它通过引用计数机制来确保当最后一个 shared_ptr 指向一个对象时,该对象会…...

SQLite Delete 语句

SQLite Delete 语句 SQLite 的 DELETE 语句用于从表中删除数据。它是 SQL 数据库管理中非常基础且重要的操作之一。在使用 DELETE 语句时,可以删除表中的特定行,也可以删除整个表的数据。本文将详细介绍 SQLite 中的 DELETE 语句,包括其语法、用法以及如何安全地执行删除操…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

基于服务器使用 apt 安装、配置 Nginx

🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...