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

02-Docker 使用

docker:快速构建、运行、管理应用的工具,可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用

1、部署mysql

先停掉虚拟机中的MySQL,确保你的虚拟机已经安装Docker,且网络开通的情况下,执行下面命令即可安装MySQL(注意:若服务器上已经有mysql 占用了3306端口,可修改绑定服务器3307端口,如下)

docker run -d \
  --name mysql \
  -p 3307:3306 \          # 将主机端口从3306改为3307
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

运行完后,可以通过navicat 正常访问 

如果想要集群部署,只需修改`宿主机端口映射`和`容器名称`保证不同即可,因为容器之间环境是相互隔离的,所以都是3306不用变

# 如果想要集群部署只需修改docker容器内部的端口号和容器名称即可

# 节点1
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

# 节点2
docker run -d \
  --name mysql2 \
  -p 3307:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

# 节点3
docker run -d \
  --name mysql3 \
  -p 3308:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

大家可以发现,当我们执行命令后,Docker做的第一件事情,是去自动搜索并下载了MySQL,然后会自动运行MySQL,我们完全不用插手,非常方便。而且,这种安装方式完全不用考虑运行的操作系统环境问题,它不仅仅在CentOS系统是这样,在Ubuntu系统、macOS系统、甚至是装了WSL的Windows下,都可以使用这条命令来安装MySQL。

要知道,不同操作系统下其安装包、运行环境是都不相同的!如果是手动安装,必须手动解决安装包不同、环境不同的、配置不同的问题

2、镜像和容器

当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。

  • 镜像:不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库
  • 容器:Docker会在运行镜像时创建一个隔离环境,称为容器(container)。
  • 镜像仓库:存储和管理镜像的平台,Docker官方维护了一个公共仓库:Docker Hub(目前国内已停止访问)。

 3、命令解读

docker run -d \
  --name mysql \
  -p 3307:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

解读:

  • docker run -d:创建并运行一个容器,-d则是让容器以后台进程运行
  • --name mysql: 给容器起个名字叫mysql,你可以叫别的,要唯一
  • -p 3307:3306: 设置端口映射。格式: -p 宿主机端口:容器内端口,示例中将宿主机的3307映射到容器内的3306端口
  • -e TZ=Asia/Shanghai:配置容器内进程运行时的一些参数,此处是设置时区,格式:-e KEY=VALUE,KEY和VALUE都由容器内进程决定
  • -e MYSQL_ROOT_PASSWORD=123:是设置MySQL默认密码
  • mysql : 设置镜像名称,Docker会根据这个名字搜索并下载镜像,格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是版本号,在未指定TAG的情况下,默认拉取最新版本镜像,也就是mysql:latest

容器是隔离环境,外界不可访问。但是可以将`宿主机端口`映射`容器内到端口`,当访问宿主机指定端口时,就是在访问容器内的端口了。
容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致,但是这里为了防止与之前外部安装的MySQL的3306冲突,改为3307映射容器内的3306。

镜像的名称不是随意的,而是要到DockerRegistry中寻找,镜像运行时的配置也不是随意的,要参考镜像的帮助文档。

4、Docker基础

4.1、常见命令

Docker最常见的命令就是操作镜像、容器的命令,详见官方文档: https://docs.docker.com/

命令 说明 文档地址
docker pull 拉取镜像 docker pull
docker push 推送镜像到DockerRegistry docker push
docker images 查看本地镜像 docker images
docker rmi 删除本地镜像 docker rmi
docker run 创建并运行容器(不能重复创建) docker run
docker stop 停止指定容器 docker stop
docker start 启动指定容器 docker start
docker restart 重新启动容器 docker restart
docker rm 删除指定容器 docker rm
docker ps 查看容器 docker ps
docker logs 查看容器运行日志 docker logs
docker exec 进入容器 docker exec
docker save 保存镜像到本地压缩文件 docker save
docker load 加载本地压缩文件到镜像 docker load
docker inspect 查看容器详细信息 docker inspect

补充:默认情况下,每次重启虚拟机我们都需要手动启动Docker和Docker中的容器。通过命令可以实现开机自启

# Docker开机自启
systemctl enable docker

# Docker容器开机自启
docker update --restart=always [容器名/容器id]

5、部署Nginx容器

需求:

  • 在DockerHub中搜索Nginx镜像,查看镜像的名称
  • 拉取Nginx镜像
  • 查看本地镜像列表
  • 创建并运行Nginx容器
  • 查看容器
  • 停止容器
  • 再次启动容器
  • 进入Nginx容器
  • 删除容器
# 第1步,查看nginx镜像仓库及相关信息
docker search nginx

# 第2步,拉取Nginx镜像
docker pull nginx

# 第3步,查看镜像
docker images
# 结果如下:
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   16 months ago   141MB
mysql        latest    3218b38490ce   17 months ago   516MB

# 第4步,创建并允许Nginx容器
docker run -d --name nginx -p 80:80 nginx

