Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库

这篇具有很好参考价值的文章主要介绍了Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:ChenZhen

博客地址:https://www.chenzhen.space/

版权:来自b站视频
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】

因为黑马的课件ppt做的实在是太好了,基本就是原样copy过来整理一下。

如果对你有帮助,请给一个小小的star⭐


为了部署我的一个项目,专门学了docker的使用。

基于docker的隔离性容器机制,能够无视linux版本的和各种依赖版本的差距进行部署。不用再去鼓捣一些依赖和版本,我的项目也是部署成功了。不过可能要是不学docker,我的项目早就部署完了😂。

1.1.什么是Docker

微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。

  • 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。
  • 在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题

1.1.1.应用部署的环境问题

大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:

  • 依赖关系复杂,容易出现兼容性问题

  • 开发、测试、生产环境有差异

例如一个项目中,部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等,这些服务部署时所需要的函数库、依赖项各不相同,甚至会有冲突。给部署带来了极大的困难。

1.1.2.Docker解决依赖兼容问题

而Docker确巧妙的解决了这些问题,Docker是如何实现的呢?

Docker为了解决依赖的兼容问题的,采用了两个手段:

  • 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包

  • 将每个应用放到一个隔离容器去运行,避免互相干扰

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

这样打包好的应用包中,既包含应用本身,也保护应用所需要的Libs、Deps,无需再操作系统上安装这些,自然就不存在不同应用之间的兼容问题了。

虽然解决了不同应用的兼容问题,但是开发、测试等环境会存在差异,操作系统版本也会有差异,怎么解决这些问题呢?

1.1.3.Docker解决操作系统环境差异

要解决不同操作系统环境差异问题,必须先了解操作系统结构。以一个Ubuntu操作系统为例,结构如下:

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

  • 计算机硬件:例如CPU、内存、磁盘等
  • 系统内核:所有Linux发行版的内核都是Linux,例如CentOS、Ubuntu、Fedora等。内核可以与计算机硬件交互,对外提供内核指令,用于操作计算机硬件。
  • 系统应用:操作系统本身提供的应用、函数库。这些函数库是对内核指令的封装,使用更加方便。

应用于计算机交互的流程如下:

1)应用调用操作系统应用(函数库),实现各种功能

2)系统函数库是对内核指令集的封装,会调用内核指令

3)内核指令操作计算机硬件

Ubuntu和CentOSpringBoot都是基于Linux内核,无非是系统应用不同,提供的函数库有差异:

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

此时,如果将一个Ubuntu版本的MySQL应用安装到CentOS系统,MySQL在调用Ubuntu函数库时,会发现找不到或者不匹配,就会报错了:

Docker如何解决不同系统环境的问题?

  • Docker将用户程序与所需要调用的系统(比如Ubuntu)函数库一起打包
  • Docker运行到不同操作系统时,直接基于打包的函数库,借助于操作系统的Linux内核来运行

1.1.4.小结

Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?

  • Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像
  • Docker应用运行在容器中,使用沙箱机制,相互隔离

Docker如何解决开发、测试、生产环境有差异的问题?

  • Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

Docker是一个快速交付应用、运行应用的技术,具备下列优势:

  • 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
  • 运行时利用沙箱机制形成隔离容器,各个应用互不干扰
  • 启动、移除都可以通过一行命令完成,方便快捷

安装Docker

Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。

Docker CE 分为 stable testnightly 三个更新频道。

官方网站上有各种环境下的 安装指南,这里主要介绍 Docker CE 在 CentOS上的安装。

1.CentOS安装Docker

Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。

1.1.卸载(可选)

如果之前安装过旧版本的Docker,可以使用下面命令卸载:

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

1.2.安装docker

首先需要大家虚拟机联网,安装yum工具

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

然后更新本地镜像源:

# 设置docker镜像源
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

然后输入命令:

yum install -y docker-ce

docker-ce为社区免费版本。稍等片刻,docker即可安装成功。

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

1.3.启动docker

Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙!

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

通过命令启动docker:

systemctl start docker  # 启动docker服务

systemctl stop docker  # 停止docker服务

systemctl restart docker  # 重启docker服务

然后输入命令,可以查看docker版本:

docker -v

1.4.配置镜像加速

docker官方镜像仓库网速较差,我们需要设置国内镜像服务:

