一、课程概述
快速构建、运行、管理应用的工具
安装及启动

二、入门
1、MySQL安装
执行以下命令完成安装
docker run -d \
--name mysql \
-p 3307:3306 \ 宿主机端口:容器内部端口
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql:8
主机mysql -h192.168.100.128 -P3307 -uroot -p123检查安装是否成功
当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器(container)。
docker images查看当前容器中的所有镜像
2、命令解析
docker run:创建并运行一个容器,-d是让容器在后台运行
--name mysql:给容器起个名字,必须唯一
-p 3307:3306:设置端口映射

-e KEY=VALUE:是设置环境变量
mysql:8:指定运行的镜像的名字,版本
镜像名称一般分两部分组成:repository:tag。
·其中repository就是镜像名
·tag是镜像的版本

注意:在没有指定tag时,默认是latest,代表最新版本的镜像

三、核心
1、常见命令
(1)介绍
结尾加 --help是帮助文档
Docker最常见的命令就是操作镜像、容器的命令,详见官方文档: Docker Docs

(2)操作

在DockerHub中搜索Nginx镜像,查看镜像的名称
可以将镜像保存为一个文件,也可以将一个文件恢复为一个镜像
拉取Nginx镜像(比较耗时)

查看本地镜像列表

将镜像保存为文件docker save -o nginx-1.20.2.tar nginx:1.20.2

移除镜像

加载本地镜像文件

基于镜像创建并运行Nginx容器

查看容器


停止容器

再次启动容器

进入Nginx容器

删除容器


2、数据卷挂载
(1)容器内操作

创建容器docker run -d --name nginx -p 80:80 nginx:1.20.2

进入nginx容器docker exec -it nginx bash

进入html目录

进入html


(2)数据卷
数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。
/_data目录与docker容器里面的内容一一对应

操作命令

(3)数据卷操作
注意:在执行docker run命令时,使用-v数据卷:容器内目录
形式可以完成数据卷挂载(数据卷不存在,会自动创建)

查看已存在的容器

强制删除容器

创建容器并指定数据卷!!!!!!!!!!建立了连接
容器内目录:宿主机目录

查看数据卷列表

查看html数据卷详情

进入存放所有数据卷的目录

进入html数据卷

进入其下的_data目录

进入该html文件

修改文件内容,宿主机里面的内容发生变化,容器里面的内容也发生了变化,主机访问的页面也发生了变化


静态资源部署
上传到宿主机的_data目录下


3、本地目录挂载
(1)匿名数据卷
容器中还有两个匿名数据卷,表示的是mysql的备份文件

(2)命令
docker run -d -name容器名 -p宿主机端口:容器端口 -v宿主机目录或文件:容器内目录或文件 镜像名
注意: 本地目录必须以/或./开头,如果直接以名称开头,会被识别为数据卷而非本地目录
-v mysql:/var/lib/mysql会被识别为一个数据卷,数据卷叫mysql
-v./mysql:/var/lib/mysql会被识别为当前目录下的mysql目录
(3)挂载操作

需求:创建MySQL容器,并基于本地目录挂载实现MySQL容器数据目录、配置文件、初始化脚本的目录挂载。(官方文档)
-
根目录创建mysql文件夹

-
上传文件

先停掉并删掉原来的mysql容器

挂载 /root/mysql/data 到容器内的 /var/lib/mysql 目录
挂载 /root/mysql/init 到容器内的 /docker-entrypoint-initdb.d 目录 (资料中的sql脚本)
挂载 /root/mysql/conf 到容器内的 /etc/mysql/conf.d 目录

启动mysql

进入data/目录
有tlias文件夹
主机cmd访问数据库mysql -h192.168.100.128 -P3307 -uroot -p123

可以看到数据库里的文件

(4)小结

4、自定义镜像
(1)自定义镜像
镜像就是包含了应用程序 、程序运行的系统函数库 、运行配置等文件的文件包。
构建镜像的过程其实就是把上述文件打包的过程。


(2)镜像结构
镜像的构建和运行是按层来的

(3)Dockerfile
Dockerfile就是一个文本文件 ,其中包含一个个的指令(Instruction) ,用指令来说明要执行什么操作 来构建镜像。
将来Docker可以根据Dockerfile帮我们构建镜像。

Dockerfile文件构建镜像
TypeScript
# 使用 CentOS 7 作为基础镜像
FROM centos:7
# 添加 JDK 到镜像中
COPY jdk17.tar.gz /usr/local/
RUN tar -xzf /usr/local/jdk17.tar.gz -C /usr/local/ && rm /usr/local/jdk17.tar.gz
# 设置环境变量
ENV JAVA_HOME=/usr/local/jdk-17.0.10
ENV PATH=$JAVA_HOME/bin:$PATH
# 创建应用目录
RUN mkdir -p /app
WORKDIR /app
# 复制应用 JAR 文件到容器
COPY app.jar app.jar
# 暴露端口
EXPOSE 8080
# 运行命令
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
(4)构建镜像操作
创建app目录

