Docker概念:

  1. 是一个新型的虚拟机技术,容器化引擎,专门用来快速搭建软件平台的技术。<br /> 专门用来快速搭建软件的技术,目前企业中很流行<br /> 通过服务器来进行连接

Docker的工作原理:

Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问。
Docker-Server接收到Docker-Client的指令,就会执行这个命令!

Docker的优点:

Docker,在docker可以快速搭建软件,例如Tomcat,MySQL,Redis,RabbitMQ,在docker这个系统中搭建完,我直接可以使用,例如,搭建完tomcat我就可以直接 ip+port 去访问tomcat页面。

如果像平常搭建的话,首先要有jdk,然后需要先去网上下载Tomcat,安装Tomcat,然后去启动Tomcat,确认启动成功以后,最后才可以访问Tomcat页面。

Docker的好处:

  1. **1.更高效的利用系统资源**<br />eg:一台物理机,docker可以搭建更多的mysql<br /> **2.更快速的启动时间**<br />只有网络 ip 磁盘等这些东西,相比传统虚拟机少了很多东西,传统虚拟机跟一个服务器没区别,什么都有。所以docker有跟快的启动时间<br /> **3.一致的运行环境**<br />就是运行环境一致,tomcat版本等所有软件都要一致。<br />有些时候版本都一致,还跑不了,应该打包打丢了。<br />解决:把war包,扔到tomcatwebapp里面跑一下试试。因为war包含了libraryjar包),原本给了源码只有2,3Mb,但是打成war包有50,60Mb,因为打war包,war包里也打包了jar包<br /> **4.持续交付和部署(CI&CD)**<br />持续集成,持续交付。<br />eg:假如有1000台服务器,10000台服务器,难道要一个一个上传吗?<br />所以dockerCI&CD,持续集成,持续交付<br /> **5.容器(软件)之间具备隔离性**<br />容器/软件:tomcat mysql

Docker的核心概念:

  1. 1.**镜像**(image):**一堆软件的集合**,Docker中的镜像,会包含软件安装包本身,还有依赖的其他软件安装包<br /> 比如:Tomcat镜像=Tomcat软件的安装包+JDK安装包+JDK自动配置<br /> ISO:操作系统的镜像<br /> 2.容器(container):通过镜像安装之后的东西,软件<br /> 3.数据卷(Data Volumes):磁盘,虚拟的<br /> 4.网络(Network):网络,每个容器都有自己的ip和端口<br /> 5.仓库(Repository):存储 镜像(一堆软件包) 的地方。<br />仓库用的Git管理。在国外,用镜像加速器变成国内的。 <br />

2.Docker安装

  1. centos系统<br /> 安装步骤:

1.下载Docker

  1. curl -sSL [https://get.daocloud.io/docker](https://get.daocloud.io/docker) | sh<br />![QQ图片20220410093321.png](https://cdn.nlark.com/yuque/0/2022/png/26481015/1649554397400-34d2b1c7-3ebc-4cc4-81a0-e246c6f7f50a.png#clientId=u5e728cf2-e518-4&crop=0&crop=0&crop=1&crop=1&from=ui&id=uffe6fa29&margin=%5Bobject%20Object%5D&name=QQ%E5%9B%BE%E7%89%8720220410093321.png&originHeight=270&originWidth=791&originalType=binary&ratio=1&rotation=0&showTitle=false&size=266817&status=done&style=none&taskId=u755af602-7c95-4a20-86b4-739008391d5&title=)

2.验证是否安装成功

  1. docker version<br />![QQ图片20220410093336.png](https://cdn.nlark.com/yuque/0/2022/png/26481015/1649554400672-7a6a9a07-22b2-4d2e-a3ff-decf6c75a0f3.png#clientId=u5e728cf2-e518-4&crop=0&crop=0&crop=1&crop=1&from=ui&id=ud0a8bb74&margin=%5Bobject%20Object%5D&name=QQ%E5%9B%BE%E7%89%8720220410093336.png&originHeight=236&originWidth=769&originalType=binary&ratio=1&rotation=0&showTitle=false&size=222430&status=done&style=none&taskId=u4c261aca-03d6-4acb-9e01-50105320bdd&title=)

3.操作Docker

  1. 启动服务<br /> systemctl start docker<br /> 停止服务<br /> systemctl stop docker<br /> 重启服务<br /> systemctl restart docker<br /> 查看服务状态<br /> systemctl status docker

注意:

docker的status为failed
解决办法:
Docker无法启动,报错:Job for docker.service failed because the control process exited with error code. See “systemctl status docker.service” and “journalctl -xe” for details.
执行命令:
rm -rf /var/lib/docker/ 移除docker文件夹下的所有文件,以防冲突。
vim /etc/docker/daemon.json
# 添加如下内容 以下的添加内容 可以解决docker状态启动成功
{
“graph”: “/mnt/docker-data”,
“storage-driver”: “overlay”
}
重启服务:
systemctl restart docker
查看状态:
systemctl status docker
QQ截图20220524172628.png

镜像:

  1. Docker下载的镜像,默认是从国外服务器下载,慢,所以实际中配置镜像加速器<br /> 配置步骤:<br />阿里云的镜像加速器<br />先启动dockersystemctl start docker

1.新增docker配置

  1. vim /etc/docker/daemon.json <br />进入以后,安i 进入编辑模式<br /> 输入以下内容:<br /> {<br /> "registry-mirrors": [<br /> "https://registry.docker-cn.com"]<br /> }

退出:

  1. 1、先按 Esc,然后到最低端。<br /> 2、然后在写冒号 : wq,然后 按回车。退出成功。

2.重新加载配置

  1. systemctl daemon-reload

3.重启Docker服务

  1. systemctl restart docker<br />

3.Docker命令

  1. **docker images**:查看服务器的镜像文件<br />![QQ图片20220410094753.png](https://cdn.nlark.com/yuque/0/2022/png/26481015/1649555219354-bee9de1d-c9a8-42b1-8c80-7598bd4a6da9.png#clientId=u5e728cf2-e518-4&crop=0&crop=0&crop=1&crop=1&from=ui&id=u646322c7&margin=%5Bobject%20Object%5D&name=QQ%E5%9B%BE%E7%89%8720220410094753.png&originHeight=69&originWidth=517&originalType=binary&ratio=1&rotation=0&showTitle=false&size=51911&status=done&style=none&taskId=ue3253445-719f-4503-9351-e03e8530f0f&title=)<br /> **docker search 镜像名称**:搜索仓库是否存在指定的镜像<br />![QQ图片20220410095214.png](https://cdn.nlark.com/yuque/0/2022/png/26481015/1649555476580-9a927b3a-5d01-4136-8b34-16e63efcc408.png#clientId=u5e728cf2-e518-4&crop=0&crop=0&crop=1&crop=1&from=ui&id=ubbfb0558&margin=%5Bobject%20Object%5D&name=QQ%E5%9B%BE%E7%89%8720220410095214.png&originHeight=167&originWidth=836&originalType=binary&ratio=1&rotation=0&showTitle=false&size=156086&status=done&style=none&taskId=u4c9a1786-b83b-48c5-8943-ff2bd512f76&title=)安装镜像成功!!!
  2. **docker pull 镜像名称**:版本号:下载镜像,版本号可以省略,省略的话就是:latest<br />有点慢,因为它包含了jdk<br />![QQ图片20220410095256.png](https://cdn.nlark.com/yuque/0/2022/png/26481015/1649555519937-35a28df3-4835-4514-8872-441a2393c21a.png#clientId=u5e728cf2-e518-4&crop=0&crop=0&crop=1&crop=1&from=ui&id=u9c5d5bb8&margin=%5Bobject%20Object%5D&name=QQ%E5%9B%BE%E7%89%8720220410095256.png&originHeight=72&originWidth=759&originalType=binary&ratio=1&rotation=0&showTitle=false&size=71159&status=done&style=none&taskId=u8ad834fc-23e3-414e-82b8-e029e5809e1&title=)<br /> **docker ps**:查看运行的容器<br /> **docker ps -a**:查看安装的所有容器<br /> **docker inspect 容器名称**:查看容器详情<br /> **docker logs 容器名称**:查看容器的运行日志<br /> **docker start 容器名称**:启动容器<br /> **docker restart 容器名称**:重新启动容器<br /> **docker stop 容器名称**:停止容器<br /> **docker run**:最常用的命令,创建并运行容器,如果对应镜像的不存在还会下载镜像<br /> **docker rm 容器名称**:删除容器,但是容器必须停止<br /> **docker rmi 镜像名称**:版本号:删除镜像<br /> **docker exec -it 容器名称 bash**:进入到容器内部,虚拟机<br /> **docker system df**:查看Docker所占磁盘<br /> <br />

4.Docker基于命令安装软件 CV

  1. 云服务器的安全组--就是防火墙,需要在这里配置开放的端口号

Docker安装Tomcat

  1. 安装步骤:

1.创建映射路径

  1. mkdir -p /docker/tomcat/webapp8081

2.执行命令,创建Tomcat容器

  1. docker run -d --name tomcat8081 -p 8081:8080 -v /docker/tomcat/webapp8081:/usr/local/tomcat/webapps/ tomcat:9.0.62

QQ图片20220410101542.png
解释:
docker run:创建并运行容器
-d:后台运行,deamon
—name 容器名称:设置容器的名称,唯一
-p 外界访问端口:软件本身端口:设置端口映射,外界端口可以随意设置,但是需要开放端口(安全组)。软件本身端口,不能修改
-v 服务器真实路径:容器的默认路径:设置数据卷,设置真实路径的映射,只需操作外部路径就可以
tomcat:镜像名称,省略了版本号,如果镜像的版本为默认:latest,那么就可以省略

docker run -d —name 容器名称 -p 外界访问端口:软件本身端口 -v 真实路径:软件默认路径 镜像名称:版本号
作用:
1.镜像不存在,下载。如果存在直接使用
2.创建对应容器
QQ图片20220410105244.png

3.启动容器

  1. 注意:需要开放端口号(外界访问端口)<br />![QQ图片20220410104129.png](https://cdn.nlark.com/yuque/0/2022/png/26481015/1649558441252-06c7534d-ef15-4ab5-aebb-3a43138ab5a0.png#clientId=u2d21fe91-c12b-4&crop=0&crop=0&crop=1&crop=1&from=ui&id=uf8aad601&margin=%5Bobject%20Object%5D&name=QQ%E5%9B%BE%E7%89%8720220410104129.png&originHeight=237&originWidth=626&originalType=binary&ratio=1&rotation=0&showTitle=false&size=72845&status=done&style=none&taskId=u44726397-590a-4523-91d8-be1e13b141d&title=)<br /> 为什么可以通过url直接访问呢,因为它会直接映射到软件的真实路径中。

4.验证测试

  1. **查看运行的容器:**<br />** docker ps **<br /> 查看容器日志:<br /> docker logs tomcat8081

注意:

测试tomcat出现的问题
1、网页显示连接失败。解决:把https 后面的s去掉
2、网页报404。解决:

  1. #查看容器ID
  2. docker ps
  3. #进入容器
  4. docker exec -i -t 1551ad299c94 /bin/bash
  5. #将webapps.dist中的文件复制粘贴到webapps下;
  6. #也可以删除webapps文件夹,重命名webapps.dist为webapps;
  7. cp -r /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps
  8. #退出容器
  9. exit

QQ截图20220524185253.png

Docker安装Mysql

1.创建并启动容器

  1. docker run -d --name mysql3307 -e MYSQL_ROOT_PASSWORD=zzjava -p 3307:3306 mysql:5.7<br /> 上面的密码是:zzjava<br /> 解释:也可以改密码:root。<br /> -e MYSQL_ROOT_PASSWORD=root的密码:设置数据库root账号的密码<br />![QQ截图20220504215127.png](https://cdn.nlark.com/yuque/0/2022/png/26481015/1651672302138-1c9fb3fd-05a9-42b9-b3b7-d30e75811739.png#clientId=ufd5ac0a9-0ff4-4&crop=0&crop=0&crop=1&crop=1&from=ui&id=ua9d06243&margin=%5Bobject%20Object%5D&name=QQ%E6%88%AA%E5%9B%BE20220504215127.png&originHeight=359&originWidth=872&originalType=binary&ratio=1&rotation=0&showTitle=false&size=398743&status=done&style=none&taskId=u68412fd4-0905-45d9-9c91-38710786b85&title=)![QQ截图20220524190051.png](https://cdn.nlark.com/yuque/0/2022/png/26481015/1653390062369-ebb6029b-76ed-4c55-b399-4f53b2af3352.png#clientId=ud13397d4-ffe0-4&crop=0&crop=0&crop=1&crop=1&from=ui&id=u862e95f3&margin=%5Bobject%20Object%5D&name=QQ%E6%88%AA%E5%9B%BE20220524190051.png&originHeight=351&originWidth=866&originalType=binary&ratio=1&rotation=0&showTitle=false&size=382438&status=done&style=none&taskId=u91ffceb8-dea3-4670-9112-3b1a40fdd9b&title=)

2.运行测试

  1. 数据库连接工具测试<br /> ip:60.205.147.4<br /> 端口号:3307<br /> 密码:root<br />用sqlyog测试一下:docker部署tomcat成功![QQ截图20220524190229.png](https://cdn.nlark.com/yuque/0/2022/png/26481015/1653390155199-6a61fc86-360b-4e72-9baa-6c38021c827a.png#clientId=ud13397d4-ffe0-4&crop=0&crop=0&crop=1&crop=1&from=ui&id=ud0bbba8e&margin=%5Bobject%20Object%5D&name=QQ%E6%88%AA%E5%9B%BE20220524190229.png&originHeight=474&originWidth=808&originalType=binary&ratio=1&rotation=0&showTitle=false&size=119478&status=done&style=none&taskId=u5ef70860-41db-4288-b8ca-87b4f3ef7aa&title=)

5.Docker-Compose

docker-compose是基于docker的一个编排工具,使容器可以批量的、可视的执行。可以管理多个容器的一个工具。
是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们就可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

    需要安装:

    1.执行命令,安装Docker-Compose

    sudo curl -L “https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
    QQ图片20220410111955.png

    2.完成设置

    1. 授权<br /> sudo chmod +x /usr/local/bin/docker-compose<br /> 设置软链接<br /> sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

    3.验证测试

    docker-compose -version
    QQ图片20220410115218.png

    基于Docker-Compose安装Tomcat

    1.实现dockerfile文件的编写
    vim /usr/local/tomcat.yml
    内容如下:严格安装格式要求,格式、空格,必须一模一样,不能多不能少!!!
    1. version: "3.1"
    2. services:
    3. tomcat1: #服务名称,不是容器名,只是在文件中方便观看是按个服务
    4. restart: always # 代表只要docker启动, 就会自动启动这个容器 相当于-restart参数
    5. image: tomcat:9.0.33 #依赖的镜像
    6. container_name: tomcat8082 # 容器名称 相当于 --name参数
    7. ports:
    8. - 8082:8080 #映射端口,可以指定多个,用多个-来写
    9. environment:
    10. TZ: Asia/Shanghai #指定时区
    11. volumes:
    12. - /docker/tomcat/webapp8082/:/usr/local/tomcat/webapps #挂载数据卷
    13. tomcat2: #服务名称,不是容器名,只是在文件中方便观看是按个服务
    14. restart: always # 代表只要docker启动, 就会自动启动这个容器 相当于-restart参数
    15. image: tomcat:9.0.33 #依赖的镜像
    16. container_name: tomcat8083 # 容器名称 相当于 --name参数
    17. ports:
    18. - 8083:8080 #映射端口,可以指定多个,用多个-来写
    19. environment:
    20. TZ: Asia/Shanghai #指定时区
    21. volumes:
    22. - /docker/tomcat/webapp8083/:/usr/local/tomcat/webapps #挂载数据卷
    2.执行文件创建容器
    docker-compose -f /usr/local/tomcat.yml up -d
    QQ截图20220524193535.png3.验证
    docker psQQ截图20220524193631.png

    Mysql的安装

    1.创建文件夹
    1. mkdir -p /var/lib/mysql
    2. mkdir -p /etc/mysql
    3. mkdir -p /var/log/mysql
    2.创建Mysql的yml文件
    1. version: '3.1'
    2. services:
    3. mysql:
    4. container_name: "mysql3308"
    5. network_mode: "host"
    6. environment:
    7. MYSQL_ROOT_PASSWORD: "123456"
    8. image: "mysql:5.7"
    9. restart: always
    10. ports:
    11. - 3308:3306
    12. volumes:
    13. - "/var/lib/mysql:/home/ubuntu/docker/mysql/db"
    14. - "/etc/mysql:/home/ubuntu/docker/mysql/conf"
    15. - "/var/log/mysql:/home/ubuntu/docker/mysql/log"
    3.执行命令
    docker-compose -f /usr/local/mysql.yml up -d
    4.开放端口
    3308

    Redis的安装

    1.创建文件夹
    mkdir -p /data/docker-compose/redis/data
    上传redis.conf到 /data/docker-compose/redis
    2.编写redis.yml文件
    1. version: '3.1'
    2. services:
    3. redis:
    4. image: redis:6.2.1
    5. container_name: redis6381
    6. restart: always
    7. ports:
    8. - 6381:6379
    9. networks:
    10. - mynetwork
    11. volumes:
    12. - /data/docker-compose/redis/redis.conf:/usr/local/etc/redis/redis.conf:rw
    13. - /data/docker-compose/redis/data:/data:rw
    14. command:
    15. /bin/bash -c "redis-server /usr/local/etc/redis/redis.conf "
    16. networks:
    17. mynetwork:
    18. external: true
    3.执行命令
    docker-compose -f /usr/local/redis.yml up -d
    4.开放端口
    6381
    5.运行测试

RabbitMQ的安装

1.创建文件夹
mkdir -p /data/rabbitmq-compose/rabbitmq1/log
mkdir -p /data/rabbitmq-compose/rabbitmq2/log
2.编写rabbitmq.yml文件

  1. version: "3.1"
  2. services:
  3. rabbit01: #节点1主节点
  4. image: rabbitmq:management
  5. ports: #端口映射
  6. - "5672:5672"
  7. - "15672:15672"
  8. hostname: rabbit01 #这个要记住,后面加入集群的时候会用到
  9. volumes:
  10. - /data/rabbitmq-compose/rabbitmq1/log:/var/log/rabbitmq #挂载日志目录
  11. environment: #设置环境变量(配置文件参数),虚拟主机,用户名,密码
  12. - RABBITMQ_DEFAULT_VHOST=jenkin
  13. - RABBITMQ_DEFAULT_USER=jenkin
  14. - RABBITMQ_DEFAULT_PASS=123456
  15. rabbit02:
  16. image: rabbitmq:management
  17. ports:
  18. - "5673:5672"
  19. - "15673:15672"
  20. hostname: "rabbit02"
  21. links: #关联主节点的hostname,方便容器内互相访问
  22. - rabbit01
  23. volumes:
  24. - /data/rabbitmq-compose/rabbitmq2/log:/var/log/rabbitmq
  25. environment:
  26. RABBITMQ_DEFAULT_VHOST: "jenkin"
  27. RABBITMQ_DEFAULT_USER: "jenkin"
  28. RABBITMQ_DEFAULT_PASS: "123456"

3.执行命令
docker-compose -f /usr/local/rabbitmq.yml up -d
4.开放端口
5672、5673、15672、15673
5.测试

  1. 后面讲Nginx搭建Tomcat集群,再去使用Docker-Compose<br /> Docker创建容器,可以选择使用命令(docker run),也可以选择使用yml文件(docker-compose)<br />没讲完呢......<br />[https://www.yuque.com/feri/fwibdh/mhtgkv/#PB5Lf](https://www.yuque.com/feri/fwibdh/mhtgkv/#PB5Lf)