参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

镜像加速器

加速器地址 https://ih82vvk5.mirror.aliyuncs.com

CentOS

  1. 安装/升级Docker客户端
    推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce

  2. 配置镜像加速器
    针对Docker客户端版本大于 1.10.0 的用户

    您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ih82vvk5.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

2.Docker的基本操作

2.1.镜像操作

2.1.1.镜像名称

首先来看下镜像的名称组成:

  • 镜名称一般分两部分组成:[repository]:[tag]。
  • 在没有指定tag时,默认是latest,代表最新版本的镜像

如图:

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记
这里的mysql就是repository,5.7就是tag,合一起就是镜像名称,代表5.7版本的MySQL镜像。

2.1.2.镜像命令

常见的镜像操作命令如图:

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

2.1.3.案例1-拉取、查看镜像

需求:从DockerHub中拉取一个nginx镜像并查看

1)首先去镜像仓库搜索nginx镜像,比如DockerHub:
Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记
2)根据查看到的镜像名称,拉取自己需要的镜像,通过命令:docker pull nginx

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记
3)通过命令:docker images 查看拉取到的镜像
Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

2.1.4.案例2-保存、导入镜像

需求:利用docker save将nginx镜像导出磁盘,然后再通过load加载回来

1)利用docker xx --help命令查看docker save和docker load的语法

例如,查看save命令用法,可以输入命令:

docker save --help

结果:

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

命令格式:

docker save -o [保存的目标文件名称] [镜像名称]

2)使用docker save导出镜像到磁盘

运行命令:

docker save -o nginx.tar nginx:latest

3)使用docker load加载镜像

先删除本地的nginx镜像:

docker rmi nginx:latest

然后运行命令,加载本地文件:

docker load -i nginx.tar

2.2.容器操作

2.2.1.容器相关命令

容器操作的命令如图:

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

容器保护三个状态:

  • 运行:进程正常运行
  • 暂停:进程暂停,CPU不再运行,并不释放内存
  • 停止:进程终止,回收进程占用的内存、CPU等资源

其中:

  • docker run:创建并运行一个容器,处于运行状态

  • docker pause:让一个运行的容器暂停

  • docker unpause:让一个容器从暂停状态恢复运行

  • docker stop:停止一个运行的容器

  • docker start:让一个停止的容器再次运行

  • docker rm:删除一个容器

2.2.2.案例-创建并运行一个容器

创建并运行nginx容器的命令:

docker run --name containerName -p 80:80 -d nginx

命令解读:

  • docker run :创建并运行一个容器
  • –name : 给容器起一个名字,比如叫做mn
  • -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
  • -d:后台运行容器
  • nginx:镜像名称,例如nginx

这里的-p参数,是将容器端口映射到宿主机端口。

默认情况下,容器是隔离环境,我们直接访问宿主机的80端口,肯定访问不到容器中的nginx。

现在,将容器的80与宿主机的80关联起来,当我们访问宿主机的80端口时,就会被映射到容器的80,这样就能访问到nginx了:

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

2.2.3.案例-进入容器,修改文件

需求:进入Nginx容器,修改HTML文件内容,添加“传智教育欢迎您”

提示:进入容器要用到docker exec命令。

步骤

1)进入容器。进入我们刚刚创建的nginx容器的命令为:

docker exec -it mn bash

命令解读:

  • docker exec :进入容器内部,执行一个命令

  • -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互

  • mn :要进入的容器的名称

  • bash:进入容器后执行的命令,bash是一个linux终端交互命令

2)进入nginx的HTML所在目录 /usr/share/nginx/html

容器内部会模拟一个独立的Linux文件系统,看起来如同一个linux服务器一样:

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记
nginx的环境、配置、运行文件全部都在这个文件系统中,包括我们要修改的html文件。

查看DockerHub网站中的nginx页面,可以知道nginx的html目录位置在/usr/share/nginx/html

我们执行命令,进入该目录:

cd /usr/share/nginx/html

查看目录下文件:
Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记
3)修改index.html的内容

容器内没有vi命令,无法直接修改,我们用下面的命令来修改:

sed -i -e 's#Welcome to nginx#传智教育欢迎您#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html

在浏览器访问自己的虚拟机地址,例如我的是:http://192.168.150.101,即可看到结果:

