第二部分:Docker

学习基础:Linux基础知识,准备一台虚拟机(装有centOS7系统)

1. Docker的安装

Docker是【快速构建、运行、管理应用的工具】,就是用来部署项目以及项目所依赖的各种各样的组件,可以说就是典型的【运维工具】;
安装步骤:直接参考Docker官方文档,根据不同的虚拟机系统进行安装:
1.卸载旧版Docker;
2.配置Docker的yum库(安装一个yum工具-->执行命令,配置Docker的yum源);
3.安装Docker(【完毕】说明安装成功);
4.启动Docker:systemctl start docker;
5.验证Docker是否安装成功(执行docker -v命令));
6.验证安装启动成功:执行docker ps命令;
7.配置镜像加速(注册阿里云账号--开通镜像服务--将地址配置到Docker中即可)

2.快速入门

2.1.部署MySQL

前提:先停掉虚拟机中的MySQL,确保虚拟机中已经安装Docker,且网络开通的情况下,执行下面命令即可安装MySQL:
docker run -d \
	--name mysql \
	--p 3306:3306 \
	--e TZ=Asia/Shanghai \
	--e MYSQL_ROOT_PASSWORD=123 \
	mysql

当一个软件安装好,且对安装好的软件进行打包压缩发送给其他电脑,其他电脑解压后,不需要安装,就可以直接使用,这就是【绿色安装版本】;

Docker下载就类似绿色版安装包,其名字叫做【镜像】;

利用Docker安装应用时,Docker会自动搜索并下载应用【镜像】。
【镜像】不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库(类似绿色面安装版本软件)。
Docker会在运行镜像时,创建一个隔离环境,称为【容器】。
【镜像仓库】:存储和管理镜像的平台,Docker官方维护了一个公共仓库(服务):Docker Hub(国外网站查看已经保存的镜像);

2.2.命令解读

命令:
docker run -d \
	--name mysql \
	-p 3306:3306 \
	-e TZ=Asia/Shanghai \
	-e MYSQL_ROOT_PASSWORD=123 \
	mysql
	
1. docker:docker命令前缀;
2. run:子命令(含有很多的子命令);
3. docker run:创建并运行一个容器;
4. -d:让容器在后台运行;
5. --name mysql:给容器起名字,方便区分不同容器,必须唯一;
6. -p 3306:3306:设置端口映射(第一个3306是【宿主机端口】(可改动),第二个3306是【容器内端口】,容器内端口取决于进程(不需要被改动的));
7. -e KEY=VALUE:e(environment简称)是设置环境变量,镜像里去查其环境变量;
8. -e TZ=Asia/Shanghai:时区;
9. -e MYSQL_ROOT_PASSWORD=123:账户号密码;
10. mysql:指定运行的镜像的名字;
镜像命名规范:
镜像名称一般分两部分组成:[repository]:[tag]
repository:镜像名;
tag:镜像的版本,若没有指定tag时,默认是latest,代表最新版本的镜像;

3.Docker基础

3.1 常见命令

Docker最常见的命令就是操作镜像、容器的命令,详见官方文档:https://docs.docker.com/

3.2 命令别名

使用docker ps --format "table {{命令}}" 对输出的内容进行格式化
找到source /root/.bashrc起别名的文件,在文件中给命令起别名:
alias 别名="需要起别名的源命令"

3.3 数据卷挂载

数据卷:数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁(双向);
数据卷:html/conf
宿主机文件系统:/var/lib/docker/volumes/html/_data或/var/lib/docker/volumes/conf/_data
数据卷常见命令:
1. docker volume create:创建数据卷
2. docker volume ls:查看所有数据卷
3. docker volume rm:删除指定数据卷
4. docker volume inspect:查看某个数据卷的详情
5. docker volume prune:清除数据卷

3.4 本地目录挂载

1.在执行docker run命令时,使用【-v 本地目录: 容器内目录】 可以完成本地目录挂载;
2.本地目录必须以"/" 或"./"开头,如果直接以名称开头,会被识别为数据卷而非本地目录
-v mysql : /var/lib/mysql 会被识别为一个数据卷叫mysql
-v ./mysql : /var/lib/mysql 会被识别为当前目录下的mysql目录

3.4 Dockerfile语法

更新详细语法说明,请参考官网文档

