云原生 从Docker、Jenkins、Kubernetes从入门到精通系列
0、如何使用docker部署组件
- 先去找组件的镜像
- 查看镜像文档,了解组件的可配置内容
- docker run进行部署
1、使用Docker安装Tomcat
#拉取tomcat镜像
docker pull tomcat:8.5.47-jdk8-openjdk
#使用docker创建 tomcat卷轴
docker volume create mytomcat-vol
#使用docker创建 tomcat容器,并目录挂载 与 端口映射
#注意!!!端口映射,前面表示宿主机端口,后面表示 容器端口
#注意!!!这个命令和下个命令二选一,主要区别在于是否统一时间
docker run -di --name mytomcat --mount src=mytomcat-vol,dst=/usr/local/tomcat -p 8080:8080 tomcat:8.5.47-jdk8-openjdk
#使用以下命令创建容易,使时间统一
docker run -di --name mytomcat -v /etc/localtime:/etc/localtime:ro --mount src=mytomcat-vol,dst=/usr/local/tomcat -p 8080:8080 tomcat:8.5.47-jdk8-openjdk
#查看日志
docker logs -f mytomcat
#服务器时间问题
docker cp mytomcat:/etc/timezone /timezone
#修改UTC为UTC+8
docker cp /timezone mytomcat:/etc/timezone
docker restart mytomcat
#部署jar包笔记
docker run -di --name admin1 -v /etc/localtime:/etc/localtime:ro -v /data/jar/admin1:/jar -v /data/logs/admin1:/mnt/logs/admin1 -p 8001:8001 adoptopenjdk/openjdk8 java -jar /jar/admin1.jar
问题:
- 关于服务器时间问题
- 服务器时间问题在于容器使用的时间为0时区,将其改为东8区,即可,亲测有效↑
- Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
- 问题解决 在目录挂载的过程中,因为修改过时间,所以导致出现文件拷贝不成功,是因为所copy的类型是不一样的。
2、使用Docker安装Nginx
# 拉取nginx镜像
# 这里拉取的是最新的镜像,若要指定版本,可以参考命令 `docker search nginx`,然后按照指定版本安装
docker pull nginx
创建一个容器并声明挂载文件与目录,之后删除,并新启动一个容器挂载到当前文件目录。
#启动一个容器
docker run -d --name nginx nginx
# 查看 容器 获取容器ID 或直接使用名字
docker container ls
# 在当前目录下创建目录:conf、 html 、 logs
cd /home && mkdir conf && cd ./conf && mkdir html && mkdir logs
# 拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录($PWD 当前全路径)
docker cp nginx:/etc/nginx/nginx.conf /home/conf
docker cp nginx:/etc/nginx/conf.d /home/conf
# 停止容器
docker container stop nginx
# 删除容器
docker container rm nginx
#部署容器 (直接复制即可),自定义端口号
docker run -d -p 80:80 -p 443:443 --name mynginx -v /home/conf/html:/usr/share/nginx/html -v /home/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/conf/conf.d:/etc/nginx/conf.d -v /home/conf/logs:/var/log/nginx nginx
#说明:
# /home/conf/nginx.conf 配置文件
# /home/conf/conf.d 配置文件
# /home/conf/logs 日志所在位置
# 停止容器
docker container stop nginx
# 删除容器
docker container rm nginx
# 查看日志
docker logs -f mynginx
# 进入系统
docker exec -it mynginx bin/bash
3、使用Docker安装MySQL
# 拉取mysql镜像
# 这里拉取的是5.7.29的镜像,若要指定版本,可以参考命令 `docker search mysql`,然后按照指定版本安装
docker pull mysql:5.7.29
#部署容器 (直接复制/需要改密码!!!),自定义端口号
docker run -di --name mymysql -p 3306:3306 -v /etc/localtime:/etc/localtime:ro -v /data/mysql/data:/var/lib/mysql -v /data/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=这里是密码 mysql:5.7.29 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
#说明:
# /etc/localtime:ro 和宿主机时间保持一致
# /data/mysql/data 数据放在宿主机【/var/lib/mysql】
# /data/mysql/conf 配置文件【/etc/mysql/conf.d】
# 查看日志
docker logs -f mymysql
# 进入系统
docker exec -it mymysql bin/bash
#修改配置文件sqlmode的内容
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 修改mysql密码
update user set authentication_string=password('张三') where user='root';
问题:
- ONLY_FULL_GROUP_BY这样的错误
- 我们需要修改my.cnf,修改sql_mode【↑】
4、使用Docker安装Redis
# 拉取Redis镜像
# 这里拉取的是最新的镜像,若要指定版本,可以参考命令 `docker search redis`,然后按照指定版本安装
docker pull redis
#部署容器 (直接复制/需要改密码!!!),如果要设置密码,需要加上requirepass
docker run -di --name=myredis -p 6379:6379 redis --requirepass "mypassword"
# 在window操作系统中,找一个redis客户端进行测试。执行如下命令
redis-cli.exe -h 192.168.189.139 -p 6379
# 进入系统
docker exec -it myredis bin/bash
# 查看日志
docker logs -f myredis
5、使用Docker安装ElasticSearch【未实践】
#准备文件和文件夹,并chmod -R 777 xxx
#配置文件内容,参照
https://www.elastic.co/guide/en/elasticsearch/reference/7.5/node.name.html
搜索相关配置
# 考虑为什么挂载使用esconfig ...
docker run --name=elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms300m -Xmx300m" -v /app/es/data:/usr/share/elasticsearch/data -v /app/es/plugins:/usr/shrae/elasticsearch/plugins -v esconfig:/usr/share/elasticsearch/config -d elasticsearch:7.12.0