第二部分: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"
相关推荐
tuokuac7 小时前
docker中nginx配置报错解决
linux·运维·服务器
Joren的学习记录8 小时前
【Linux运维大神系列】docker详解(四)
linux·运维·docker
Elastic 中国社区官方博客9 小时前
让我们把这个 expense 工具从 n8n 迁移到 Elastic One Workflow
大数据·运维·elasticsearch·搜索引擎·ai·信息可视化·全文检索
( •̀∀•́ )92010 小时前
GitHub Actions SSH 部署密钥
运维·ssh·github
louqle10 小时前
docker基本知识及常用命令汇总
运维·docker·容器
学烹饪的小胡桃10 小时前
【运维学习】实时性能监控工具 WGCLOUD v3.6.2 更新介绍
linux·运维·服务器·学习·工单系统
叫致寒吧10 小时前
Docker
运维·docker·容器
杨浦老苏10 小时前
现代流媒体聚合播放器冬瓜TV MAX
docker·群晖·多媒体
白露与泡影11 小时前
使用systemd,把服务装进 Linux 心脏里~
linux·运维·python
l1t12 小时前
用docker安装oracle 19c
运维·数据库·docker·oracle·容器