Docker安装Mysql
首先确认当前系统中,是否有mysql镜像文件,结果发现没有
再使用docker search命令来搜索hub.docker.com上的mysql镜像文件
我们就使用starts最多的,官方的mysql镜像。使用docker pull mysql命令,来下载mysql:latest,也就是mysql最新版的镜像
根据mysql镜像创建并运行一个容器:
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 mysql
docker run -d -p 3306:3306 --name xyz \
-v ~/mysql/conf:/etc/mysql/conf.d \
-v ~/mysql/logs:/logs \
-v ~/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
查看正在运行着的容器,发现刚刚启动的mysql
进入运行mysql的容器
进入mysql命令行客户端
在mysql服务器上创建数据库和表,并加入测试数据
再通过windows上的sqlyog来连接linux上的docker中的mysql服务..
但是在连接时报错了,因为我们下载的mysql8的加密方法变了!
为了解决以上问题,我们在docker下的mysql中使用以下命令来修改密码
alter user 'root'@'%' identified with mysql_native_password by '123';
再次使用sqlyog来登录docker容器中的mysql服务,就成功了!
如果我们想备份docker容器中运行着的mysql的数据,该怎么做呢?首先退出容器:ctrl+p+q,然后再键入以下命令即可备份数据:
docker exec magical_buck sh -c 'exec mysqldump --all-databases -uroot -p"123"' > ./all.sql
如果还是连接不上,那可能是宿主机的路由没有开启,需要执行以下命令来开启宿主机的路由:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
sysctl net.ipv4.ip_forward
Docker搭建nginx与tomcat的集群环境
拉取nginx镜像
拉取tomcat镜像
简单回顾一下nginx的主要作用
1. http服务器
2. 反向代理
3. 动静分离
在使用nginx+tomcat集群之前,先看一下整体的结构流程图
接下来,使用tomcat镜像来跑起来3个tomcat容器
docker run -d -p 8081:8080 --name t8081 tomcat
docker run -d -p 8082:8080 --name t8082 tomcat
docker run -d -p 8083:8080 --name t8083 tomcat
创建一个web应用,pom.xml内容如下,
<?xml versinotallow="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:schemaLocatinotallow="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gao</groupId>
<artifactId>myweb</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
</dependency>
</dependencies>
</project>
index.jsp内容如下
<%@ page cnotallow="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="utf-8">
<title>index.jsp</title>
</head>
<body>
<h3>Hello, JSP</h3>
本次请求的端口号是:<%=request.getServerPort()%> <br>
会话id: <%=session.getId()%>
</body>
</html>
将该web应用导出为war包:
将war包上传到linux:
将war包分别部署到3个容中的tomcat中:
docker cp myweb.war t8081:/usr/local/tomcat/webapps
docker cp myweb.war t8082:/usr/local/tomcat/webapps
docker cp myweb.war t8083:/usr/local/tomcat/webapps
然后通过浏览器,分别访问这3个tomcat中的myweb应用
接下来,该配置nginx了,在当前用户家目录下创建一个nginx文件夹,在其中创建nginx.conf配置文件,添加以下内容:
# 指定用户和用户所属的组
user root;
# 指定nginx开启的进程数。 每个nginx进程平均耗费10M~12M内存,建议设置的数字cpu的数量一致
worker_processes 1;
# error_log是一个主模块指令,用来定义全局错误日志文件。
error_log /var/log/nginx/error.log warn;
# 用来指定进程pid的存储文件位置
pid /var/run/nginx.pid;
# events是一个事件指令,用来设定nginx的工作模式及连接数的上限
events {
用于定义nginx每个进程的最大连接数,默认是1024
worker_connections 1024;
}
# http服务器配置
http {
通过server指令指定后端服务器的IP地址和端口
upstream balance {
server 192.168.188.130:8081;
server 192.168.188.130:8082;
server 192.168.188.130:8083;
}
主机配置
server {
listen 80;
location / {
proxy_pass http://balance;
}
}
指定配置文件所包含的媒体类型,如果不包含这个第三方文件的话,
则nginx将无法识别css、js等文件
include /etc/nginx/mime.types;
设定默认为类型为二进制流,也就是当文件类型未定义时使用这种方式
例如在没有配置PHP环境时,nginx是不予解析的,此时浏览器访问PHP
文件就会出现下载的提示
default_type application/octet-stream;
用于开启高校的文件传输模式,也即是传说中的zero copy
sendfile on;
设置客户的连接保持活动连接的超时时间,在超过这个时间之后,服务器就会关闭这个连接
keepalive_timeout 65;
}
然后根据nginx镜像,启动一个nginx容器:
docker run -d -p 8082:80 --name pms-front \
-v /root/pms/nginx/nginx.conf:/etc/nginx/nginx.conf nginx
查看正在运行中的容器, 如果没有看到nginx容器处于运行状态的话,要使用“docker logs 容器id”来排查错误
此时访问nginx服务,会发现,tomcat集群成功了:
Docker安装Redis
docker pull redis
docker run -d -p 6379:6379 redis
# 指定配置文件
docker run -d -p 6379:6379 \
-v /root/redis/redis.conf:/redis.conf redis \
redis-server /redis.conf
Docker安装RabbitMQ
拉去RabbitMQ时,要指定RabbitMQ的版本为management,因为该版本会自带web客户端
docker pull rabbitmq:management
docker run -dit --name MyRabbitMQ -e RABBITMQ_DEFAULT_USER=root \
-e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management
Docker安装ElasticSearch
docker pull elasticsearch:7.11.2
docker run --name es -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 \
elasticsearch:7.11.2
Docker安装Kibana
docker pull kibana:7.11.2
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.188.130:9200 \
-p 5601:5601 -d kibana:7.11.2
Docker安装minio
- 拉取minio镜像docker pull minio/minio
- 启动minio容器
docker run -p 9000:9000 -p 9090:9090 \
--name minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=minioadmin" \
-e "MINIO_SECRET_KEY=minioadmin" \
-v /mydata/minio/data:/data \
minio/minio server /data --console-address ":9090" -address ":9000"
Docker安装Nacos
docker pull nacos/nacos-server
docker run -d -p 8848:8848 --name nacos8848 -e MODE=standalone nacos/nacos-server
Docker部署SpringBoot项目
1. 准备一个简单的SpringBoot项目
pom.xml
<?xml versinotallow="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:schemaLocatinotallow="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gao</groupId>
<artifactId>docker-test</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.gao.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
controller
@RestController
@RequestMapping("user")
public class UserController {
@RequestMapping("save")
public String save() {
return "save ok";
}
}
启动类
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
将该springboot项目打包,得到:docker-test-1.0-SNAPSHOT.jar
将docker-test-1.0-SNAPSHOT.jar传给linux
2. 利用DockerFile构建镜像
DockerFile脚本
FROM java:8
COPY docker-test-1.0-SNAPSHOT.jar docker-test.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "docker-test.jar"]
注意,为什么基础镜像是"java:8",而不是"tomcat"?因为springboot应用中引入了spring-boot-stater-web,所以应用中自带tomcat。
构建镜像
docker build -f DockerFile -t docker-test .
查看镜像
运行容器
访问:
最后,我们进入这个容器中,看看里面的文件内容:
docker exec -it 882f87f0a910 bash
Docker 本地镜像推送到阿里云
为了测试方便
☐ 删除所有容器:docker rm -f $(docker ps -qa)
☐ 删除所有镜像:docker rmi $(docker images -qa)
此时查询容器和镜像,发现都是空的
拉取镜像:centos:centos7
使用该镜像创建并运行一个容器,该容器中是没有vim命令和ifconfig命令的:
此时我们为该容器下载这两个命令:
yum -y install vim
yum -y install net-tools
然后我们将这个容器,提交为一个新的镜像,该镜像便是自带vim和ifconfig命令的镜像了!首先使用ctrl+p+q退出但不关闭容器,然后键入以下命令:
容器id mycentos
新的镜像mycentos是自带vim和ifconfig命令的镜像
接下来我们要把mycentos这个镜像推送到阿里云! 进入阿里云开发者平台:https://account.aliyun.com
登录,再进入这个网址: https://cr.console.aliyun.com/,进入个人版:
进入镜像仓库:
如果你还没有创建镜像仓库,那就要先创建一个镜像仓库
选择本地仓库,然后点击创建镜像仓库:
至此,镜像仓库创建成功:
接着,就准备把本地镜像推送到阿里云!点击管理,即可看到推送的代码。以下就是将本地镜像推送到远程镜像仓库步骤:
先登录
sudo docker login --username=gaochenyi1211 \
registry.cn-hangzhou.aliyuncs.com
然后设置本地镜像与远程镜像仓库的对应关系,也就是标记本地镜像,将其归入某一仓库。
sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/gaopeng/gaocentos:[镜像版本号]
推送本地镜像到远程镜像仓库
sudo docker push registry.cn-hangzhou.aliyuncs.com/gaopeng/gaocentos:[镜像版本号]
在镜像中心的镜像搜索中,可以搜索到自己刚刚推送的镜像
复制镜像地址:
然后我们再次删除本地的所有容器和镜像:
docker rm -f $(docker ps -qa)
docker rmi -f $(docker images -qa)
镜像全都没有了:
使用docker pull命令把远程镜像下载下来,记得自己加上版本号!
docker pull registry.cn-hangzhou.aliyuncs.com/gaopeng/gaocentos:1.0
pull完之后,可以看到一个镜像
利用这个镜像,创建并运行一个容器,该容器直接具备vim和ifconfig命令!
如此,将一个本地镜像推送到阿里云,再从阿里云把镜像pull下来的过程就演示完了。