容器的配置和存储

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本实验介绍了如何在容器中配置环境遍历和共享文件

容器的配置和存储


1. 创建资源

开始实验之前,您需要先创建实验相关资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息

2. 配置和存储的快速上手

在上面的实验中我们学习了容器的网络用法和网络模型,接下来我们来学习几种配置容器中的服务,以及管理容器存储系统的方式。

  1. 容器环境变量

在容器的配置中,最简单的方式是配置容器的环境变量。当我们使用docker run运行容器是,可以添加-e参数为容器设置环境变量。在配置环境变量时,也可以和-p参数一样同时设置多个-e参数。

参数配置完成后,进入容器使用echo命令输出设置的环境变量。验证-e参数的使用。

docker run -it --name env1 -e ECHO=环境变量 -e NUM=123456 busybox
echo $ECHO $NUM
exit

  1. 容器文件复制

容器中的另一个存储方式是使用docker cp命令,在宿主机和容器之间进行文件的复制。在文件复制时容器中文件的描述方式为,容器名:容器文件路径

我们在宿主机中通过echo命令创建文件local.txt。然后创建容器file1,接下来通过docker cp复制到容器中。最后在容器中通过cat命令显示文件命令。

echo 本机生成的文件 > local.txt
docker run -itd --name file1 busybox
docker cp local.txt file1:/local.txt
docker exec file1 cat local.txt
  1. 文件的挂载

除了使用docker cp文件复制的办法之外,我们还可以在创建容器的时候使用-v参数将宿主机中的文件直接挂在到容器中。该参数的用法为-v 宿主机文件的绝对路径:容器文件的绝对路径。相比较docker cp这种办法的优势是可以在一条命令中完成容器的配置。

docker run -itd --name file2 -v $(pwd)/local.txt:/mount.txt busybox
docker exec file2 cat mount.txt

3. MYSQL镜像的基本用法

在上一个步骤中,我们讲解了容器的管理和存储的基本用法。接下来我们用一个MySQL容器来演示这些用法的具体实战。为了实验演示,我们先来学习一下MySQL容器的基本用法。

传统启动MySQL服务的方式,是在操作系统中安装MySQL的服务,并且通过systemctl命令进行启动,但是这种方式需要在系统目录中复制相应的文件,同时向系统中注册服务。这样的流程不但复杂,一旦服务的文件或者配置被破坏或者篡改会导致服务不可用,且难以定位问题。

因此在使用了Docker之后,我们可以从官方仓库中下载已经配置好的MySQL容器镜像。然后直接通过镜像的方式启动服务。这样做不会再宿主机的系统中保存任何文件和配置。服务的稳定性大大提高。

  1. MySQL容器的启动配置

在本实验中我们使用mysql容器的8.0版本进行实验。我们来看一下MySQL容器镜像的启动配置方式,MySQL数据开是通过网络对外提供服务得,当服务启动后,默认会打开并监听3306端口,用来接受客户端得各种命令。

在这里我们使用默认得Bridge网络模型,同时使用-p参数设置端口映射,将MySQL得服务暴露到宿主机得网卡上。

除此之外在启动MySQL容器得时候,我们还可以通过设置MYSQL_ROOT_PASSWORD环境变量得方式,设置MySQL中root用户得初始化密码。这里我们使用-e参数来设置。

在配置好启动命令之后,我们启动容器,并且使用bash登录到容器中,验证环境变量得配置成功。

docker pull mysql:8.0
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=[MYSQL密码] mysql:8.0
docker exec -it mysql bin/bash

echo $MYSQL_ROOT_PASSWORD
exit

  1. 进入MySQL服务的控制台

MySQL服务启动后,我们可以使用mysql命令登录服务得控制台,该命令的用法为mysql -u用户名 -p,其中-p表示登录账户需要密码。命令执行后输入在上一个步骤中设置的密码即可进入控制台。

docker exec -it mysql mysql -uroot -p
[输入MYSQL密码]

  1. MySQ控制台验证命令

在MySQL控制台中,我们可以使用status命令查看服务的运行状态,使用show Database;查看服务中的数据库,也可以使用help命令查看其他命令的用法。

status
show Databases;
help
exit

4. 复制修改MYSQL配置文件

在MySQL容器中,环境变量只能对一些简单的属性进行配置,实际上大多数属性都是通过位于/etc/mysql/my.cnf的配置文件进行管理的。接下来我们来学习如何使用文件复制的方式进行配置管理。

  1. 查看MySQL配置属性值

在MySQL服务中包含了大量的属性值,这些属性值影响服务的运行状态。如果希望修改属性值,就需要修改my.cnf配置文件。在本次实验中,我们使用一个对服务影响不大的属性general_log来演示配置文件的用法。

首先我们先进入控制台,然后使用show variables命令查看设置前的属性值。可以发现属性值现在为OFF

docker exec -it mysql mysql -uroot -p[MYSQL密码]
show variables like 'general_log';
exit

  1. 复制修改配置文件

如果单纯的为了修改配置,我们可以直接在容器中修改配置文件。但是为了防止容器被删除或者被破坏时,修改好的配置文件丢失,我们先使用docker cp将配置文件复制到宿主机中的/root/mysql/config/目录中作为副本。