2.2.4.小结

docker run命令的常见参数有哪些?

  • –name:指定容器名称
  • -p:指定端口映射
  • -d:让容器后台运行

查看容器日志的命令:

  • docker logs 容器名
  • 添加 -f 参数可以持续查看日志

查看容器状态:

  • docker ps
  • docker ps -a 查看所有容器,包括已经停止的

2.3.数据卷(容器数据管理)

在之前的nginx案例中,修改nginx的html页面时,需要进入nginx内部。并且因为没有编辑器,修改文件也很麻烦。

这就是因为容器与数据(容器内文件)耦合带来的后果。

要解决这个问题,必须将数据与容器解耦,这就要用到数据卷了。

2.3.1.什么是数据卷

**数据卷(volume)**是一个虚拟目录,指向宿主机文件系统中的某个目录。
Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记
一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。

这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了

2.3.2.数据集操作命令

数据卷操作的基本语法如下:

docker volume [COMMAND]

docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:

  • create 创建一个volume
  • inspect 显示一个或多个volume的信息
  • ls 列出所有的volume
  • prune 删除未使用的volume
  • rm 删除一个或多个指定的volume

2.3.3.创建和查看数据卷

需求:创建一个数据卷,并查看数据卷在宿主机的目录位置

① 创建数据卷

docker volume create html

② 查看所有数据

docker volume ls

③ 查看数据卷详细信息卷

docker volume inspect html

数据卷操作:

  • docker volume create:创建数据卷
  • docker volume ls:查看所有数据卷
  • docker volume inspect:查看数据卷详细信息,包括关联的宿主机目录位置
  • docker volume rm:删除指定数据卷
  • docker volume prune:删除所有未使用的数据卷

2.3.4.挂载数据卷

我们在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录,命令格式如下:

docker run \
  --name mn \
  -v html:/root/html \
  -p 8080:80
  nginx \

这里的-v就是挂载数据卷的命令:

  • -v html:/root/htm :把html数据卷挂载到容器内的/root/html这个目录中

2.3.5.案例-给nginx挂载数据卷

需求:创建一个nginx容器,修改容器内的html目录内的index.html内容

分析:上个案例中,我们进入nginx容器内部,已经知道nginx的html目录所在位置/usr/share/nginx/html ,我们需要把这个目录挂载到html这个数据卷上,方便操作其中的内容。

提示:运行容器时使用 -v 参数挂载数据卷

步骤:

① 创建容器并挂载数据卷到容器内的HTML目录

docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx

② 进入html数据卷所在位置,并修改HTML内容

# 查看html数据卷的位置
docker volume inspect html
# 进入该目录
cd /var/lib/docker/volumes/html/_data
# 修改文件
vi index.html

2.3.6.案例-给MySQL挂载本地目录

容器不仅仅可以挂载数据卷,也可以直接挂载到宿主机目录上。关联关系如下:

  • 带数据卷模式:宿主机目录 --> 数据卷 —> 容器内目录
  • 直接挂载模式:宿主机目录 —> 容器内目录

如图:
Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

语法

目录挂载与数据卷挂载的语法是类似的:

  • -v [宿主机目录]:[容器内目录]
  • -v [宿主机文件]:[容器内文件]

需求:创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

实现思路如下:

1)在将课前资料中的mysql.tar文件上传到虚拟机,通过load命令加载为镜像

2)创建目录/tmp/mysql/data

3)创建目录/tmp/mysql/conf,将课前资料提供的hmy.cnf文件上传到/tmp/mysql/conf

4)去DockerHub查阅资料,创建并运行MySQL容器,要求:

① 挂载/tmp/mysql/data到mysql容器内数据存储目录

② 挂载/tmp/mysql/conf/hmy.cnf到mysql容器的配置文件

③ 设置MySQL密码

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

2.3.7.小结

docker run的命令中通过 -v 参数挂载文件或目录到容器中:

  • -v volume名称:容器内目录
  • -v 宿主机文件:容器内文
  • -v 宿主机目录:容器内目录

数据卷挂载与目录直接挂载的

  • 数据卷挂载耦合度低,由docker来管理目录,但是目录较深,不好找
  • 目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看

3.Dockerfile自定义镜像

常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。

而要自定义镜像,就必须先了解镜像的结构才行。

