- 1.比较了 Docker 和传统虚拟化方式的不同之处:
- 2.Docker 小总结
- 1.需要正确的理解仓库/镜像/容器这几个概念:
- 1.理解
- 2.镜像文件
- 3 容器实例
- 4.仓库
- 3.安装
- 1.yum安装gcc相关
- 2.安装需要的软件包
- 3.设置stable镜像仓库
- 4.更新yum软件包索引
- 5.安装DOCKER CE
- 6.启动docker
- 7.测试
- 8. docker run hello-world
- 9.卸载
- 4.配置阿里镜像加速
- 5.安装tomcat
- 1.拉取镜像
- 2.运行实例
- 6.安装mysql
- 1.拉去镜像
- 2.运行实例
- 3.-v /mydata/mysql/conf配置文件
- 7.安装redis
- 1.建立文件夹redis配置文件目录
- 2.拉取镜像
- 3.运行实例
- 4.开起持久化
- 1.高级篇----------------
- 1.Docker复杂安装详说
- 1. 安装mysql主从复制
- 主从搭建步骤
- 1.新建主服务器容器实例3307
- 2.Dockerfile
- 3.在Docker编写微服务8001 连接Docker mysql redis
- 1.微服务配置
- 2.docker 中mysql
- 3.启动redis
- 4. 编写Dockerfile
- 5.Docker与jar放在同一目录下
- 6.运行docker build -t zzyy_docker:1.6 .
- 7.测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oz7jiIDV-1651429152359)(C:Users19845AppDataRoamingTyporatypora-user-imagesimage-20220413235157952.png)]
*传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
*容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
* 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。
2.Docker 小总结 1.需要正确的理解仓库/镜像/容器这几个概念: 1.理解1.1、Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。
1.2、image文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
2.镜像文件2.1 image 文件生成的容器实例,本身也是一个文件,称为镜像文件。
3 容器实例3.1 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器
4.仓库4.1 就是放一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候再从仓库中拉下来就可以了。
3.安装 1.yum安装gcc相关CentOS7能上外网
yum -y install gcc yum -y install gcc-c++2.安装需要的软件包
官网要求
yum install -y yum-utils3.设置stable镜像仓库
大坑
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
报错:
推荐
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo4.更新yum软件包索引
yum makecache fast
5.安装DOCKER CEyum -y install docker-ce docker-ce-cli containerd.io6.启动docker
systemctl start docker7.测试
docker version8. docker run hello-world
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VCWXHm9T-1651429152360)(file:///C:/Users/19845/AppData/Local/Temp/msohtmlclip1/01/clip_image022.jpg)]
9.卸载[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LPgXyOvD-1651429152361)(file:///C:/Users/19845/AppData/Local/Temp/msohtmlclip1/01/clip_image024.jpg)]
systemctl stop docker yum remove docker-ce docker-ce-cli containerd.io rm -rf /var/lib/docker rm -rf /var/lib/containerd4.配置阿里镜像加速
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zdMXysMT-1651429152361)(C:Users19845AppDataRoamingTyporatypora-user-imagesimage-20220414092544717.png)]
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://neckhnry.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
5.安装tomcat 1.拉取镜像
docker pull billygoo/tomcat8-jdk82.运行实例
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
6.安装mysql 1.拉去镜像
docker pull mysql:5.72.运行实例
docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
3.-v /mydata/mysql/conf配置文件-e 设置mysql密码
-d 后台运行
-v /mydata/mysql/data 用来同步docker容器的数据的·文件夹
-v /mydata/mysql/conf 同步mysql配置文件
/etc/mysql
/mydata/mysql/conf:/etc/mysql
自动 在宿主机建立/mydata/mysql/conf 文件夹 在docker环境下建立/etc/mysql文件夹
文件夹中数据都是同步的
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve
7.安装redis 1.建立文件夹redis配置文件目录
若 /mydata/redis目录原本不存在,则建立一个目录。
mkdir -p /mydata/redis/conf
在/mydata/redis/conf文件夹下建立redis.conf普通文件
touch /mydata/redis/conf/redis.conf2.拉取镜像
docker pull redis3.运行实例
docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf4.开起持久化
先进入/mydata/redis/conf文件下
vim redis.conf
插入 appendonly yes
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m2WIuqaG-1651429152362)(C:Users19845AppDataRoamingTyporatypora-user-imagesimage-20220428095241901.png)]
1.高级篇---------------- 1.Docker复杂安装详说 1. 安装mysql主从复制 主从搭建步骤 1.新建主服务器容器实例3307
docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
1.1在/mydata/mysql-master/conf下 vim my.cnf插入
[mysqld] ## 设置server_id,同一局域网中需要唯一 server_id=101 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能 log-bin=mall-mysql-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062
1.2master容器实例内创建数据同步用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
1.3新建从服务器容器实例3308
docker run -p 3308:3306 --name mysql-slave -v /mydata/mysql-slave/log:/var/log/mysql -v /mydata/mysql-slave/data:/var/lib/mysql -v /mydata/mysql-slave/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
1.4进入/mydata/mysql-slave/conf目录下新建my.cnf vim my.cnf
搜索 便笺 [mysqld] ## 设置server_id,同一局域网中需要唯一 server_id=102 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用 log-bin=mall-mysql-slave1-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062 ## relay_log配置中继日志 relay_log=mall-mysql-relay-bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志 log_slave_updates=1 ## slave设置为只读(具有super权限的用户除外) read_only=1
1.5 进入mysql-slave容器 在从数据库中配置主从复制
change master to master_host='101.43.157.156', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;2.Dockerfile
# 基础镜像使用java FROM java:8 # 作者 MAINTAINER zzyy # VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp VOLUME /tmp # 将jar包添加到容器中并更名为zzyy_docker.jar ADD docker_boot-0.0.1-SNAPSHOT.jar zzyy_docker.jar # 运行jar包 RUN bash -c 'touch /zzyy_docker.jar' ENTRYPOINT ["java","-jar","/zzyy_docker.jar"] #暴露6001端口作为微服务 EXPOSE 80013.在Docker编写微服务8001 连接Docker mysql redis
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gnsbDV7d-1651429152363)(C:Users19845AppDataRoamingTyporatypora-user-imagesimage-20220502015525222.png)]
1.微服务配置# 服务端口 server.port=8001 # mysql数据库连接 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://101.43.157.156:3306/db2021?serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=root #mybatis日志 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl #配置mapper xml文件的路径 mybatis-plus.mapper-locations=classpath:com/xian/dockerboot/mapper/xml/*.xml #返回json的全局时间格式 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 # ========================redis相关配置===================== spring.redis.database=0 spring.redis.host=101.43.157.156 spring.redis.port=6379 #spring.redis.password= spring.redis.lettuce.pool.max-active=8 spring.redis.lettuce.pool.max-wait=-1ms spring.redis.lettuce.pool.max-idle=8 spring.redis.lettuce.pool.min-idle=0 # ========================swagger===================== spring.swagger2.enabled=true2.docker 中mysql
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fdSk6o3h-1651429152364)(C:Users19845AppDataRoamingTyporatypora-user-imagesimage-20220502015649328.png)]
2.1已启动
2.2 配置
docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.73.启动redis
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vwikRYLi-1651429152364)(C:Users19845AppDataRoamingTyporatypora-user-imagesimage-20220502015846119.png)]
3.1 已启动
3.2 配置
启动redis容器
docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data -v /mydata/redis/conf:/etc/redis -d redis:6.0.8 redis-server /etc/redis/redis.conf
开启持久化
先进入/mydata/redis/conf文件下 在 vi redis.conf 插入 appendonly yes4. 编写Dockerfile
shell中 bash -c 执行命令或者可执行文件
touch命令的作用是修改这个文件的访问时间和修改时间为当前时间。
将jar包添加到容器中并更名为zzyy_docker.jar ADD docker_boot-0.0.1-SNAPSHOT.jar zzyy_docker.jar
ENTRYPOINT
类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
# 基础镜像使用java FROM java:8 # 作者 MAINTAINER zzyy # VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp VOLUME /tmp # 将jar包添加到容器中并更名为zzyy_docker.jar ADD docker_boot-0.0.1-SNAPSHOT.jar zzyy_docker.jar # 运行jar包 RUN bash -c 'touch /zzyy_docker.jar' ENTRYPOINT ["java","-jar","/zzyy_docker.jar"] #暴露6001端口作为微服务 EXPOSE 80015.Docker与jar放在同一目录下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ndCqxuyX-1651429152365)(C:Users19845AppDataRoamingTyporatypora-user-imagesimage-20220502020312259.png)]
6.运行docker build -t zzyy_docker:1.6 . 7.测试[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TuV3rpiN-1651429152365)(C:Users19845AppDataRoamingTyporatypora-user-imagesimage-20220502020440475.png)]



