栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker学习

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker学习

文章目录
    • 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.测试

1.比较了 Docker 和传统虚拟化方式的不同之处:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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-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: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-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: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 8001

 
3.在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=true

2.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.7
3.启动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 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:Users19845AppDataRoamingTyporatypora-user-imagesimage-20220502020312259.png)]

6.运行docker build -t zzyy_docker:1.6 . 7.测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TuV3rpiN-1651429152365)(C:Users19845AppDataRoamingTyporatypora-user-imagesimage-20220502020440475.png)]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/850335.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号