3.1.镜像结构

镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。

我们以MySQL为例,来看看镜像的组成结构:
Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记
简单来说,镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。

我们要构建镜像,其实就是实现上述打包的过程。

3.2.Dockerfile语法

构建自定义的镜像时,并不需要一个个文件去拷贝,打包。

我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。

而描述上述信息的文件就是Dockerfile文件。

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记
更新详细语法说明,请参考官网文档: https://docs.docker.com/engine/reference/builder

3.3.构建Java项目

3.3.1.基于Ubuntu构建Java项目

  • 步骤1:新建一个空文件夹docker-demo

  • 步骤2:拷贝docker-demo.jar文件到docker-demo这个目录

  • 步骤3:拷贝jdk8.tar.gz文件到docker-demo这个目录

  • 步骤4:拷贝Dockerfile到docker-demo这个目录

  • 其中的内容如下:

    # 指定基础镜像
    FROM ubuntu:16.04
    # 配置环境变量,JDK的安装目录
    ENV JAVA_DIR=/usr/local
    
    # 拷贝jdk和java项目的包
    COPY ./jdk8.tar.gz $JAVA_DIR/
    COPY ./docker-demo.jar /tmp/app.jar
    
    # 安装JDK
    RUN cd $JAVA_DIR \
     && tar -xf ./jdk8.tar.gz \
     && mv ./jdk1.8.0_144 ./java8
    
    # 配置环境变量
    ENV JAVA_HOME=$JAVA_DIR/java8
    ENV PATH=$PATH:$JAVA_HOME/bin
    
    # 暴露端口
    EXPOSE 8090
    # 入口,java项目的启动命令
    ENTRYPOINT java -jar /tmp/app.jar
    
  • 步骤5:进入docker-demo

    将准备好的docker-demo上传到虚拟机任意目录,然后进入docker-demo目录下

  • 步骤6:运行命令:

    docker build -t javaweb:1.0 .
    

最后访问 http://192.168.150.101:8090/hello/count,其中的ip改成你的虚拟机ip

docker build 命令用于从 Dockerfile 构建 Docker 镜像。它有以下常用参数:

  • -t, --tag :给构建的镜像打标签,格式为 name:tag 或 name,默认latest标签。
  • –no-cache : 构建镜像过程不使用缓存,获取最新内容。
  • -p, --pull : 构建镜像过程中拉取父镜像,获取最新版父镜像。
  • .:指定要构建的 Dockerfile 文件所在的路径(默认路径)。

3.3.2.基于java8构建Java项目

虽然我们可以基于Ubuntu基础镜像,添加任意自己需要的安装包,构建镜像,但是却比较麻烦。所以大多数情况下,我们都可以在一些安装了部分软件的基础镜像上做改造。

例如,构建java项目的镜像,可以在已经准备了JDK的基础镜像基础上构建。

需求:基于java:8-alpine镜像,将一个Java项目构建为镜像

实现思路如下:

  • ① 新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile

  • ② 拷贝课前资料提供的docker-demo.jar到这个目录中

  • ③ 编写Dockerfile文件:

    • a )基于java:8-alpine作为基础镜像

    • b )将app.jar拷贝到镜像中

    • c )暴露端口

    • d )编写入口ENTRYPOINT

      内容如下:

      FROM java:8-alpine
      COPY ./app.jar /tmp/app.jar
      EXPOSE 8090
      ENTRYPOINT java -jar /tmp/app.jar
      
  • ④ 使用docker build命令构建镜像

  • ⑤ 使用docker run创建容器并运行

容器迁移

如果您想将现有的容器迁移到另一台服务器上运行,可以考虑以下几种方法:

  1. 导出和导入容器:使用 docker export 命令将容器导出为一个 tar 归档文件,然后将该文件传输到目标服务器,并使用 docker import 命令将归档文件导入为镜像。最后,在目标服务器上使用导入的镜像创建和运行新容器。

导出容器:

docker export -o container.tar container_id

导入容器:

docker import container.tar image_name:tag

在目标服务器上创建并运行容器:

docker run -d --name new_container -p host_port:container_port image_name:tag

