软考高级系统架构师通过
喜报
2024上半年软考刚刚出成绩了,已通过,特此纪念
开心~
docker-安装redis
Docker安装Redis以 Redis 6.0.8 为例:
1docker pull redis:6.0.8
单机版安装简单版 Redis简单的启动Redis容器:
1docker run -p 6379:6379 -d redis:6.0.8
简单版没有配置容器卷映射,当容器被删除时数据无法恢复。
实际应用版Redis配置文件、数据文件都和容器卷进行映射。
步骤:
宿主机创建目录/app/redis
在/app/redis下创建文件redis.conf,主要修改以下几项配置
1234567891011121314# 开启密码验证(可选)requirepass 123# 允许redis外地连接,需要注释掉绑定的IP# bind 127.0.0.1# 关闭保护模式(可选)protected-mode no# 注释掉daemonize yes,或者配置成 daemonize no。因为该配置和 docker run中的 -d 参数冲突,会导致容器一直启动失败daemonize no# 开启redis数据持久化, (可选)appendonly yes
即最后的配置文件为:
启 ...
docker-安装mysql
Docker 安装 Mysql以安装 Mysql 5.7为例:
1docker pull mysql:5.7
Mysql 单机简单版 Mysql 5.7 安装简单的启动Mysql容器:
12# 需要使用 -e 配置环境变量 MYSQL_ROOT_PASSWORD(mysql root用户的密码)docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
简单版的Mysql会存在以下问题:
中文乱码
没有容器卷映射
启动docker容器后,可以正常的连接、创建数据库,创建表,插入数据。但是插入中文则会报错。
例如:
123456789101112-- 创建db01数据库create database db01;-- 切换到db01;use db01;-- 创建表create table t1(id int, name varchar(20));-- 插入英文可以正常插入insert into t1 values(1, 'abc');-- 插入中文报错insert into t1 valu ...
docker-可视化
Portainer:Docker轻量级可视化工具Portainer是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。
Portainer分为开源社区版(CE版)和商用版(BE版/EE版)。
安装Portainer也是一个Docker镜像,可以直接使用Docker运行。
12345# 旧版镜像地址为portainer/portainer,从2022年1月标记为过期# 新版镜像地址为portainer/portainer-ce# --restart=always 如果Docker引擎重启了,那么这个容器实例也会在Docker引擎重启后重启,类似开机自启docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.13.0-alpine
启动之后,便可以在浏览器 ...
docker-compose容器编排
Docker-composeDocker-Compose 是 Docker 官方的开源项目,负责实现对Docker容器集群的快速编排。
Docker-Compose可以管理多个Docker容器组成一个应用。需要定义一个yaml格式的配置文件 docker-compose.yml,配置好多个容器之间的调用关系,然后只需要一个命令就能同时启动/关闭这些容器。
Docker建议我们每个容器中只运行一个服务,因为Docker容器本身占用资源极少,所以最好是将每个服务单独的分割开来。但是如果我们需要同时部署多个服务,每个服务单独构建镜像构建容器就会比较麻烦。所以 Docker 官方推出了 docker-compose 多服务部署的工具。
Compose允许用户通过一个单独的 docker-compose.yml 模板文件来定义一组相关联的应用容器为一个项目(project)。可以很容易的用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。
核心概念:
服务(service):一个个应用容器实例
工程(project):由一组关联的应用容器组成的一个完 ...
docker-网络
Docker 网络docker安装并启动服务后,会在宿主机中添加一个虚拟网卡。
在Docker服务启动前,使用 ifconfig 或 ip addr 查看网卡信息:
ens33或eth0:本机网卡
lo:本机回环网络网卡
可能有virbr0(CentOS安装时如果选择的有相关虚拟化服务,就会多一个以网桥连接的私网地址的virbr0网卡,作用是为连接虚拟网卡提供NAT访问外网的功能。如果要移除该服务,可以使用 yum remove libvirt-libs.x86_64)
使用 systemctl start docker启动Docker服务后,会多出一个 docker0 网卡。
作用:
容器间的互联和通信以及端口映射
容器IP变动时候可以通过服务名直接网络通信而不受到影响
Docker容器的网络隔离,是通过Linux内核特性 namespace和 cgroup 实现的。
docker网络命令查看Docker网络模式:
1docker network ls
如果没有修改过docker network,则默认有3个网络模式:
bridge
host
none
添加Docker ...
docker-微服务实战
搭建SpringBoot项目搭建一个简单的SpringBoot项目:
创建maven工程,pom为:
1234567891011121314151617181920212223242526<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <grou ...
docker-DockerFile解析
DockerfileDockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
构建步骤:
编写Dockerfile文件
docker build命令构建镜像
docker run依据镜像运行容器实例
构建过程Dockerfile编写:
每条保留字指令都必须为大写字母,且后面要跟随至少一个参数
指令按照从上到下顺序执行
#表示注释
每条指令都会创建一个新的镜像层并对镜像进行提交
Docker引擎执行Docker的大致流程:
docker从基础镜像运行一个容器
执行一条指令并对容器做出修改
执行类似docker commit的操作提交一个新的镜像层
docker再基于刚提交的镜像运行一个新容器
执行Dockerfile中的下一条指令,直到所有指令都执行完成
:::info从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,
Dockerfile是软件的原材料
Docker镜像是软件的交付品
Docker容器则可以认为是软件镜像的运行态,也即依照镜像运行的容器实例
Docke ...
docker-常规安装简介
8 Docker常规安装简介8.1 总体步骤
搜索镜像
拉取镜像
查看镜像
启动镜像 - 服务端口映射
停止容器
移除容器
8.2 安装tomcat
docker hub上面查找tomcat镜像
docker search tomcat
从docker hub上拉取tomcat镜像到本地
docker pull tomcat
docker images查看是否有拉取到的tomcat
使用tomcat镜像创建容器实例(也叫运行镜像)
docker run -it -p 8080:8080 tomcat
:::info-p 小写,主机端口:docker容器端口
-P 大写,随机分配端口
-i 交互
-t 终端
-d 后台
:::
访问猫首页
问题
解决
1. 可能没有映射端口或者没有关闭防火墙
2. 把webapps.dist目录换成webapps
先成功启动tomcat
查看webapps 文件夹查看为空
免修改版说明
docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --n ...
docker-容器数据卷
7 Docker容器数据卷7.1 坑:容器卷记得加入--privileged=true
Docker挂载主机目录访问如果出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个–privileged=true参数即可
如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,在SELinux里面挂载目录被禁止掉了,如果要开启,我们一般使用–privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。
7.2 回顾下上一讲的知识点,参数V
7.3 是什么卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删 ...