目录
Docker:
安装MySQL:
先停掉虚拟机中的MySQL,确保你的虚拟机已经安装Docker,且网络开通的情况下,执行下面命令即可安装MySQL
docker run -d \
--name mysql \
-p 3307:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql:8
镜像容器:
当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行时所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器(comtainer)。
镜像仓库:
存储和管理镜像的平台,Docker官方维护了一个公共仓库:Docker Hub
命令解读:
docker run -d \
--name mysql \
-p 3307:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql:8
docker run:创建并运行一个容器,-d是让容器在后台运行
--name mysql:给容器起个名字,必须唯一
-p 3307:3306:设置端口映射
-e KEY=VALUE:是设置环境变量
mysql:8 :指定运行的镜像的名字,版本
镜像命名规范:
镜像名称一般分两部分组成:[repository]:[tag]。
其中repository就是镜像名
tag是镜像的版本
mysql:8 :mysql指定运行的镜像的名字,8指定版本
在没有指定tag时,默认是latest,代表最新的镜像
docker run中常见参数:
-d :让容器后台运行
--name:给容器命名,唯一
-e:环境变量
-p:宿主机端口映射到容器内端口
Docker常见命令:
Docker最常见的是操作镜像,容器的命令,见官方文档https://docs.docker.com/
数据卷:
数据卷是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁
数据卷-操作命令:
命令 | 说明 |
docker volume create | 创建数据卷 |
docker volume ls | 查看所有数据卷 |
docker vloume rm | 删除指定数据卷 |
docker volume inspect | 查看某个数据的详情 |
docker volume prune | 清除所有未使用的数据卷 |
在执行docker run命令时,使用 -v 数据卷:容器内目录 形式可以完成数据卷挂载(数据卷不存在会自动创建)
挂载数据卷:
在创建容器时,利用 -v 数据卷名:容器内目录完成挂载
容器创建时,如果发现挂载的数据卷不存在时,会自动创建
本地目录挂载:
命令:
docker run -d --name 容器名 -p 宿主机端口:容器端口 -v 宿主机目录或文件:容器内目录或文件 镜像名
注意:
本地目录必须以 / 或 ./ 开头,如果直接以名称开头,会被识别为数据而非本地目录
-v mysql:/var/lib/mysql 会被识别为一个数据卷,数据卷叫mysql
-v ./mysql:/var/lib/mysql 会被识别为当前目录下的mysql目录
自定义镜像:
镜像就是包含了应用程序,程序运行的系统函数库,运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程
构建一个Java镜像的步骤:
1.准备一个Linux运行环境
2.安装JDK并配置环境变量
3.拷贝jar包
4.编写运行脚本
镜像结构:
入口(Entrypoint):镜像运行入口,一般是程序启动的脚本和参数
层(Layer):添加安装包,依赖,配置等,每次操作都形成新的一层
基础镜像(Baseimage):应用依赖的系统函数库,环境,配置,文件等
Dockerfile:
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像
常见指令如下:
指令 | 说明 | 示例 |
FROM | 指定基础镜像 | FROM centos:7 |
ENV | 设置环境变量,可以在后面指令使用 | ENV key=balue |
COPY | 拷贝本地文件到镜像的指定目录 | COPY ./jdk17.tar.gz /tmp |
RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN tar -zxvf /tmp/jdk17.tar.gz |
EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
我们可以基于CentOS7基础镜像,利用Dockerfile描述镜像结构
#使用CentOS 7作为基础镜像
FROM centos:7
#添加JDK到镜像中
COPY jdk17.tar.ge /usr/local/
RUN tar -xzf /usr/local/jdk17.tar.gz -C /usr/local/ && rm/sur/local/jdk.tar.gz
#设置环境变量
ENV JAVA_HOME=/usr/local/jdk-17.0.10
ENV PATH=$JAVA_HOME/bin:$PATH
#创建应用目录
RUN mldir -p /app
WORKDIR /app
#复制应用JAR文件到容器
COPY app.jar app.jar
#暴露端口
EXPOSE 8080
#运行命令
ENTRYPOINT ["java","-jar","/app/app.jar"]
编写好了Dockerfile之后,可以用下面命令来构建镜像:
docker build -t myImage:1.0 .
-t :是给镜像起名,格式依然是repository的格式,不指定tag时,默认为latest
. :是指定Dockerfile所在目录,如果就在当前目录。则指定为"."
构建镜像命令:docker build -t 镜像吗 Dockerfile目录
网络:
默认情况下,所有容器都是以bridege方式连接到Docker的一个虚拟网桥上
加入自定义网络的容器才可以通过容器名互相访问,Docker的网络操作如下:
命令 | 说明 |
docker network create | 创建一个网络 |
docker network ls | 查看所有网络 |
docker network rm | 删除所有网络 |
docker network prune | 清楚未使用的网络 |
docker network connect | 使指定容器连接加入某网络 |
docker network disconnect | 使指定容器连接离开某网络 |
docker network inspect | 查看网络详细信息 |
项目部署:
部署服务器:
需求:将我们开发的项目打包为镜像,并部署
步骤:
1.准备MySQL容器,并创建项目数据库及表结构
2.准备java应用(项目)镜像,部署Docker容器,运行测试
修改项目的配置文件,修改数据库服务地址及logback日志文件存放地址,打jar包
编写Dockerfile文件
构建Docker镜像
部署Docker容器
前端部署:
需求:创建一个新的nginx容器,将前端项目的静态资源文件部署到nginx中
步骤:
1.部署nginx容器(设置目录映射)
-v /root/tlias-nginx/html:/usr/share/nginx/html
-v /root/tlias-nginx/conf/nginx.conf:/etc/nginx/nginx.conf
2.将部署的静态资源文件及配置文件上传到服务器,执行命令创建nginx容器
DockerCompose:
Docker Compose通过一个单独的docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器,帮助我们实现多个相关互联的Docker容器的快速部署
对比:
第一种:
docker run -d \
--name nginx-tlias \
-v /usr/local/app/html:/usr/share/nginx/html /
-v /usr/local/app/conf/nginx.conf:/etc/nginx/nginx.conf \
--network itheima \
-p 80:80 \
nginx:1.20.2
第二种:
service:
nginx-tlias:
image: "ithema:1.20.2"
container_name: nginx-tlias
volumes:
-"/usr/local/app/html:/usr/share/nginx/html"
-"/usr/local/app/conf/nginx.conf:/etc/nginx/nginx.conf"
networks:
- ithema
ports:
- "80:80"
networks:
itheima:
name:itheima
基于DockerCompose快速部署tlias项目:
涉及到的服务:MySQL数据库、服务端、前端nginx
步骤:
1.准备资源(tlias.sql,服务端的jdk17,jar包,Dockerfile,前端项目打包文件,nginx.conf)
2.准备docker-compose.yml配置文件
3.基于DockerCompose快速构建项目
DockerCompose命令:
Docker Compose的命名格式:docker compose [OPTIONS] [COMMAND]
选项参数说明:
类型 | 参数或指令 | 说明 |
Options | -f | 指定compose文件的路径和名称 |
Options | -p | 指定project名称 |
Commands | up | 创建并启动所有service容器 |
Commands | down | 停止并移除所有容器、网络 |
Commands | ps | 列出所有启动的容器 |
Commands | logs | 查看指定容器的日志 |
Commands | stop | 停止容器 |
Commands | start | 启动容器 |
Commands | restart | 重启容器 |
Commands | top | 查看运行的进程 |