Dockerfile就是利用固定的指令来描述镜像的结构和构建过程,这样Docker才可以依次来构建镜像;
【构建镜像的命令:docker build -t 镜像名 Dockerfile目录】
Dockerfile就是一个【文本文件】,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像,将来Docker可以根据Dockerfile帮我们构建镜像,常见指令:
1. from:指令基础镜像,如from centos:6
2. env:设置环境变量,可在后面指令使用,如env key value
3. copy:拷贝本地文件到镜像的指定目录,如copy ./jrell.tar.gz /tmp
4. run:执行Linux的shell命令,一般是安装过程的命令,如run tar -zxvf /tmp/jrell.tar.gz&& exports path=/tmp/jrell:$path
5. expose:指定容器运行时监听的端口,是给镜像使用者看的,如expose 8080
6. entrypoint:镜像中应用的启动命令,容器运行时调用,如entrypoint java -jar xx.jar

3.5 自定义镜像

镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述【文件打包】的过程。
部署一个Java应用的步骤:
1.准备一个Linux服务器;
2.安装jre并配置环境变量;
3.拷贝jar包;
4.运行jar包;
构建一个Java镜像的步骤:
1. 准备一个Linux运行环境;
2. 安装jre并配置环境变量;
3. 拷贝jar包;
4. 编写运行脚本;
【镜像结构:就是文件包】(每层需要压缩打包):
入口(entrypoint):镜像运行入口,一般是程序启动的脚本和参数;
层(layer):添加安装包、依赖、配置等,每次操作都形成新的一层;
基础镜像(baseImage):应用依赖的系统函数库、环境、配置、文件等;

3.6 容器网络互连

【默认情况下】,所有容器都是以bridge方式连接到Docker的一个虚拟网桥(虚拟网卡)上:
1. 虚拟网卡(网桥):docker0 172.17.0.1/16(地址是一个范围,/16代表IP地址的前16位[前两段172.17]不能动)
2. 容器:与上面网桥建立连接,会被分配一个IP(如172.17.0.2),此处可能存在多个容器(每个容器的IP地址不同);

【自定义网络】
加入自定义网络的容器才可以【通过容器名】互相访问,Docker的网络操作命令如下:
3. docker network create:创建一个网络;
4. docker network ls:查看所有网络;
5. docker network rm:删除指定网络;
6. docker network prune:清除未使用的网络;
7. docker network connect:使指定容器连接加入某网络;
8. docker network disconnect:使指定容器连接离开某网络;
9. docker network inspect:查看网络详细信息;

4.项目部署

4.1 部署Java应用(后端)

1. 项目打包,得到jar包,并将jar包和Dockerfile文件一起放到虚拟机中;
2. 构建镜像:docker build -t hmall .
3. 验证镜像是否构建成功:dis命令
4. 运行新创建的镜像:docker run -d --name hm -p 8080:8080 --network heima hmall
5. 查看日志:docker log
6. 访问:浏览器中访问

4.2 部署前端

1.准备nginx和静态页面;
2.同Java;

4.3 DockerCompose

Docker Compose通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现【多个相互关联的Docker容器的快速部署】;
使用docker compose的相关命令
yml 复制代码
#docker-compose.yml模板
version: "3.8"
services:
	containerA:      #服务A
		image: A     #镜像
		container_name: A  #容器名称
		ports:       #端口
			- "11:11"
		environment:
			TZ: Asia/Shanghai
		volumes:  #数据卷挂载
			-
		networks:
			-hm
	containerB:     #服务B
		image: B
		container_name: B
		ports:
			- "22:22"
	containerC:     #服务C
		image: C
		container_name: C
		ports:
			- "33:33"
相关推荐
安的列斯凯奇10 分钟前
微服务保护—Sentinel快速入门+微服务整合 示例: 黑马商城
运维·微服务·sentinel
AI探索家_星海算力1 小时前
如何配置【Docker镜像】加速器+【Docker镜像】的使用
运维·人工智能·docker·容器·gpu算力
IT 古月方源1 小时前
文件上传漏洞 (网络安全)
运维·服务器·网络·tcp/ip·网络安全·智能路由器
北顾南栀倾寒1 小时前
[Linux]进程间通信-共享内存与消息队列
linux·运维·服务器
✿ ༺ ོIT技术༻2 小时前
Linux:线程控制
linux·运维·服务器
Xi_er_9 小时前
密钥管理系统在数据安全解决方案中的重要性
运维·数据仓库·物联网·web安全·前端框架·智慧城市·安全架构
练小杰9 小时前
我在广州学 Mysql 系列——有关数据表的插入、更新与删除相关练习
android·运维·数据库·经验分享·学习·mysql·adb
hqxnb66610 小时前
深入理解 Linux 管道:创建与应用详解(匿名管道&&进程池)
linux·运维·服务器
vvw&11 小时前
如何在 Ubuntu 24.04 上安装 Drupal CMS 11 并配置 Nginx, MariaDB 和 SSL 教程
linux·运维·服务器·nginx·ubuntu·ssl·mariadb
未完成的歌~11 小时前
Kali 离线安装 ipmitool 笔记
linux·运维·笔记