这种方法的缺点是容器的历史记录和元数据将丢失。

  1. Docker 镜像仓库:将容器推送到 Docker 镜像仓库(如 Docker Hub)中,并在目标服务器上使用 docker pull 命令从镜像仓库拉取镜像。确保在目标服务器上已经安装 Docker,并且可以访问所使用的镜像仓库。

推送镜像到仓库:

docker login
docker tag image_name:tag username/repository:tag
docker push username/repository:tag

在目标服务器上拉取并运行容器:

docker login
docker pull username/repository:tag
docker run -d --name new_container -p host_port:container_port username/repository:tag

通过使用 Docker 镜像仓库,您可以轻松地在不同的服务器上共享和部署容器镜像。

选择哪种方法取决于您的具体需求和环境。请确保在迁移容器之前备份重要的数据,并在目标服务器上验证容器的正确运行。

3.4.小结

小结:

  1. Dockerfile的本质是一个文件,通过指令描述镜像的构建过程

  2. Dockerfile的第一行必须是FROM,从一个基础镜像来构建

  3. 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine

3.5 一个具体的例子

这个dockerfile是我部署一个python的Flask项目的文件,docker可以看做一台独立的电脑。

我们基于3.10.7版本的python来构建容器,这个镜像的大小是一个多G,原因不仅只是python也包含了其他的依赖。我们可以先去从网上把镜像下载到本地,当然不下载的话,执行FROM的时候也会自动到网上下载

FROM python:3.10.7

# 在容器中创建一个工作目录
WORKDIR /app
# 复制项目文件到容器中
COPY . /app

# 其中-r指定的是txt文件的位置

RUN pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

# RUN pip install --no-cache-dir -r requirements.txt

EXPOSE 8083
WORKDIR /app/chatgpt-embedding
# 启动应用
CMD ["python", "application.py"]

3.6 部署github上热门的chatgpt网页ui

https://github.com/mckaywrigley/chatbot-ui

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

该项目也是提供了docker容器的部署方式,我们直接执行下面的语句即可

docker run --name chatgpt-ui \
  -e OPENAI_API_HOST=https://xxxxx.com \
  -e OPENAI_API_KEY=sk-xxxxxxxxxxxx \
  -p 3000:3000 \
  -d ghcr.io/mckaywrigley/chatbot-ui:main

该语句运行一个ghcr.io/mckaywrigley/chatbot-ui:main镜像,镜像名称的结构通常是 <仓库>/<镜像>:<标签>,其中仓库指定了镜像所在的位置,镜像指定了具体的镜像文件,标签指定了镜像的版本或标识符。

因此,ghcr.io/mckaywrigley/chatbot-ui:main 表示您要拉取 mckaywrigley 用户的 chatbot-ui 仓库中 main 分支的镜像。

当然你的服务器上应该没有下载该镜像,所以它会自己去网上找对应的资源下载

–name :是给该容器取别名,这里取了chatgpt-ui作为别名
-e :这将在容器中设置OPENAI_API_HOSTOPENAI_API_KEY环境变量,其他环境变量可以参考作者github
-p :开发端口映射3000->3000
-d :后台运行

环境变量中:

OPENAI_API_HOST要填你的代理服务器的域名或者IP,国内由于种种原因是无法访问chatgpt服务器的,所有必须要有代理服务器,至于怎么搭建代理服务器,可以去找我的早期文章

OPENAI_API_KEY填你的openai的apikey

理论上运行这一句代码之后,就能在端口3000上访问到服务了

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

3.7 部署mysql8数据库

我们先将mysql8的镜像从网络拉取到本地

docker pull mysql:8.0.11

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

启动 MySQL 实例可以使用下面的命令:

docker run -d \
  --name mysql \
  -e MYSQL_ROOT_PASSWORD=<your_password> \
  -v /root/mydata/mysql/log:/var/log/mysql \
  -v /root/mydata/mysql/data:/var/lib/mysql \
  -v /root/mydata/mysql/conf:/etc/mysql \
  -p 3306:3306 \
  mysql:8.0.11
docker run -d \
  --name mysql2 \
  -e MYSQL_ROOT_PASSWORD=MIIEpAIBAAKMIIASDSDAAK \
  -v /root/mydata/mysql/log:/var/log/mysql \
  -v /root/mydata/mysql/data:/var/lib/mysql \
  -v /root/mydata/mysql/conf:/etc/mysql \
  -v /root/mydata/mysql/mysql-files:/var/lib/mysql-files \
  -p 9276:3306 \
  mysql2:8.0.11

