Docker学习

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容器的数据的·文件夹

image-20220428092432431

-v /mydata/mysql/conf 同步mysql配置文件

/etc/mysql

image-20220428093407977

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)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值