mkdir -p /root/mysql/config/
docker cp mysql:/etc/my.cnf /root/mysql/config/my.cnf
cat /root/mysql/config/my.cnf

  1. 当配置文件复制完毕后,我们使用vi编辑该文件,在[mysqld]段落的末尾添加如下内容,修改后的段落如下。
  • 输入/secure-file-priv按回车可快速定位,修改secure-file-priv的值为NULL
  • 添加general_log = 1
  1. 需要先按i键进入编辑模式。
  2. 编辑完成之后按esc退出编辑模式。
  3. 然后按大写的ZZ保存并退出vim。
vi /root/mysql/config/my.cnf
general_log = 1

5. 挂载MYSQL配置文件

在上一步我们完成了配置文件的复制和修改,接下来我们来将配置文件应用到容器服务中

  1. 应用配置文件

我们将配置文件复制回容器中,为了让配置文件生效,我们需要使用docker restart命令重新启动容器。

docker cp /root/mysql/config/my.cnf mysql:/etc/my.cnf
docker restart mysql

  1. 查看配置结果

容器重启之后,我们再次进入控制台查看属性值,会发现新的属性值已经生效。

docker exec -it mysql mysql -uroot -p
[MYSQL密码]
show variables like 'general_log';
exit

  1. 挂载方式应用配置文件

在上面的步骤中,我们演示了使用docker cp复制修改MySQL配置文件的方式。这种方式需要先修改配置文件,然后重启服务。步骤比较繁琐。除此之外,我们还可以使用-v参数,在容器创建时,就将配置文件挂载到容器中。

需要注意的时,如果使用-v参数挂载宿主机文件时,容器的挂载位置已经有文件存在,曾宿主机中的文件会覆盖容器中的文件

容器创建成功后,我们查询MySQL属性,会发现新的属性值已经生效。由此可见这种文件挂载的方式明显比文件复制的方式要简便高效。

docker run -itd --name mysql-mount -e MYSQL_ROOT_PASSWORD=[MYSQL密码] -v /root/mysql/config/my.cnf:/etc/my.cnf mysql:8.0
docker exec -it mysql-mount mysql -uroot -p
[MYSQL密码]
show variables like 'general_log';
exit

实验地址:https://developer.aliyun.com/adc/scenario/f9384030b533400c94a363495400ba40

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
缓存 Kubernetes Docker
容器服务ACK常见问题之容器服务ACK ingress websocket配置失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
6月前
|
Java API Spring
Spring容器如何使用一个注解来指定一个类型为配置类型
Spring容器如何使用一个注解来指定一个类型为配置类型
51 0
|
7天前
|
Kubernetes 监控 Java
如何在Kubernetes中配置镜像和容器的定期垃圾回收
如何在Kubernetes中配置镜像和容器的定期垃圾回收
|
5月前
|
存储 安全 Linux
Podman入门全指南:安装、配置与运行容器
Podman入门全指南:安装、配置与运行容器
2599 1
|
6月前
|
存储 Kubernetes Cloud Native
【阿里云云原生专栏】云原生容器存储:阿里云CSI与EBS的高效配合策略
【5月更文挑战第29天】阿里云提供云原生容器存储接口(CSI)和弹性块存储(EBS)解决方案,以应对云原生环境中的数据存储挑战。CSI作为Kubernetes的标准接口简化存储管理,而EBS则提供高性能、高可靠性的块存储服务。二者协同实现动态供应、弹性伸缩及数据备份恢复。示例代码展示了在Kubernetes中使用CSI和EBS创建存储卷的过程。
273 3
|
3月前
|
JSON JavaScript 开发者
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
【8月更文挑战第7天】Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
|
3月前
|
弹性计算 Kubernetes 开发者
利用容器化服务实现游戏服务器的动态资源配置
【8月更文第12天】在游戏行业中,用户基数的变化往往呈现出明显的波动性,特别是在推广活动期间,用户基数会显著增加,而在非推广期则会有所下降。为了应对这种变化,游戏开发者需要一种能够根据用户基数动态调整服务器资源的解决方案,以确保用户体验的同时最大限度地节省成本。容器化服务因其灵活的资源管理和成本控制能力,成为了理想的解决方案。
61 2
|
3月前
|
Linux 开发工具 数据库
【REP】hrms-ERPNext 容器安装配置
【REP】hrms-ERPNext 容器安装配置
|
4月前
|
安全 网络协议 云计算
Docker容器网络配置详解
【7月更文挑战第16天】Docker的网络配置是实现容器间以及容器与外部网络通信的基础。通过选择合适的网络模式和配置选项,可以构建高效、安全、可扩展的Docker网络解决方案。
|
4月前
|
存储 JavaScript 容器
TS,添加注释,//,ctrl + /,shift + alt + a,输出语句,console.log(“Hello Ts‘),变量和数据类型导读,变量就是用来存储数据的容器,变量的使用,TS
TS,添加注释,//,ctrl + /,shift + alt + a,输出语句,console.log(“Hello Ts‘),变量和数据类型导读,变量就是用来存储数据的容器,变量的使用,TS