这是一个用于在Docker容器中运行MySQL数据库的Docker运行命令,以下是各个参数的解释:

  1. docker run: 运行Docker容器的命令。

  2. -d: 这是一个选项,表示在后台运行容器(以分离模式)。这意味着容器会在后台运行,并且不会占用你的终端。

  3. --name mysql: 使用这个选项来指定容器的名称,这里将容器命名为"mysql",以便稍后使用容器名称来管理它。

  4. -e MYSQL_ROOT_PASSWORD=<your_password>: 使用-e选项设置环境变量。用于指定MySQL的root用户密码。请将<your_password>替换为你想要设置的实际密码。

  5. -v /root/mydata/mysql/log:/var/log/mysql: 使用-v选项将主机文件系统的目录/root/mydata/mysql/log挂载到容器内的/var/log/mysql目录。这样做是为了将MySQL的日志文件存储到主机上,以便以后查看或备份。

  6. -v /root/mydata/mysql/data:/var/lib/mysql: 同样使用-v选项将主机文件系统的目录/root/mydata/mysql/data挂载到容器内的/var/lib/mysql目录。这是为了将MySQL的数据文件存储到主机上,以便数据持久化。

  7. -v /root/mydata/mysql/conf:/etc/mysql: 使用-v选项将主机文件系统的目录/root/mydata/mysql/conf挂载到容器内的/etc/mysql目录。这是为了将MySQL的配置文件存储到主机上,以便自定义MySQL的配置。

  8. -v /root/mydata/mysql/mysql-files:/var/lib/mysql-files 当指定了外部配置文件与外部存储路径时,也需要指定 /var/lib/mysql-files的外部目录

  9. -p 3306:3306: 使用-p选项将主机的端口3306映射到容器内的端口3306。MySQL默认使用端口3306来监听连接请求,这个映射允许你通过主机的3306端口访问MySQL服务器。(前者是主机端口,后者是docker容器端口)一般我们会把端口映射到3306以外的端口号,防止黑客攻击。

  10. mysql:8.0.11: 这是要运行的Docker镜像的名称和版本标签。在这里,使用了MySQL 8.0.11的官方Docker镜像。

运行之后我用远程软件进行连接,本以为一切顺利的,但是出现了以下问题

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

这个错误出现的原因是从MySQL8.x版本开始, 身份验证插件改为了caching_sha2_password, 而之前的版本为mysql_native_password. 我们现在用的很多MySQL客户端暂时还不支持新的身份验证插件. 对了, IDEA是支持的, 所以用IDEA连接MySQL 8.x数据库没有这个问题.

解决办法:

进入容器内部操作:

这里的mysql8是我在前面给容器起的名字,你们换成自己的名字即可

docker exec -it mysql8 bash

进入 MySQL 命令行

mysql -uroot -p

然后,系统将提示您输入密码。
Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记
成功进入

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

查询

SELECT user, host, plugin from mysql.user;

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

可以看到默认的验证器插件为 caching_sha2_password, 改回mysql_native_password即可:

alter user 'root'@'%' identified with mysql_native_password by '123456';

用于更改名为 ‘root’,在任何主机上都可访问的用户的认证方式为 mysql_native_password,并将其密码设置为 ‘123456’。这意味着该用户可以从任何主机连接到 MySQL,并且需要使用 MySQL 原生密码进行认证。

请注意,您需要将 ‘root’ 替换为要更改的实际用户名,并将 ‘123456’ 替换为你自己的密码。

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记
修改完毕后刷新一下

FLUSH PRIVILEGES;

看看是否生效:

SELECT User, Host, plugin from mysql.user;

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记

重新连接成功!

Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库,我的博文,docker,学习,笔记文章来源地址https://www.toymoban.com/news/detail-756410.html