上传三个文件

构建镜像docker build -t myImage:1.0 .
-t :是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest
. :是指定Dockerfile所在目录,如果就在当前目录,则指定为"."

查看容器中的镜像

运行容器中的app,加入docker容器

查看容器

访问网络地址http://192.168.100.128:8080/emps
返回JSON数据
自己构建java应用的镜像,并将容器启动起来,访问到了java应用
(5)小结
镜像的结构是怎样的?
镜像中包含了应用程序所需要的运行环境、函数库、配置、以及应用本身等各种文件,这些文件分层打包而成。
Dockerfile是做什么的?
Dockerfile就是利用固定的指令 来描述镜像的结构和构建过程 ,这样Docker才可以依次来构建镜像
构建镜像的命令是什么?
docker build -t 镜像名 Dockerfile目录
5、网络
(1)未自定义网络
查看mysql容器的详细信息

mysql的IP地址

查看java应用的详细信息

java应用的IP地址

进入容器

ping mysql的IP地址

默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上:

(2)自定义网络
加入自定义网络的容器才可以通过容器名互相访问,Docker的网络操作命令如下:

创建网络

mysql容器加入itheima网络中

查看网络

创建时加入网络

进入容器

通过容器名字连接mysql相互通信

四、部署
1、服务端部署

需求:将我们开发的 tlias-web-management 项目打包为镜像,并部署。
步骤:
(1)MySQL容器
准备MySQL容器 ,并创建tlias数据库及表结构。(已完成)
启动已有的mysql容器

删掉其他

DataGrip新建sql连接

(2)java应用
准备java应用 (tlias项目)镜像,部署Docker容器,运行测试。
-
修改tlias项目 的配置文件 ,修改数据库服务地址 及logback日志文件存放地址,打jar包。
修改数据库连接配置
TypeScriptdatasource: url: jdbc:mysql://mysql:3306/tlias driver-class-name: com.mysql.cj.jdbc.Driver username: root password: 123修改日志存放位置
XML<FileNamePattern>/tlias/tlias-%d{yyyy-MM-dd}-%i.log</FileNamePattern>打包,获取target/下的jar包,重命名为tlias.jar
-
编写Dockerfile文件。
里面包含阿里云id密码、端口、jdk版本等
-
构建Docker镜像。
创建/usr/local/tlias-docker-app,并把文件上传进来

开始构建docker build -t tlias:1.0 .

查看镜像docker images

根据id删掉app的镜像

(3)部署Docker容器
创建容器,加入itheima网络
因为mysql也加入了该网络,网络内,容器间可以使用名称通信
docker run -d --name tlias-server -p 8080:8080 --network itheima tlias:1.0

查看容器docker ps

查看容器尾部的日志docker logs -f tlias-server

使用apifox发送post登录请求,获取到了token数据

2、前端部署
需求:创建一个新的nginx容器,将资料中提供的前端项目的静态资源部署到nginx中。
步骤:
(1)部署nginx容器
(设置目录映射)。
新建文件夹存放前端项目

文件夹下上传文件
conf目录中的nginx.config包含
-v /root/tlias-nginx/html:/usr/share/nginx/html
-v /root/tlias-nginx/conf/nginx.conf:/etc/nginx/nginx.conf
这些目录映射,进行反向代理,交给哪台服务器请求

(2)创建nginx容器并上传资源
将部署的前端资源文件及配置文件上传至服务器,执行命令创建nginx容器。
创建nginx容器
docker run -d \ --name nginx-tlias \ -v /root/tlias-nginx/html:/usr/share/nginx/html \ -v /root/tlias-nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ --network itheima \ -p 80:80 \ nginx:1.20.2

查看所有容器docker ps

主机浏览器访问192.168.100.128
成功进入
3、DockerCompose
(1)介绍
前面手动部署mysql、前后端繁琐、不便于统一管理
因此引入DockerCompose
Docker Compose通过一个单独的docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。

(2)还原环境
根据id删掉以前的容器


删掉镜像



删掉网络


(3)操作
涉及到的服务:MySQL数据库、服务端、前端nginx。
步骤:
准备资源(tlias.sql,服务端的jdk17、jar包、Dockerfile,前端项目打包文件、nginx.conf)
准备docker-compose.yml配置文件
基于DockerCompose快速构建项目
创建目录/usr/local/app
上传文件

Docker Compose的命令格式:docker compose OPTIONS COMMAND
选项参数说明:

启动server容器并后台运行

查看容器、网络、镜像



主机浏览器访问192.168.100.128
成功进入
停止并移除所有的容器、网络

一键构建一键移除