【运维】Docker的简单使用

目录

什么是Docker,Docker的作用?

Docker如何使用?

Dockerfile(制作自己的镜像)

为什么用 Docker,解决了什么问题?(面试重点)

1. 环境一致性问题

2. 快速部署

3. 资源隔离

4. 弹性伸缩

实际工作场景

开发环境

测试部署

生产环境

🆚 与传统虚拟机的区别

Docker如何进入容器

方法1:使用 bash 或 sh(最常用)

方法2:使用 sh(如果容器没有bash)

完整进入容器步骤

Docker进入 MySQL 容器的方法

方法1:直接进入 MySQL 命令行(最常用)

方法2:先进入容器,再进MySQL

方法3:如果不知道容器名,先查看

🚀 实际工作场景示例

场景1:开发环境快速操作

场景2:排查问题

场景3:备份数据


什么是Docker,Docker的作用?

        Docker是用来打包应用和依赖环境的一个工具,为了解决应用可以在任何地方都能以相同的方式运行(一次构建,到处运行)。解决了”在我这儿都是好的,在你那里就不行了。“这个经典问题。

核心包含三点:

镜像-比如软件的安装包

容器-镜像运行起来的”实例“

仓库-存放镜像的地方

实际工作中,我们用Docker来

统一开发、测试、生产的环境。

快速部署

实现微服务架构。

比如我们项目就用 Docker 打包了 Spring Boot 应用,一行命令就能在任何服务器上运行起来。"

Docker如何使用?

基础操作:

# 1. 拉取镜像(下载软件)
docker pull nginx:latest

# 2. 运行容器(启动软件)
docker run -d -p 80:80 --name my-nginx nginx

# 3. 查看运行中的容器
docker ps

# 4.查看本地所有的镜像
docker images

# 5. 停止容器
docker stop my-nginx

# 6. 删除容器
docker rm my-nginx

实际项目示例

# 一键启动全套开发环境
docker run -d --name mysql -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0

docker run -d --name redis -p 6379:6379 redis:latest

docker run -d --name my-app -p 8080:8080 \
  --link mysql:db --link redis:cache my-app-image

Dockerfile(制作自己的镜像)

# 基于官方的Java环境
FROM openjdk:8-jdk-alpine

# 复制jar包到镜像中
COPY target/my-app.jar app.jar

# 暴露端口
EXPOSE 8080

# 启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]

构建镜像:

docker build -t my-app:1.0 .

为什么用 Docker,解决了什么问题?(面试重点)

1. 环境一致性问题

         场景:比如代码在本地Mac开发环境运行完美,但是部署到测试服务器(Ubantu)就报错,测试环境好不容易弄好了,但到了生产环境(CentOS)又崩溃了。

# 开发环境能跑,测试环境报错?
# Docker 解决:打包整个环境,到处运行一样

2. 快速部署

        传统方式如果需要部署到其他环境,需要装JDK、配环境、部署费事费力,使用Docker拉取镜像,然后启动即可,效率非常高。

# 传统方式:装JDK、配环境、部署应用 → 半小时
# Docker方式:docker run ... → 10秒钟

3. 资源隔离

        一台服务器上可能部署多个应用。应用A需要使用Java8,应用B需要使用Java17,它们可能会互相干扰。

# 多个应用在同一服务器,互不干扰
docker run --name app1 my-app:1.0
docker run --name app2 my-app:2.0
# 两个应用完全隔离,不会冲突

4. 弹性伸缩

        当一个服务流量压力过大,通过运行多个实例通过负载均衡来降低单个实例的压力。

# 流量大了,快速启动更多实例
docker run -d --name app-instance1 my-app:1.0
docker run -d --name app-instance2 my-app:1.0
docker run -d --name app-instance3 my-app:1.0

实际工作场景

开发环境

# 新同事入职,不用配环境
git clone project
docker-compose up -d  # 一键启动所有服务
# 立即开始开发!

测试部署

# 测试人员不用关心环境
docker run -d -p 8080:8080 test-version:1.2
# 直接测试功能

生产环境

# 运维使用同样的镜像
docker run -d -p 8080:8080 prod-version:1.2
# 开发测试生产环境完全一致

🆚 与传统虚拟机的区别

特性虚拟机Docker容器
启动速度分钟级秒级
性能损耗15-20%1-2%
磁盘占用GB级别MB级别
隔离程度完全隔离进程隔离

Docker如何进入容器

方法1:使用 bashsh(最常用)

# 进入容器并启动bash
docker exec -it 容器名 bash

# 实际例子
docker exec -it mysql-container bash
docker exec -it redis-container bash
docker exec -it my-spring-app bash

方法2:使用 sh(如果容器没有bash)

# 对于Alpine等轻量级镜像,用sh
docker exec -it 容器名 sh

# 实际例子
docker exec -it nginx-container sh
docker exec -it alpine-container sh

完整进入容器步骤

# 1.查看所有正在运行的容器
docker ps

# 输出示例:
CONTAINER ID   IMAGE          COMMAND                  NAMES
a1b2c3d4e5f6   mysql:8.0      "docker-entrypoint.s…"   mysql-dev
c1d2e3f4a5b6   nginx:latest   "nginx -g 'daemon of…"   nginx-proxy


# 2.进入MySQL容器
docker exec -it mysql-dev bash

# 2.进入Nginx容器  
docker exec -it nginx-proxy sh

Docker进入 MySQL 容器的方法

#进入 Docker 中的 MySQL (常用)
docker exec -it 容器名 mysql -u用户名 -p

记住关键参数:

  • exec:在容器内执行命令

  • -it:交互模式,可以输入

  • mysql -uroot -p:启动 MySQL 客户端

这样就能像操作本地 MySQL 一样操作容器里的数据库了。

方法1:直接进入 MySQL 命令行(最常用)

# 直接进入容器并启动mysql客户端
docker exec -it mysql-container mysql -uroot -p

# 执行后会提示输入密码,然后就直接进入MySQL命令行
Enter password: 
Welcome to the MySQL monitor.
mysql> 

方法2:先进入容器,再进MySQL

# 1. 先进入容器内部
docker exec -it mysql-container bash

# 2. 然后在容器内部启动mysql客户端
root@container-id:/# mysql -uroot -p
Enter password: 
mysql>

方法3:如果不知道容器名,先查看

# 查看正在运行的容器
docker ps

# 输出示例:
CONTAINER ID   IMAGE          COMMAND                  CREATED       STATUS       PORTS                               NAMES
a1b2c3d4e5f6   mysql:8.0      "docker-entrypoint.s…"   2 hours ago   Up 2 hours   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql-dev

# 然后用查到的容器名进入
docker exec -it mysql-dev mysql -uroot -p

🚀 实际工作场景示例

场景1:开发环境快速操作

# 一键进入测试数据库
docker exec -it mysql-dev mysql -uroot -p123456

# 直接执行SQL
mysql> show databases;
mysql> use myapp;
mysql> select * from users;

场景2:排查问题

# 进入容器查看文件
docker exec -it mysql-container bash

# 查看MySQL配置文件
root@container-id:/# cat /etc/mysql/my.cnf

# 查看日志文件
root@container-id:/# tail -f /var/log/mysql/error.log

场景3:备份数据

# 在容器内执行备份
docker exec mysql-container mysqldump -uroot -p123456 mydb > backup.sql

# 或者直接进入容器再备份
docker exec -it mysql-container bash
root@container-id:/# mysqldump -uroot -p123456 mydb > /tmp/backup.sql
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mxin5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值