到了这里,关于Docker的使用教程、学习笔记,附实战:部署chatgpt网页版ui,部署mysql8数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 苍穹外卖部署到云服务器使用Docker学习笔记

    通过部署docker学习过程中产生的经验写下本文,本文完成前端和后端代码部署,网上的教程对小白很不友好,写下本文方便自己以后自己查阅并分享给大家让大家尽量少踩坑,可以顺利学会docker并成功部署项目 注:服务器系统使用CentOS7,远程工具使用宝塔,宿主机(服务器

    2024年02月02日
    浏览(131)
  • 【Docker】快速部署 ChatGPT Next Web,一键免费部署你的私人 ChatGPT 网页应用,支持 GPT3, GPT4 & Gemini Pro 模型。

    ChatGPT Next Web 可以一键免费部署你的私人 ChatGPT 网页应用,支持 GPT3, GPT4 Gemini Pro 模型。你无需任何复杂的配置,只需几行命令就可以完成部署。我们将通过 Docker 来部署这个应用。 下载 Docker 镜像 首先,我们需要从 Docker Hub 下载 ChatGPT 应用的 Docker 镜像。 Docker 版本需要在

    2024年03月10日
    浏览(75)
  • 【Docker教程(二)】Docker安装和chatgpt私有化部署

    1. Docker基本介绍 2. Docker和Docker Compose安装 3. Docker启动容器 4. chatgpt私有化部署 5. docker-compose.yml文件模板 6. 结合tg的chatgpt私有化部署 1. Docker基本介绍 Docker 是一款开源的容器化引擎,允许开发者将应用程序及其依赖项打包到一个可移植的容器中,然后在任何 Linux、Windows 或

    2024年02月07日
    浏览(50)
  • 【Python】极简部署私有化ChatGPT-Web,使用Flask框架编写网页版ChatGPT

    python环境下可极简配置 windows、linux、mac os均可部署 支持多用户使用 多对话管理 公式显示 流式逐字加载显示 代码高亮 仓库链接地址:https://github.com/LiangYang666/ChatGPT-Web,用的好麻烦给个star啦 可参照README 执行 python flask_main.py 运行程序.若程序中未指定apikey也可以在终端执行时

    2024年02月01日
    浏览(72)
  • 【摸鱼日常】使用Docker部署RPG网页小游戏

    本次实践部署环境为个人测试环境,快速使用docker部署RPG网页小游戏。  本次实践环境规划: 启动镜像后的名字 IP地址 容器镜像版本 操作系统版本 games 192.168.20.8 latest ubuntu 22.04 检查Docker服务状态,确保Docker服务正常运行。 使用docker-cli快速创建RPG网页小游戏的容器。 访问

    2024年02月20日
    浏览(43)
  • 尚硅谷Docker实战教程-笔记03【Docker常用命令】

    尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】 视频地址:尚硅谷Docker实战教程(docker教程天花板)_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【理念简介、官网介绍、平台入门图解、平台架构图解】 尚硅谷Docker实战教程-笔记02【安装docker、镜像加速器配置

    2024年02月11日
    浏览(45)
  • Docker部署ZooKeeper服务【实战】(最详细教程,单主机)

    linux(centos7)使用Docker部署ZooKeeper详细步骤 1.官网查看选择合适的镜像 2.使用命令拉取镜像  3.查看是否成功拉取镜像    4. 创建映射日志文件目录  5.通过命令启动容器  6.验证容器是否启动 方式一:    方式二:  能成功进入到容器,则已经启动。个别使用bash,可能提示无命

    2024年02月08日
    浏览(52)
  • 尚硅谷Docker实战教程-笔记06【Docker容器数据卷】

    尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】 视频地址:尚硅谷Docker实战教程(docker教程天花板)_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【理念简介、官网介绍、平台入门图解、平台架构图解】 尚硅谷Docker实战教程-笔记02【安装docker、镜像加速器配置

    2024年02月16日
    浏览(48)
  • 尚硅谷Docker实战教程-笔记10【高级篇,Docker微服务实战】

    尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】 视频地址:尚硅谷Docker实战教程(docker教程天花板)_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【基础篇,Docker理念简介、官网介绍、平台入门图解、平台架构图解】 尚硅谷Docker实战教程-笔记02【基础篇,Do

    2024年02月13日
    浏览(36)
  • 尚硅谷Docker实战教程-笔记08【高级篇,Docker复杂安装详说】

    尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】 视频地址:尚硅谷Docker实战教程(docker教程天花板)_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【基础篇,Docker理念简介、官网介绍、平台入门图解、平台架构图解】 尚硅谷Docker实战教程-笔记02【基础篇,Do

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包