Docker
什么是docker?
Docker是一种轻量级的虚拟化技术,同时是一个开源的应用容器运行环境搭建平台,可以让开发者以便捷方式打包应用到一个可移植的容器中,然后安装至任何运行Linux或Windows等系统的服务器上。 相较于传统虚拟机,Docker容器提供轻量化的虚拟化方式、安装便捷、启停速度快。
docker的安装
下载DockerDeskTop
DockerDeskTop下载地址: https://www.docker.com/products/docker-desktop/
配置Docker环境
1.启动Hyper服务
如果计算机windows功能中没有Hyper服务
新建一个文本文件,将下列命令加入
1 | pushd "%~dp0" |
修改文件名为Hyper.cmd
以管理员身份运行该程序,运行完毕后,在windows服务中启动该服务即可
2.检查是否配置成功
3.配置一些国内镜像站点加速
在这个配置中,列出了一些常用的国内镜像站点,比如阿里云、网易云、七牛云、中科大和Docker中国官方镜像。这些镜像站点的作用是提供一个与Docker官方镜像仓库相连的代理服务,可以加速Docker镜像的下载和上传过程。
在docker设置选项的Docker Engine栏的配置项中修改成下列json格式的配置项
1 | { |
4.验证docker环境及其桌面版是否能使用
powershell 管理员 输入docker version检查版本
cmd命令窗口输入docker run hello-world验证Docker桌面版
至此docker环境搭建完毕
docker基本命令的使用
命令 | 作用 |
---|---|
docker search ... |
在 Docker registry 中搜索镜像 |
docker pull image |
从 Docker registry 下载指定镜像 |
docker push image |
将本地的镜像推送到 Docker registry |
docker images |
查看当前拥有的所有镜像 |
docker rmi image |
删除指定的镜像 |
docker run image |
根据当前镜像创建并启动一个容器 |
docker ps | 列出当前正在运行的容器 |
docker stop container |
停止当前指定的容器运行 |
docker rm container |
删除指定的容器名 |
docker inspect coontainer |
获取一个或多个容器的底层信息 |
docker exec container command |
在指定的容器内部执行指定命令 |
docker logs container |
获取指定容器的日志 |
更多命令请参考docker官方API文档: https://docs.docker.com/reference/
MySql容器的部署
搜索MySql镜像:
docker search mysql
拉取MySql的镜像:
docker pull mysql
利用镜像创建容器:
docker run -p 3308:3306 –name mysql_1 -e MYSQL_ROOT_PASSWORD=a -d mysql –character-set-server=utf8mb4 –collation-server=utf8mb4_unicode_ci
docker run
: Docker命令,用于创建和运行容器。-p 3308:3306
: 指定容器的端口映射,将容器的端口3306映射到主机的端口3308。格式为主机端口:容器端口
。--name mysql_1
: 为容器指定名称为mysql_1,方便后续管理。-e MYSQL_ROOT_PASSWORD=a
: 设置MySQL容器的root用户的密码为a。-d
: 让容器在后台运行。mysql
: 指定要使用的Docker镜像,这里使用的是MySQL镜像。--character-set-server=utf8mb4
: 设置MySQL服务器的字符集为utf8mb4。--collation-server=utf8mb4_unicode_ci
: 设置MySQL服务器的字符排序规则为utf8mb4_unicode_ci。-e MYSQL_ROOT_PASSWORD=a
: 连接到该数据库需要密码认证
进入到容器的bash命令行环境:
docker exec -it msql_1 /bin/bash
登录mysql
mysql -uroot -pa
创建数据库
create database data_1 default character set=’utf8’
docker容器间的相互访问
docker的网络桥接模式
Docker 的网络桥接模式是一种允许容器通过一个网桥与宿主机或其他容器进行通信的网络模式。在桥接模式下,Docker 会为每个容器创建一个虚拟网络接口,并为其分配一个 IP 地址。这样,每个容器都可以通过桥连接与同一主机上的其他容器或宿主机进行通信。
优点
桥接模式的优点之一是容器间的通信非常简单。容器可以使用它们的 IP 地址直接相互通信,就像它们在同一物理网络中一样。此外,桥接模式还允许容器与宿主机进行通信,以及容器与外部网络进行通信
原理图
常用命令
命令 | 作用 |
---|---|
docker network create -d bridge |
创建bridge网络 |
docker network ls | 查看所有网络 |
docker network inspect bridge |
查看某个网络详情 |
docker network remove bridge |
删除某个网络 |
docker network connect bridge container |
将一个容器连接到网桥 |
docker network disconnect bridge container |
将容器从网桥中移除 |
实例: 两个容器通过 Bridge网络
实现互联
1.建立两个MySql容器并启动
1 | docker run -p 3309:3306 --name mysql_1 -e MYSQL_ROOT_PASSWORD=a -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci |
2.用 docker ps -a
命令查看两个容器是否启动
3.创建一个bridge, 将两个容器都连接上它,查看网络详情是否两个容器连接上了了同一个bridge网络
1 | 新建一个名为bridge_1的bridge网络 |
查看网络详情
4.实现两个容器相互访问
为了可以更加直观看到两台容器互联的效果,我们在mysql_1容器中创建一个名为data_1的数据库(建立数据库代码可以参考 MySql容器的部署
),然后登录mysql_2容器通过远程连接mysql_1容器
1.以-it交互式终端进入其中一台容器mysql_2
1 | docker exec -it mysql_2 /bin/bash |
2.用mysql_2容器连接到数据库mysql_1
1 | //172.19.0.2为mysql_1所分配的地址 |
3.用 show databases;
命令查看详情
如图上图mysql_2容器通过bridge网络完成了对mysql_1连接,并且成功访问到 mysql_1中含有data_1
数据库,说明两个容器实现了相互访问
FastDFS
FastDFS是什么?
FastDFS是一个开源的分布式文件系统,用于实现大规模文件存储和访问。它由两部分组成:Tracker Server 和 Storage Server。
Tracker Server 跟踪和管理 Storage Server 的状态,负责客户端请求的负载均衡和文件定位。
Storage Server 负责实际的文件存储和访问,它们之间可以水平扩展,可以根据需要添加更多的 Storage Server 实例来增加存储容量和吞吐量。
FastDFS 提供了高可靠性、高扩展性和高性能的文件存储解决方案。它适用于需要存储大量文件的应用场景,如图片上传、视频处理等。同时,FastDFS 还提供了灵活的接口和工具,使开发者能够方便地集成和使用。
FastDFS的安装与部署
fastDFS镜像
1 | //查找FastDFS镜像 |
新建本地tracker和storage目录
E:\dockercontainers\fastdfs\tracker
E:\dockercontainers\fastdfs\storage
tracker安装
1 | docker run -d --name tracker --network=ycnetwork E:\dockercontainers\fastdfs\tracker:/var/fdfs delron/fastdfs tracker |
storage安装
1 | docker run -d -p 8888:8888 --name storage --network=ycnetwork -e TRACKER_SERVER=172.18.0.4:22122 -v E:\dockercontainers\fastdfs\storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage |
storage文件上传
…
SpringBoot项目上传
1.导入依赖
1 | <dependency> |
2.配置上线项目的application-prod.yaml文件
注:redis与mysql地址因与启动容器时docker分配的地址一致
1 | server: |
3.将项目用idea插件推送镜像至docker
1.pom.xml导入插件
1 | <build> |
2.配置DockFile文件
1 | #从openjdk的官方镜像仓库中拉取一个OpenJDK 8的镜像 |
3.项目打包生成docker镜像
打包项目自动生成镜像
docker生成的镜像
4.用镜像生成一个container容器
5.将容器加入birdge网络
1 | docker network connect ycnetwork 134res |
在docker上重新启动134res容器