# 第5步,查看运行中容器
docker ps
# 也可以加格式化方式访问,格式会更加清爽
docker ps --format "table {
  {.ID}}\t{
  {.Image}}\t{
  {.Ports}}\t{
  {.Status}}\t{
  {.Names}}"

# 查看容器日志:docker logs 容器名
docker logs nginx
# 持续或动态查看容器日志:docker logs -f 容器名
docker logs -f nginx

# 第6步,访问网页,地址:http://虚拟机IP地址:80

# 第7步,停止容器
docker stop nginx

# 第8步,查看所有容器
docker ps -a --format "table {
  {.ID}}\t{
  {.Image}}\t{
  {.Ports}}\t{
  {.Status}}\t{
  {.Names}}"

# 第9步,再次启动nginx容器
docker start nginx

# 第10步,再次查看容器
docker ps --format "table {
  {.ID}}\t{
  {.Image}}\t{
  {.Ports}}\t{
  {.Status}}\t{
  {.Names}}"

# 第11步,查看容器详细信息
docker inspect nginx

# 第12步,进入容器,-it指的是可输入终端,查看容器内目录,输入exit 退出容器
docker exec -it nginx bash
# 或者,可以进入容器的同时跟上执行的命令,之间一步进入容器内的MySQL
docker exec -it mysql mysql -uroot -p

# 将镜像打包下载到本地,.tar.gz是打压缩包
docker save -o nginx.tar nginx:latest

# 第13步,删除容器
docker rm nginx
# 发现无法删除,因为容器运行中,强制删除容器
docker rm -f nginx
# 删除镜像
docker rmi nginx:latest

# 将打包好的镜像加载到本地,不用再去docker pull 对应镜像了
docker load -i nginx.tar

# 查看nginx镜像
docker images

# 创建并允许Nginx容器
docker run -d --name nginx -p 80:80 nginx

 可通过下面命令进行格式化信息:

docker ps --format "table {
  {.ID}}\t{
  {.Image}}\t{
  {.Ports}}\t{
  {.Status}}\t{
  {.Names}}"

http://192.168.56.10/,通过这个地址可以访问nginx

 5.1、数据别名

给常用Docker命令起别名,方便我们访问:

# 修改/root/.bashrc文件
vim /root/.bashrc
内容如下:
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {
  {.ID}}\t{
  {.Image}}\t{
  {.Ports}}\t{
  {.Status}}\t{
  {.Names}}"'
alias dis='docker images'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# 修改/root/.bashrc文件 后,执行下面命令,使其生效
source ~/.bashrc

6、数据卷挂载

容器是隔离环境,容器内程序的文件、配置、运行时产生的容器都在容器内部,我们要读写容器内的文件非常不方便。大家思考几个问题:

  • 如果要升级MySQL版本,需要销毁旧容器,那么数据岂不是跟着被销毁了?
  • MySQL、Nginx容器运行后,如果我要修改其中的某些配置该怎么办?
  • 我想要让Nginx代理我的静态资源怎么办?

因此,容器提供程序的运行环境,但是程序运行产生的数据、程序运行依赖的配置都应该与容器解耦

http://www.dtcms.com/a/107438.html

相关文章:

  • libevent 核心数据结构
  • AI 数字人短视频数字人源码部署揭秘:开启虚拟内容创作新纪元​
  • 工作后考研
  • 为什么在Transformer模型处理的输入维度会因为图像分辨率大小的不同而导致patch数量的变化,但是不需要修改模型的维度参数?
  • C语言数组知识点
  • 【C语言】深入理解指针(四):回调函数与qsort函数的奥秘
  • Mysql MIC高可用集群搭建
  • python的一些使用姿势
  • 【HTML】分享一个自己写的3*3拼图小游戏
  • Go语言从零构建SQL数据库(4)-解析器
  • 人工智能之数学基础:矩阵分解之LU分解
  • Stable Diffusion win10 Cpu安装日志
  • 国产三维CAD「皇冠CAD」在汽车零部件领域建模教程:刹车片
  • React-Diffing算法和key的作用
  • 【AI论文】什么、如何、何处以及效果如何?大语言模型测试时缩放技术调研
  • Python扩展知识详解:map函数
  • Pinia持久化插件pinia-plugin-persistedstate
  • Ubuntu安装psql
  • 推导Bias² + Variance + σ²_ε
  • Java项目之基于ssm的校园驿站管理系统(源码+文档)
  • GO语言学习(16)Gin后端框架
  • Linux服务器环境下如何优化环境变量
  • DeepSeek 开源的 3FS 如何?
  • 【Pandas】pandas DataFrame info
  • 高速电路中的PCB及其完整性设计
  • AI的未来演进
  • ubuntu git cola gui
  • DecodeEX 功能揭秘:什么是“复制交易”?
  • Windows 10 如何设置右击鼠标快速进行“关机”
  • Java安全 - CC1链