文章目录
1.比较了 Docker 和传统虚拟化方式的不同之处:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oz7jiIDV-1651429152359)(C:\Users\19845\AppData\Roaming\Typora\typora-user-images\image-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-utils
3.设置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.repo
4.更新yum软件包索引
yum makecache fast
5.安装DOCKER CE
yum -y install docker-ce docker-ce-cli containerd.io
6.启动docker
systemctl start docker
7.测试
docker version
8. 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/containerd
4.配置阿里镜像加速
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zdMXysMT-1651429152361)(C:\Users\19845\AppData\Roaming\Typora\typora-user-images\image-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-jdk8
2.运行实例
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
6.安装mysql
1.拉去镜像
docker pull mysql:5.7
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.7
-e 设置mysql密码
-d 后台运行
-v /mydata/mysql/data 用来同步docker容器的数据的·文件夹
-v /mydata/mysql/conf 同步mysql配置文件
/etc/mysql
3.-v /mydata/mysql/conf配置文件
/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.conf
2.拉取镜像
docker pull redis
3.运行实例
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.conf
4.开起持久化
先进入/mydata/redis/conf文件下
vim redis.conf
插入 appendonly yes
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m2WIuqaG-1651429152362)(C:\Users\19845\AppData\Roaming\Typora\typora-user-images\image-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 8001
3.在Docker编写微服务8001 连接Docker mysql redis
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gnsbDV7d-1651429152363)(C:\Users\19845\AppData\Roaming\Typora\typora-user-images\image-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=true
2.docker 中mysql
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fdSk6o3h-1651429152364)(C:\Users\19845\AppData\Roaming\Typora\typora-user-images\image-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.7
3.启动redis
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vwikRYLi-1651429152364)(C:\Users\19845\AppData\Roaming\Typora\typora-user-images\image-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 yes
4. 编写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 8001
5.Docker与jar放在同一目录下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ndCqxuyX-1651429152365)(C:\Users\19845\AppData\Roaming\Typora\typora-user-images\image-20220502020312259.png)]
6.运行docker build -t zzyy_docker:1.6 .
7.测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TuV3rpiN-1651429152365)(C:\Users\19845\AppData\Roaming\Typora\typora-user-images\image-20220502020440475.png)]