+ `-d`: 让容器在后台运行(以分离模式)。
-p 3306:3306
: 将主机(宿主机)的端口3306映射到容器的端口3306,这允许你通过主机的3306端口访问在容器内运行的MySQL服务。-m="1024M"
: 指定容器使用的内存限制为1GB。这会限制容器可以使用的最大内存量。--privileged=true
: 赋予容器特权,允许它在主机操作系统上执行一些高级操作。这在某些情况下可能是必要的,但是要注意潜在的安全风险。-v /data/software/mysql/conf/:/etc/mysql/conf.d
: 将主机上的/data/software/mysql/conf/
目录挂载到容器内的/etc/mysql/conf.d
目录。这允许你通过编辑主机上的配置文件来配置MySQL容器。-v /data/software/mysql/data:/var/lib/mysql
: 将主机上的/data/software/mysql/data
目录挂载到容器内的/var/lib/mysql
目录。这是MySQL容器用于存储数据的位置。-v /data/software/mysql/log/:/var/log/mysql/
: 将主机上的/data/software/mysql/log/
目录挂载到容器内的/var/log/mysql/
目录,用于存储MySQL日志。-e MYSQL_ROOT_PASSWORD=winner@001
: 设置MySQL的root用户的密码为"root"。这将在容器启动时作为环境变量传递给MySQL容器。--name=mysql
: 给容器取了一个名字叫做"mysql",这样你可以使用这个名称来管理容器,而不需要使用容器的ID。mysql:5.7.19
: 这是要在容器中运行的MySQL Docker镜像的名称和版本。
2、编写docker-compose-mysql.yml
vim docker-compose-mysql.yml
#这一行指定了 Docker Compose 文件的版本。在这种情况下,使用的是版本 3。
version: "3"
#这一部分定义了一个名为 "mysql" 的服务,使用 MySQL 5.7.19 版本的 Docker 镜像。它将创建一个 MySQL 容器。
services:
mysql:
image: mysql:5.7.19
#表示当容器停止时,它会自动重新启动,确保 MySQL 服务持续可用。
restart: always
#为容器指定一个名称,即 "mysql"。
container\_name: mysql
#将主机的 3306 端口映射到容器的 3306 端口,这使得你可以通过主机的 3306 端口访问 MySQL 服务。
ports:
- 3306:3306
#将主机上的三个目录分别挂载到容器内的相应目录中,实现了配置、数据和日志的持久化存储。这对于避免数据丢失以及配置和日志的可维护性都非常重要。
volumes:
- /data/software/mysql/conf/:/etc/mysql/conf.d
- /data/software/mysql/data:/var/lib/mysql
- /data/software/mysql/log/:/var/log/mysql
#设置 MySQL 容器的环境变量。这些变量会在容器启动时传递给 MySQL 服务:
environment:
#设置 MySQL 的 root 用户密码为 "root"。 默认用户名为root
MYSQL\_ROOT\_PASSWORD: root
#创建一个名为 "test" 的数据库。
MYSQL\_DATABASE: test
#创建一个名为 "bing" 的用户。
MYSQL\_USER: bing
#设置用户 "bing" 的密码为 "123456"。
MYSQL\_PASSWORD: 123456
3、使用docker-compose启动
#-d 后台启动
docker compose -f docker-compose-mysql.yml up -d
启动成功
放开3306端口
#设置单个端口开放
sudo firewall-cmd --add-port=3306/tcp --permanent
#重新加载防火墙
sudo firewall-cmd --reload
连接成功
关闭mysql
#吐槽一下 网上的都加了- 不懂为啥
docker compose -f docker-compose-mysql.yml down
成功
使用docker ps -a 查看到mysql镜像也被移除了
compose命令选项
-f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定
-d, 在后台启动运行
-p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名
–x-networking 使用 Docker 的可拔插网络后端特性
–x-network-driver DRIVER 指定网络后端的驱动,默认为 bridge
–verbose 输出更多调试信息
-v, --version 打印版本并退出
- Docker Compose 的 YAML 文件包含 4 个一级 key:version、services、networks、volumes
- version 是必须指定的,而且总是位于文件的第一行。它定义了 Compose 文件格式(主要是 API)的版本。注意,version 并非定义 Docker Compose 或 Docker 引擎的版本号
- services 用于定义不同的应用服务。上边的例子定义了两个服务:一个名为 lagou-mysql数据库服 务以及一个名为lagou-eureka的微服。Docker Compose 会将每个服务部署在各自的容器中
- networks 用于指引 Docker 创建新的网络。默认情况下,Docker Compose 会创建 bridge 网络。 这是一种单主机网络,只能够实现同一主机上容器的连接。当然,也可以使用 driver 属性来指定不 同的网络类型
- volumes 用于指引 Docker 来创建新的卷
compose常用命令
#启动
docker-compose up -d
#关闭
docker-compose down
#查看进程
docker-compose ps
#查看日志
docker-compose logs
#重新构建服务
docker-compose build
#开始服务
docker-compose start
#停止服务
docker-compose stop
#重启服务
docker-compose restart
官方提供的一个小demo
https://docs.docker.com/compose/gettingstarted/
编写dockerFile
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
这个文件告诉docker:
- 从 Python 3.7 映像开始构建映像。
- 将工作目录设置为
/code
. - 设置命令使用的环境变量
flask
。 - 安装gcc和其他依赖项
- 复制
requirements.txt
并安装 Python 依赖项。 - 向镜像添加元数据以描述容器正在侦听端口 5000
.
将项目中的当前目录复制到.
镜像中的workdir。- 将容器的默认命令设置为
flask run
。
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
此 Compose 文件定义了两个服务:web
和redis
。
该服务使用从当前目录中web
构建的图像。Dockerfile
然后,它将容器和主机绑定到公开的端口8000
。此示例服务使用 Flask Web 服务器的默认端口5000
。
在浏览器中输入 http://localhost:8000/ 以查看应用程序正在运行。
如果显示连接被拒绝,可以看下8000端口有没有被放开。
#查看镜像
docker inspect <tag or id>
编辑compose.yaml项目目录中的文件以添加 服务的绑定挂载web
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
environment:
FLASK\_DEBUG: "true"
redis:
image: "redis:alpine"
新volumes密钥将主机上的项目目录(当前目录)挂载到/code容器内部,允许您动态修改代码,而无需重建映像。关键environment设置 FLASK_DEBUG环境变量,它告诉flask run在开发模式下运行并在更改时重新加载代码。该模式仅应在开发中使用。
从项目目录中,键入docker compose up
使用更新的 Compose 文件构建应用程序,然后运行它。
docker compose up
更改问候语app.py并保存。例如,将Hello World! 消息更改为Hello from Docker!:
如果您想在后台运行服务,您可以将标志-d
(用于“分离”模式)传递给docker compose up
并使用docker compose ps
来查看当前正在运行的内容:
docker compose up -d
Starting composetest_redis_1...
Starting composetest_web_1...
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/f20d2f25f474f4a21b3eedc9ea6a4ebf.png)
![img](https://img-blog.csdnimg.cn/img_convert/46d9efe34e9a891983dbb9daf1d69ffa.png)
![img](https://img-blog.csdnimg.cn/img_convert/a370d6e615bce5d345c1bde38ecd7f6c.png)
![img](https://img-blog.csdnimg.cn/img_convert/cbb1d2a07d9e5d5d480fcf04046d09e3.png)
![img](https://img-blog.csdnimg.cn/img_convert/5e944484603bd525c88380ffbeaf0d0c.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)**
![img](https://img-blog.csdnimg.cn/img_convert/23d45dd0f543da8e860a8bd27e89db98.jpeg)
为了做好运维面试路上的助攻手,特整理了上百道 **【运维技术栈面试题集锦】** ,让你面试不慌心不跳,高薪offer怀里抱!
这次整理的面试题,**小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。**
![](https://img-blog.csdnimg.cn/img_convert/8b204dd6e5e35dc42fe4f78a8a461c5a.png)
本份面试集锦涵盖了
* **174 道运维工程师面试题**
* **128道k8s面试题**
* **108道shell脚本面试题**
* **200道Linux面试题**
* **51道docker面试题**
* **35道Jenkis面试题**
* **78道MongoDB面试题**
* **17道ansible面试题**
* **60道dubbo面试题**
* **53道kafka面试**
* **18道mysql面试题**
* **40道nginx面试题**
* **77道redis面试题**
* **28道zookeeper**
**总计 1000+ 道面试题, 内容 又全含金量又高**
* **174道运维工程师面试题**
> 1、什么是运维?
> 2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
> 3、现在给你三百台服务器,你怎么对他们进行管理?
> 4、简述raid0 raid1raid5二种工作模式的工作原理及特点
> 5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
> 6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
> 7、Tomcat和Resin有什么区别,工作中你怎么选择?
> 8、什么是中间件?什么是jdk?
> 9、讲述一下Tomcat8005、8009、8080三个端口的含义?
> 10、什么叫CDN?
> 11、什么叫网站灰度发布?
> 12、简述DNS进行域名解析的过程?
> 13、RabbitMQ是什么东西?
> 14、讲一下Keepalived的工作原理?
> 15、讲述一下LVS三种模式的工作过程?
> 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
> 17、如何重置mysql root密码?
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
![img](https://img-blog.csdnimg.cn/img_convert/91e852ea8fee2c4ac3fe4d8206695b06.jpeg)
0、什么叫CDN?
> 11、什么叫网站灰度发布?
> 12、简述DNS进行域名解析的过程?
> 13、RabbitMQ是什么东西?
> 14、讲一下Keepalived的工作原理?
> 15、讲述一下LVS三种模式的工作过程?
> 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
> 17、如何重置mysql root密码?
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中...(img-9onw2Aix-1712679387587)]