docker 笔记整理

Docker常用安装基本步骤

  1. 搜索镜像
  2. 拉取镜像
  3. 查看镜像
  4. 启动镜像
  5. 停止容器
  6. 移除容器

Tomcat安装

docker search tomcat

docker pull tomcat

docker images

docker run -it -p 8080:8080 tomcat

docker-compose版本:

version: '3'
services:
  tomcat1:
    image: tomcat
    container_name: tomcat1
    ports:
      - 9090:8080

  tomcat2:
    image: tomcat
    container_name: tomcat2
    ports:
      - 9091:8080

Mysql安装

docker search mysql

docker pull mysql

docker run -p 3306:3306 --name mysql -v /usr/local/docker/mysql/conf:/etc/mysql -v /usr/local/docker/mysql/logs:/var/log/mysql -v /usr/local/docker/mysql/data:/var/lib/mysql -e MYSQL\_ROOT\_PASSWORD=123456 -d mysql

docker exec -it 容器ID /bin/bash

mysql -hlocalhost -uroot -p 进入mysql

如果pull的mysql版本为8以上mysql服务器要求的认证插件版本与客户端不一致造成的

外部数据库连接工具无法连接mysql时候可能连接不上是因为8以上mysql服务器要求的认证插件版本与客户端不一致造成的。

Use mysql
select host,user,plugin,authentication\_string from mysql.user;

查看用户信息

  1. ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'newpassword'; #这行代码有两层含义,第一:修改root的密码为'root',摒弃原来的旧密码。第二:使用mysql_native_password对新密码进行编码,更新一下用户的密码root用户密码为newpassword

docker exec 容器ID sh -c 'exec mysqldump --all -databases -uroot -p"123456"' > /use/all-databases.sql

docker-compose.yml:

#MySQL5

version: '3.1'
services:
  db:
    image: mysql:5.7.22
    restart: always
    container_name: mysql-itoken-service-admin
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp= true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    ports:  
      - 3306:3306 
    volumes:
      - ./data:/var/lib/mysql

#MySQL8

version: '3'
services:
  mysql:
    image: mysql
    container_name: mysql
    command:
    # MySQL8的密码验证方式默认是 caching_sha2_password,但是很多的连接工具还不支持该方式
    # 就需要手动设置下mysql的密码认证方式为以前的 mysql_native_password 方式
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
    # docker的重启策略:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: root # root用户的密码
      MYSQL_USER: admin # 创建新用户
      MYSQL_PASSWORD: 123456 # 新用户的密码
    ports:
      - 3306:3306
    volumes:
      - /Volumes/code/dockerCompose/mysql/mysql8/data:/var/lib/mysql
      - /Volumes/code/dockerCompose/mysql/mysql8/conf:/etc/mysql/conf.d
      - /Volumes/code/dockerCompose/mysql/mysql8/logs:/logs

Redis安装

redis官网:https://redis.io/

进入官网,直接下载redis-xxx.tar.gz,然后解压得到redis.conf

杀机:请保持官网和docker中redis版本一致,不同版本redis的配置文件可能不一样。
修改配置文件
开启redis验证 requirepass 123
在这里插入图片描述
允许redis外地连接
在这里插入图片描述
杀机:务必将daemonize yes注释起来,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败
在这里插入图片描述
开启redis数据持久化 appendonly yes
在这里插入图片描述

Redis Sentinel高可用集群

  • 搭建Redis集群

搭建一主两从环境,docker-compose.yml 配置如下:

version: '3.1'
services:
  master:
    restart: always
    image: redis
    container_name: redis-master
    ports:
      - 6379:6379

  slave1:
    restart: always
    image: redis
    container_name: redis-slave-1
    ports:
      - 6380:6379
    command: redis-server --slaveof redis-master 6379

  slave2:
    restart: always
    image: redis
    container_name: redis-slave-2
    ports:
      - 6381:6379
    command: redis-server --slaveof redis-master 6379
  • sentinel集群
  1. 我们至少需要创建三个 Sentinel 服务,docker-compose.yml 配置如下:
version: '3.1'
services:
  sentinel1:
    restart: always
    image: redis
    container_name: redis-sentinel-1
    ports:
      - 26379:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf

  sentinel2:
    restart: always
    image: redis
    container_name: redis-sentinel-2
    ports:
      - 26380:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf

  sentinel3:
    restart: always
    image: redis
    container_name: redis-sentinel-3
    ports:
      - 26381:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
  • 修改Sentinel 配置文件

需要三份 sentinel.conf 配置文件,在docker-compose.yml文件的同级目录下分别为 sentinel1.conf,sentinel2.conf,sentinel3.conf,配置文件内容相同,内容如下:

port 26379
dir /tmp
# 自定义集群名其中 127.0.0.1 为 redis-master 的 ip,6379 为 redis-master 的端口,2 为最小投票数(因为有 3Sentinel 所以可以设置成 2)
sentinel monitor mymaster 自己的redisip(注意这里没有冒号) 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
  • 查看集群是否生效

进入 Sentinel 容器,使用 Sentinel API 查看监控情况:

docker exec -it redis-sentinel-2 bash

redis-cli -p 26379

sentinel master mymaster

Zookeeper安装

docker search zookeeper
docker pull zookeeper
sudo docker run -it --name zookeeper -v /use/myzookeeper/conf:/conf-p 2181:2181-p 2888:2888-p 3888:3888--restart always -d zookeeper
docker exec -it bb2021d426bb /bin/bash

安装好后需向/conf内添加configuration.xsl,log4j.properties,zoo_sample.cfg这三个文件

GitLab安装

1. docker pull twang2218/gitlab-ce-zh
2. 创建/usr/local/docker/gitlab,
3. 在这个文件夹里边: vim docker-compose.yml内容如下:

https://blog.csdn.net/F_TimeOk/article/details/87861901去这个网址拷贝

version: '3'
services:
  web:
    image: 'twang2218/gitlab-ce-zh'
	restart: always
	hostname: '192.168.199.9'
	environment:
	  TZ: 'Asia/Shanghai'
	  GITLAB_OMNIBUS_CONFIG:
	    external_url 'http://192.168.199.9:8080'
		gitlab_rails['gitlab_shell_ssh_port'] = 2222
		unicorn['port'] = 8888
		nginx['listen_port'] = 8080
	ports:
	  - '8080:8080'
	  - '8443:443'
	  - '2222:22'
	volumes:
	  - /usr/local/docker/gitlab/config:/etc/gitlab
	  - /usr/local/docker/gitlab/data:/var/opt/gitlab
	  - /usr/local/docker/gitlab/logs:/var/log/gitlab
 4. docker-compose up
 5. 安装完成好进入浏览器输入地址即可进行操作,需要注意的的是一个步骤需要进行SSH免密登录设置,即使用SSH的方式拉取和推送项目:
  • ①生成ssh公钥,通过ssh-keygen工具生成,位置在Git安装目录下D:\git\Git\usr\bin进入后cmd,输入命令:ssh-keygen -t rsa -C “your_email@qq.com”,生成秘钥,如下
    在这里插入图片描述
  • ②进入如下目录:C:\Users\Administrator.ssh,打开生成的id_rsa.pub文件,复制所有内容。
    在这里插入图片描述
  • ③进入后粘贴刚刚的秘钥,修改账户即可。
  • ④进入tortoiseGit设置 ,这里默认为小乌龟的SSH链接Client不能用需要切换为Git的客户端:进入Git安装目录 /Git/usr/bin/ssh.exe
    在这里插入图片描述
  • ⑤这样就可以进行拉项目跟push项目了,不过会出现这样的情况需要输入密码(就是gitlab密码)这是因为在生成秘钥的时候输入了密码,即黑框中输密码时候,直接回车就行不要输入密码,这样到了这就不需要输入密码了。
    在这里插入图片描述

Nginx安装

  • /usr/local/docker下新建nginx目录
  • vim docker-compose.yml 内容:
version: '3.1'
services:
  nginx:
    restart: always
    image: nginx
    container_name: nginx
#每次新增一个server 就要新增映射端口
    ports:
      - 81:80
    volumes:
      - ./conf/nginx.conf:/etc/nginx/nginx.conf
      - ./wwwroot:/usr/share/nginx/wwwroot
  • 因为要操作nginx.conf文件,所以手动创建该文件:
mkdir conf

vim nginx.conf 内容如下:

# 启动进程,通常设置成和 CPU 的数量相等
worker_processes  1;

events {
    # epoll 是多路复用 IO(I/O Multiplexing) 中的一种方式
    # 但是仅用于 linux2.6 以上内核,可以大大提高 nginx 的性能
    use epoll;
    # 单个后台 worker process 进程的最大并发链接数
    worker_connections  1024;
}

http {
    # 设定 mime 类型,类型由 mime.type 文件定义
    include       mime.types;
    default_type  application/octet-stream;

    # sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
    # 必须设为 on,如果用来进行下载等应用磁盘 IO 重负载应用,可设置为 off,以平衡磁盘与网络 I/O 处理速度,降低系统的 uptime.
    sendfile        on;
    
    # 连接超时时间
    keepalive_timeout  65;
    # 设定请求缓冲
    client_header_buffer_size 2k;

    # 配置虚拟主机 192.168.75.145
    server {
	# 监听的ip和端口,配置 192.168.75.145:80
        listen       80;
	# 虚拟主机名称这里配置ip地址
        server_name  192.168.75.145;
	# 所有的请求都以 / 开始,所有的请求都可以匹配此 location
        location / {
#使用nginx解决跨域问题
add_header Access-Control-Allow-Origin  *;
                add_header Access-Control-Allow-Headers X-Requested-With;
                add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,PATCH,OPTIONS;

	    # 使用 root 指令指定虚拟主机目录即网页存放目录
	    # 比如访问 http://ip/index.html 将找到 /usr/local/docker/nginx/wwwroot/html80/index.html
	    # 比如访问 http://ip/item/index.html 将找到 /usr/local/docker/nginx/wwwroot/html80/item/index.html

            root   /usr/share/nginx/wwwroot/html80;
	    # 指定欢迎页面,按从左到右顺序查找
            index  index.html index.htm;
        }

    }
    # 配置虚拟主机 192.168.75.245
    server {
        listen       8080;
        server_name  192.168.75.145;

        location / {
            root   /usr/share/nginx/wwwroot/html8080;
            index  index.html index.htm;
        }
    }
}
  • docker-compose up 运行容器
  • 运行成功在数据卷 wwwroot中 mkdir html81 在其内部vim index.html

Nexus:Maven仓库管理工具安装

1. docker pull sonatype/nexus3
2. 进入/usr/local/docker创建mkdir nexus
3. cd nexus
4. vim docker-compose.yml
version: '3.1'
services:
  nexus:
    restart: always
    image: sonatype/nexus3
    container_name: nexus
    ports:
      - 8081:8081
    volumes:
      - /usr/local/docker/nexus/data:/nexus-data
  • 启动时如果出现权限问题可以使用:chmod 777 /usr/local/docker/nexus/data 赋予数据卷目录可读可写的权限
  • 安装完成进入网页后,进行登录用户名:admin,密码在容器内/opt/sonatype/sonatype-work/nexus3/admin.password 这个文件里,登录后进行修改密码即可。

配置认证信息

在 Maven settings.xml 中添加 Nexus 认证信息(servers 节点下):

这个文件可以通过cmd窗口输入:mvn -version,红框内就是文件位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-af12Gw9j-1603202943374)(RackMultipart20201020-4-1krv947_html_7c6ca16a46c008c7.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SeRIjypi-1603202943374)(RackMultipart20201020-4-1krv947_html_65babf98acd3408e.gif)]

这里注意id需要记住项目中的pom要用

<server>
  <id>nexus-releases</id>
  <username>admin</username>
  <password>mabin,08030055</password>
</server>

<server>
  <id>nexus-snapshots</id>
  <username>admin</username>
  <password>mabin,08030055</password>
</server>
  • Snapshots与Releases的区别

  • nexus-releases: 用于发布Release 版本

  • nexus-snapshots: 用于发布Snapshot 版本(快照版)

Release 版本与Snapshot 定义如下:

Release: 1.0.0/1.0.0-RELEASE

Snapshot: 1.0.0-SNAPSHOT
  • 在项目 pom.xml 中设置的版本号添加 SNAPSHOT 标识的都会发布为 SNAPSHOT 版本,没有 SNAPSHOT 标识的都会发布为 RELEASE 版本。
  • SNAPSHOT 版本会自动加一个时间作为标识,如:1.0.0-SNAPSHOT 发布后为变成 1.0.0-SNAPSHOT-20180522.123456-1.jar

配置自动化部署即将jar包上传至私服

在依赖管理项目的pom.xml 中添加如下代码:

<distributionManagement>
    <repository>
//这个id必须跟settings.xml 中的id一样
        <id>nexus-releases</id>
        <name>Nexus Release Repository</name>
//url 在nexus中查看
        <url>http://192.168.213.10:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>nexus-snapshots</id>
        <name>Nexus Snapshot Repository</name>
        <url>http://192.168.213.10:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

注意事项:

  • ID 名称必须要与 settings.xml 中Servers 配置的ID 名称保持一致。
  • 项目版本号中有 SNAPSHOT 标识的,会发布到Nexus Snapshots Repository, 否则发布到Nexus Release Repository,并根据ID 去匹配授权账号。

部署到仓库

idea点击terminal控制台

cd 要上传的项目名

mvn deploy

配置代理仓库,即在项目中引入 jar包

需要使用jar包的项目的pom中添加

<distributionManagement>
    <repository>
//这个id必须跟settings.xml 中的id一样
        <id>nexus-releases</id>
        <name>Nexus Release Repository</name>
//url 在nexus中查看
        <url>http://192.168.213.10:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>nexus-snapshots</id>
        <name>Nexus Snapshot Repository</name>
        <url>http://192.168.213.10:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

上传第三方jar包

Nexus 3.0 不支持页面上传,可使用 maven 命令:

如第三方JAR包:aliyun-sdk-oss-2.2.3.jar

mvn deploy:deploy-file 
  -DgroupId=com.aliyun.oss 
  -DartifactId=aliyun-sdk-oss 
  -Dversion=2.2.3 
  -Dpackaging=jar 
  -Dfile=D:\aliyun-sdk-oss-2.2.3.jar 
  -Durl=http://127.0.0.1:8081/repository/maven-3rd/ 
  -DrepositoryId=nexus-releases

注意事项:

  • 建议在上传第三方 JAR 包时,创建单独的第三方 JAR 包管理仓库,便于管理有维护。(maven-3rd)
  • -DrepositoryId=nexus-releases 对应的是 settings.xml 中 Servers 配置的 ID 名称。(授权)

dockerRegistry :docker仓库

  • 新建yml文件:/usr/local/docker/registry/docker-compose.yml
version: '3.1'
services:
  registry:
    image: registry
    restart: always
    container_name: registry
    ports:
      - 5000:5000
    volumes:
      - /usr/local/docker/registry/data:/var/lib/registry
  • Docker-compose up -d
  • docker ps 查看容器是否启动成功浏览器访问ip:5000/v2/
  • 在/etc/docker/daemon.json中增加如下内容:
{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ],
  "insecure-registries": [
    "自己的ip:5000"
  ]
}

之后重新启动服务。

$ sudo systemctl daemon-reload

$ sudo systemctl restart docker
  • 标记本地镜像并指向目标仓库(ip:port/image_name:tag,该格式为标记版本号)
docker tag nginx 192.168.75.133:5000/nginx
  • 提交镜像到仓库
docker push 192.168.75.133:5000/nginx
  • 查看全部镜像
curl -XGET http://192.168.75.133:5000/v2/\_catalog
  • 查看指定镜像
curl -XGET http://192.168.75.133:5000/v2/nginx/tags/list
  • 测试拉取镜像
先删除镜像
docker rmi nginx
docker rmi 192.168.75.133:5000/nginx
再拉取镜像
docker pull 192.168.75.133:5000/nginx

安装UI页面

yml里添加

 frontend:
    image: konradkleine/docker-registry-frontend:v2
    ports:
      - 80:80
    volumes:
      - ./certs/frontend.crt:/etc/apache2/server.crt:ro
      - ./certs/frontend.key:/etc/apache2/server.key:ro
    environment:
      - ENV_DOCKER_REGISTRY_HOST=centosIP
      - ENV_DOCKER_REGISTRY_PORT=5000	
docker-compose up

然后浏览器输入:自己IP,即可访问仓库页面

Rabbit消息队列

  • docker-compose.yml
version: '3.1'
services:
  rabbitmq:
    restart: always
    image: rabbitmq:management
    container_name: rabbitmq
    ports:
      - 5672:5672
      - 15672:15672
    environment:
      TZ: Asia/Shanghai
      RABBITMQ_DEFAULT_USER: rabbit
      RABBITMQ_DEFAULT_PASS: 123456
    volumes:
      - ./data:/var/lib/rabbitmq
  • 启动访问
docker-compose up -d

浏览器输入ip加端口访问:http://ip:15672

Apollo安装

RabbitMq安装

  • docker-compose
version: '3'
services:
  rabbitmq:
    image: rabbitmq:management
    container_name: rabbitmq
    restart: always
    hostname: myRabbitmq
    ports:
      - 15673:15672
      - 5673:5672
    volumes:
      - ./data:/var/lib/rabbitmq
    environment:
      - RABBITMQ_DEFAULT_USER=root
      - RABBITMQ_DEFAULT_PASS=root
  • 2.Ip:15672访问 用户名密码都为root

Nacos安装

  • docker-compose.yml
version: "2"
services:
  nacos:
    image: nacos/nacos-server:1.1.4
    Restart: always
    container_name: nacos
    environment:
    - MODE=standalone
    volumes:
    - /opt/nacos/logs:/home/nacos/logs
    - /opt/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
    - "8848:8848"
  • 数据库脚本
.
/*
.
.
SQLyog Ultimate v12.09 (64 bit)
.
.
MySQL - 5.6.22 : Database - nacos
.
.
*********************************************************************
.
.
*/
.
.
.
.
/*!40101 SET NAMES utf8 */;
.
.
.
/*!40101 SET SQL_MODE=''*/;
.
.
.
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
.
.
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
.
.
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
.
.
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
.
.
CREATE DATABASE /*!32312 IF NOT EXISTS*/`nacos` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
.
.
.
USE `nacos`;
.
.
.
/*Table structure for table `config_info` */
.
.
.
DROP TABLE IF EXISTS `config_info`;
.
.
.
CREATE TABLE `config_info` (
.
.
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
.
.
`data_id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'data_id',
.
.
`group_id` varchar(255) COLLATE utf8_bin DEFAULT NULL,
.
.
`content` longtext COLLATE utf8_bin NOT NULL COMMENT 'content',
.
.
`md5` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT 'md5',
.
.
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
.
.
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
.
.
`src_user` text COLLATE utf8_bin COMMENT 'source user',
.
.
`src_ip` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT 'source ip',
.
.
`app_name` varchar(128) COLLATE utf8_bin DEFAULT NULL,
.
.
`tenant_id` varchar(128) COLLATE utf8_bin DEFAULT '' COMMENT '租户字段',
.
.
`c_desc` varchar(256) COLLATE utf8_bin DEFAULT NULL,
.
.
`c_use` varchar(64) COLLATE utf8_bin DEFAULT NULL,
.
.
`effect` varchar(64) COLLATE utf8_bin DEFAULT NULL,
.
.
`type` varchar(64) COLLATE utf8_bin DEFAULT NULL,
.
.
`c_schema` text COLLATE utf8_bin,
.
.
PRIMARY KEY (`id`),
.
.
UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
.
.
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
.
.
.
/*Data for the table `config_info` */
.
.
.
insert into `config_info`(`id`,`data_id`,`group_id`,`content`,`md5`,`gmt_create`,`gmt_modified`,`src_user`,`src_ip`,`app_name`,`tenant_id`,`c_desc`,`c_use`,`effect`,`type`,`c_schema`) values (2,'auth-server.yml','DEFAULT_GROUP','captcha:\r\n server-addr: http://cm.shiwaixiangcun.cn\r\n\r\nauth-server: http://localhost:8081\r\nsecurity:\r\n oauth2:\r\n sso:\r\n login-path: /login\r\n client:\r\n user-authorization-uri: ${auth-server}/oauth/authorize\r\n access-token-uri: ${auth-server}/oauth/token\r\n resource:\r\n token-info-uri: ${auth-server}/oauth/check_token\r\n logout-url: ${auth-server}/oauth/logout\r\n\r\nfile:\r\n server:\r\n host: http://cm.shiwaixiangcun.cn/\r\nresource:\r\n server:\r\n host: http://resource.shiwaixiangcun.cn/ \r\n\r\ntx-lcn:\r\n client:\r\n manager-address: 192.168.8.222:8070\r\n ribbon:\r\n loadbalancer:\r\n dtx:\r\n enabled: true ','7430ea63af66417e4ab5c3f64005426c','2019-11-30 13:51:24','2020-01-08 11:37:44',NULL,'0:0:0:0:0:0:0:1','','','null',NULL,NULL,'yaml',NULL);
.
.
.
/*Table structure for table `config_info_aggr` */
.
.
.
DROP TABLE IF EXISTS `config_info_aggr`;
.
.
.
CREATE TABLE `config_info_aggr` (
.
.
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
.
.
`data_id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'data_id',
.
.
`group_id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'group_id',
.
.
`datum_id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'datum_id',
.
.
`content` longtext COLLATE utf8_bin NOT NULL COMMENT '内容',
.
.
`gmt_modified` datetime NOT NULL COMMENT '修改时间',
.
.
`app_name` varchar(128) COLLATE utf8_bin DEFAULT NULL,
.
.
`tenant_id` varchar(128) COLLATE utf8_bin DEFAULT '' COMMENT '租户字段',
.
.
PRIMARY KEY (`id`),
.
.
UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
.
.
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
.
.
.
/*Data for the table `config_info_aggr` */
.
.
.
/*Table structure for table `config_info_beta` */
.
.
.
DROP TABLE IF EXISTS `config_info_beta`;
.
.
.
CREATE TABLE `config_info_beta` (
.
.
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
.
.
`data_id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'data_id',
.
.
`group_id` varchar(128) COLLATE utf8_bin NOT NULL COMMENT 'group_id',
.
.
`app_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT 'app_name',
.
.
`content` longtext COLLATE utf8_bin NOT NULL COMMENT 'content',
.
.
`beta_ips` varchar(1024) COLLATE utf8_bin DEFAULT NULL COMMENT 'betaIps',
.
.
`md5` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT 'md5',
.
.
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
.
.
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
.
.
`src_user` text COLLATE utf8_bin COMMENT 'source user',
.
.
`src_ip` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT 'source ip',
.
.
`tenant_id` varchar(128) COLLATE utf8_bin DEFAULT '' COMMENT '租户字段',
.
.
PRIMARY KEY (`id`),
.
.
UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
.
.
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
.
.
.
/*Data for the table `config_info_beta` */
.
.
.
/*Table structure for table `config_info_tag` */
.
.
.
DROP TABLE IF EXISTS `config_info_tag`;
.
.
.
CREATE TABLE `config_info_tag` (
.
.
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
.
.
`data_id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'data_id',
.
.
`group_id` varchar(128) COLLATE utf8_bin NOT NULL COMMENT 'group_id',
.
.
`tenant_id` varchar(128) COLLATE utf8_bin DEFAULT '' COMMENT 'tenant_id',
.
.
`tag_id` varchar(128) COLLATE utf8_bin NOT NULL COMMENT 'tag_id',
.
.
`app_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT 'app_name',
.
.
`content` longtext COLLATE utf8_bin NOT NULL COMMENT 'content',
.
.
`md5` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT 'md5',
.
.
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
.
.
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
.
.
`src_user` text COLLATE utf8_bin COMMENT 'source user',
.
.
`src_ip` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT 'source ip',
.
.
PRIMARY KEY (`id`),
.
.
UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
.
.
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
.
.
.
/*Data for the table `config_info_tag` */
.
.
.
/*Table structure for table `config_tags_relation` */
.
.
.
DROP TABLE IF EXISTS `config_tags_relation`;
.
.
.
CREATE TABLE `config_tags_relation` (
.
.
`id` bigint(20) NOT NULL COMMENT 'id',
.
.
`tag_name` varchar(128) COLLATE utf8_bin NOT NULL COMMENT 'tag_name',
.
.
`tag_type` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT 'tag_type',
.
.
`data_id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'data_id',
.
.
`group_id` varchar(128) COLLATE utf8_bin NOT NULL COMMENT 'group_id',
.
.
`tenant_id` varchar(128) COLLATE utf8_bin DEFAULT '' COMMENT 'tenant_id',
.
.
`nid` bigint(20) NOT NULL AUTO_INCREMENT,
.
.
PRIMARY KEY (`nid`),
.
.
UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
.
.
KEY `idx_tenant_id` (`tenant_id`)
.
.
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
.
.
.
/*Data for the table `config_tags_relation` */
.
.
.
/*Table structure for table `group_capacity` */
.
.
.
DROP TABLE IF EXISTS `group_capacity`;
.
.
.
CREATE TABLE `group_capacity` (
.
.
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
.
.
`group_id` varchar(128) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
.
.
`quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
.
.
`usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
.
.
`max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
.
.
`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
.
.
`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
.
.
`max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
.
.
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
.
.
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
.
.
PRIMARY KEY (`id`),
.
.
UNIQUE KEY `uk_group_id` (`group_id`)
.
.
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
.
.
.
/*Data for the table `group_capacity` */
.
.
.
/*Table structure for table `his_config_info` */
.
.
.
DROP TABLE IF EXISTS `his_config_info`;
.
.
.
CREATE TABLE `his_config_info` (
.
.
`id` bigint(64) unsigned NOT NULL,
.
.
`nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
.
.
`data_id` varchar(255) COLLATE utf8_bin NOT NULL,
.
.
`group_id` varchar(128) COLLATE utf8_bin NOT NULL,
.
.
`app_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT 'app_name',
.
.
`content` longtext COLLATE utf8_bin NOT NULL,
.
.
`md5` varchar(32) COLLATE utf8_bin DEFAULT NULL,
.
.
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
.
.
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
.
.
`src_user` text COLLATE utf8_bin,
.
.
`src_ip` varchar(20) COLLATE utf8_bin DEFAULT NULL,
.
.
`op_type` char(10) COLLATE utf8_bin DEFAULT NULL,
.
.
`tenant_id` varchar(128) COLLATE utf8_bin DEFAULT '' COMMENT '租户字段',
.
.
PRIMARY KEY (`nid`),
.
.
KEY `idx_gmt_create` (`gmt_create`),
.
.
KEY `idx_gmt_modified` (`gmt_modified`),
.
.
KEY `idx_did` (`data_id`)
.
.
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
.
.
.
/*Data for the table `his_config_info` */
.
.
.
/*Table structure for table `roles` */
.
.
.
DROP TABLE IF EXISTS `roles`;
.
.
.
CREATE TABLE `roles` (
.
.
`username` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
.
.
`role` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL
.
.
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
.
.
.
/*Data for the table `roles` */
.
.
.
insert into `roles`(`username`,`role`) values ('nacos','ROLE_ADMIN');
.
.
.
/*Table structure for table `tenant_capacity` */
.
.
.
DROP TABLE IF EXISTS `tenant_capacity`;
.
.
.
CREATE TABLE `tenant_capacity` (
.
.
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
.
.
`tenant_id` varchar(128) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Tenant ID',
.
.
`quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
.
.
`usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
.
.
`max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
.
.
`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
.
.
`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
.
.
`max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
.
.
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
.
.
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
.
.
PRIMARY KEY (`id`),
.
.
UNIQUE KEY `uk_tenant_id` (`tenant_id`)
.
.
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
.
.
.
/*Data for the table `tenant_capacity` */
.
.
.
/*Table structure for table `tenant_info` */
.
.
.
DROP TABLE IF EXISTS `tenant_info`;
.
.
.
CREATE TABLE `tenant_info` (
.
.
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
.
.
`kp` varchar(128) COLLATE utf8_bin NOT NULL COMMENT 'kp',
.
.
`tenant_id` varchar(128) COLLATE utf8_bin DEFAULT '' COMMENT 'tenant_id',
.
.
`tenant_name` varchar(128) COLLATE utf8_bin DEFAULT '' COMMENT 'tenant_name',
.
.
`tenant_desc` varchar(256) COLLATE utf8_bin DEFAULT NULL COMMENT 'tenant_desc',
.
.
`create_source` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT 'create_source',
.
.
`gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
.
.
`gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
.
.
PRIMARY KEY (`id`),
.
.
UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
.
.
KEY `idx_tenant_id` (`tenant_id`)
.
.
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
.
.
.
/*Data for the table `tenant_info` */
.
.
.
/*Table structure for table `users` */
.
.
.
DROP TABLE IF EXISTS `users`;
.
.
.
CREATE TABLE `users` (
.
.
`username` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
.
.
`password` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL,
.
.
`enabled` tinyint(1) NOT NULL,
.
.
PRIMARY KEY (`username`)
.
.
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
.
.
.
/*Data for the table `users` */
.
.
.
insert into `users`(`username`,`password`,`enabled`) values ('nacos','$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu',1);
.
.
.
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
.
.
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
.
.
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
.
.
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
.

Mysql8 驱动问题
1.首先下载一个mysql8驱动jar包(mysql-connector-java-8.0.15.jar),放到/home/nacos/plugins/mysql下
2./home/nacos/conf/application.properties中添加如下

spring.datasource.platform=mysql 
db.num=1 db.url.0=jdbc:mysql://localhost:3306/nacos_config?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC 
db.user=root 
db.password=123456

Sentinel

docker-compose.yml

version: '3'
services:
  sentinel:
    image: bladex/sentinel-dashboard
    container_name: sentinel
    ports:
      - 8858:8858

Docker安装

Centos7突然ens33没有int属性了

[root@mina0 hadoop]# systemctl stop NetworkManager
[root@mina0 hadoop]# systemctl disable NetworkManager
[root@mina0 hadoop]# systemctl restart network

安装虚拟机和centerOS系统或者Ubuntu

http://mirrors.aliyun.com/centos/7/isos/x86_64/这个网站下载centerOS系统DVD版方便安装CentOS-7-x86_64-DVD-1908.iso这个。

  1. 新建虚拟机建立一个空的稍后再添加操作系统

  2. 将centos镜像放到清楚的位置上

  3. 双击设备打开配置页面导入指定镜像文件
    在这里插入图片描述
    在这里插入图片描述

  4. 网络适配器选择桥接模式,为了像局域网一样连接虚拟机。
    在这里插入图片描述

  5. 点击开启此虚拟机选择install centos linux 7
    在这里插入图片描述

  6. 选择中文—>下图这种有感叹号的要双击打开点击完成—>设置root密码
    在这里插入图片描述

  7. 重启系统打开后进行登录输入账号密码登录后如下,输入ip addr 发现ens33内没有inet这个属性,这就导致我们没办法通过ip地址连接虚拟机接下来查看ens33网卡的配置:vi /etc/sysconfig/network-scripts/ifcfg-ens33 注意vi后边加空格进入文档编辑页面
    在这里插入图片描述

  8. 按i 进入输入模式,修改红框内的NO改为yes,然后ESC+:wq(保存退出)。然后重启网络服务:sudo service network restart 然后再次输入ip addr 就有了innet
    在这里插入图片描述

安装Xshel

安装Docker

查看虚拟机系统:cat /etc/redhat-release

https://www.cnblogs.com/yufeng218/p/8370670.html根据网页上内容走。

Docker配置镜像加速器

打开阿里云镜像加速器这个网址 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

ps -ef|grep docker 查看docker是否应用指定镜像加速器

1. vim /etc/docker/daemon.json
	{"registry-mirrors": ["https://1yatpa35.mirror.aliyuncs.com"]
	}
1. systemctl daemon-reload
2. systemctl restart docker
3. docker run hello-world
  • run 会首先从本地找没有的话从hub上pull,hub上也没有就会回复没有这个image。
    在这里插入图片描述

DockerCompose

DockerCompose是Docker官方编排项目之一,负责快速的部署分布式应用。

Compose中有两个重要概念:

服务:一个应用的容器,实际上可以包括若干运行相同镜像的容器实例

项目:由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义

Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
compose项目由python编写,实现上调用了docker服务提供的API来对容器进行管理,因此只要所操作的平台支持dockerAPI,就可以在其上利用compose来进行编排管理。

安装DockerCompose

curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose   赋予权限
docker-compose version   查看是安装完成 

在这里插入图片描述

Docker-compose常用命令

声明:docker-compose所有命令必须在有docker-compose.yml的目录下进行

命令说明
docker-compose -f ./xxx.yml up -d执行命令启动容器
docker-compose down删除所启动的容器
docker-compose up -d守护态启动容器
docker-compose logs tomcat查看容器日志

docker-compose.yml模板

version: '3'
  services:
  #服务名 自己起
    tomcat:
	  restart: always
	  image: tomcat
	  #容器名 自己起
	  container_name: tomcat
	  ports:
	    - 8080:8080
	  volumes:
	    - /usr/local/docker/tomcat/RooT:/usr/local/tomcat/webapps/RooT
	mysql:
      restart: always
      image: mysql
	  container_name: mysql
	  ports: 
	    - 3306:3306
	  environment:
	    TZ: Asia/Shanghai
		MYSQL_ROOT_PASSWORD: 123456
	  command:
	    --character-set-server=utf8mb4
		--collation-server=utf8mb4_general_ci
		--explicit_defaults_for_timestamp=true
		--lower_case_table_name=1
	--max_allowed_packet=128		 --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
	  volumes:
	    - mysql-data:/var/lib/mysql
	#统一管理数据源的地方
	volumes:
	  mysql-data:

将jar包以Dockerfile部署

  1. 在要部署的项目内部建立目录:docker。
  2. 将要部署的jar包拷贝到docker目录下,命令例子为:(其中最后一位.为当前目录) cp …/target/itoken-config-1.0.0-SNAPSHOT.jar .
  3. 在docker目录内部:vim Dockerfile,内容如下:
FROM openjdk:8-jre

RUN mkdir /app

COPY itoken-config-1.0.0-SNAPSHOT.jar /app/

CMD java -jar /app/itoken-config-1.0.0-SNAPSHOT.jar --spring.profiles.active=prod

EXPOSE 8888
  1. 生成镜像:docker build -t 192.168.213.10:5000/itoken-config .
  2. 运行测试:docker run -p 8888:8888 itoken-config
  3. docker-compose.yml启动:
version: '3.1'
services:
  itoken-config:
    restart: always
    image: itoken-config
    container_name: itoken-config
    ports: 
      - 8888:8888 
  1. 集群启动方式:
version: '3.1'
services:
  itoken-eureka-1:
    restart: always
    image: itoken-eureka
    container_name: itoken-eureka-1
    ports:
      - 8761:8761

  itoken-eureka-2:
    restart: always
    image: itoken-eureka
    container_name: itoken-eureka-2
    ports: 
      - 8861:8761  
 
  itoken-eureka-3:
    restart: always
    image: itoken-eureka
    container_name: itoken-eureka-3
    ports: 
      - 8961:8761  

认识docker

是什么?为什么会产生Docker

由于开发与运维之间直接传递代码时,有可能会因为环境的问题导致程序在运维人员手中无法正常运行,这是Docker应运而生它就是将代码与代码环境(代码、数据、配置、系统)一起传递给运维。

docker 理念:go语言写的,一次封装,到处运行。

解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

Docker 三大要素:镜像,容器,仓库

总结:
Docker本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可应付的运行环境,这个打包好的运行环境就是image镜像文件。。只有通过这个镜像文件才能生成Docker容器。Image文件可以看做是容器的模板。Docker根据image文件生成容器的实例。同一个image文件可以生成多个同时运行的容器实例。仓库就是存放了一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候从仓库拉下来就可以了。
镜像
就是一个只读的模板,镜像可以同来创建Docker容器,一个镜像可以创建多个容器。Person p = new person(); person类就是镜像,person p就是容器,根据镜像可以创建多个容器就像根据类可以创建多个对象。

DockerJava面向对象
容器对象
镜像
容器
Docker利用容器独立运行一个或多个应用,容器是用镜像创建的实例。
它可以被启动、开始、停止、删除。每个容器相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的
仓库:
仓库是几种存放镜像文件的场所。
仓库和仓库注册服务器是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含多个镜像,每个镜像有不同的标签。
仓库分为公开仓库和私有仓库两种形式
最大的公开仓库是Docker Hub存放数量庞大的镜像供用户下载,不过由于是国外的网站很慢,所以一般用不到,国内公开仓库包括阿里云,网易云等。

能干嘛?

虚拟机缺点

  1. 资源占用多
  2. 冗余步骤多
  3. 启动慢

Docker 与传统虚拟化方式的不同之处:

  1. 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该操作系统上再运行所需应用进程。
  2. 容器内的进程是直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更轻便。
  3. 每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源,降低耦合度。

开发/ 运维(devops)

  1. 更快速的应用应付和部署
  2. 更便捷的升级和扩缩容
  3. 更简单的系统运维
  4. 更有效的计算资源利用

去哪下?

Docker 官网

英文:http://www.docker.com

中文:http://www.docker-cn.com/

常见原理性问题

使用镜像 centos :latest 以后台模式启动一个容器: docker run -d centos

问题:启动后使用命令:docker ps -a 进行查看,会发现容器已经退出

原因:Docker容器后台运行就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命令(比如运行top、tail),就是会自动退出的

这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下我们配置启动服务只需要启动相应的service即可,例如:service nginx start

但是这样做nginx为后台进程模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀因为他觉得他没事可做,所以最佳的解决方案是,将你要运行的程序以前台进程的形式运行。

docker镜像是什么?

镜像是一种轻量级、可执行的独立软件包。用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

docker为什么要要采用分层结构呢?

最大的一个好处就是–共享资源,
比如:有多个镜像都从相同的base镜像构建而来,那么宿主机只需要在磁盘上保存一份base镜像,同时内存中也只需要加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

Docker镜像的特点

docker镜像都是只读的。
当容器启动时,每一个新的可写层都被加载到镜像的顶部。
这一层通常被称作"容器层","容器层"之下的都叫"镜像层"。

Docker与虚拟机(vm)区别

Docker容器虚拟机(vm)
操作系统与宿主机共享OS宿主机OS上运行虚拟机OS
存储大小镜像小,便于存储与传输镜像庞大(vmdk、vdi等)
运行性能几乎无额外性能损失操作系统额外的CPU、内存消耗
移植性轻便、灵活、适用于Linux笨重,与虚拟机技术耦合度高
硬件亲和性面向软件开发者面向硬件运维者
部署速度快速,秒级较慢,10S以上

Docker镜像常用命令

帮助命令描述
docker version
docker info
docker --help查看所有帮助
docker images查看本机镜像
docker images -a列出本地所有镜像(包括中间映像层)
docker images -q只显示镜像ID
docker images --digests显示镜像的摘要信息
docker images --no-trunc显示完整的镜像信息
docker search -s 30 tomcat去hub上查找点赞数大于30的tomcat镜像
docker pull tomcat 等价于docker pull tomcat:latest不写版本号默认拉latest版本
docker rmi -f hello-world强制删除helloworld镜像
docker rmi -f $(docker images -qa)删除所有镜像
docker ps查看当前docker上所有运行的镜像
docker ps -a当前所有正在运行的容器+历史上运行过的
docker ps -l显示最近创建的容器
docker ps -n +数字显示最近n个创建的容器
docker ps -q静默模式,只显示容器编号
docker ps --no-trunc不截断输出
docker image prune删除所有的虚悬镜像
docker cp 镜像名:/etc/mysql .复制mysql容器中的/etc/mysql到当前目录
docker logs 容器名或容器ID查看容器启动日志
docker logs -f 容器名或容器ID持续监控容器状态

Docker容器命令

docker pull centos从阿里云pull下来centos镜像
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]OPTIONS说明: --name="容器新名字":为容器指定一个名称; -d:后台运行容器,并返回容器ID,即启动守护式容器;-i: 以交互模式运行容器,通常与-t同时使用; -t:为容器重新分配一个伪输入终端,通常与-i同时使用; -P:随机端口映射 -p:指定端口映射具体操作–启动交互式容器:docker run -it --name 起的别名镜像名
1. exit 容器停止退出 2. Ctrl+p+q 容器不停止退出退出容器
docker start容器ID/容器名启动容器
docker restart 容器ID/容器名重启容器
docker stop 容器ID/容器名停止容器(类似于手动关机)
docker kill 容器ID/容器名强制停止容器(类似于电脑没电了自动关机)
docker rm 容器ID docker rm -f 强制删除即使仍在运行中一次性删除多个容器:docker rm -f $(docker ps -a -q)删除已停止的容器
docker run -d 容器名启动守护式容器
docker logs -f -t --tail 容器ID查看容器日志
docker top 容器ID查看容器内运行的进程
docker inspect 容器ID查看容器内部细节
docker exec -it 容器ID bash进入正在运行的容器并以命令行交互
docker attach 容器ID重新进入Attach与exec区别:上述两个区别:attach直接进入容器启动命令的终端不会启动新的进程;exec是在容器中打开新的终端,并且可以启动新的进程,即在终端操作容器内部
docker cp 容器ID:容器内路径目的主机路径从容器上拷贝文件到主机上
docker commit -m="提交的描述信息" -a="作者" 容器ID要创建的目标镜像名:[标签名]实例:docker commit -a="马斌" -m="tomcat without docs" 容器ID mytomcat:1.2docker提交容器副本使之成为一个新的镜像
docker run -it -p 8080:8080 tomcat-p主机端口:docker容器端口docker run -it -P tomcat-P随机分配端口下载tomcat镜像到本地并成功运行
docker update 容器ID --restart=no/alwaysdocker 设置容器自动重启与否

容器内无法使用vim

输入如下指令即可

apt-get update

apt-get install vim

防火墙操作

CentOS7使用firewalld打开关闭防火墙与端口

1、firewalld的基本使用

启动:systemctl start firewalld

查看状态:systemctl status firewalld

停止:systemctl disable firewalld

禁用:systemctl stop firewalld

2.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。

启动一个服务:systemctl start firewalld.service

关闭一个服务:systemctl stop firewalld.service

重启一个服务:systemctl restart firewalld.service

显示一个服务的状态:systemctl status firewalld.service

在开机时启用一个服务:systemctl enable firewalld.service

在开机时禁用一个服务:systemctl disable firewalld.service

查看服务是否开机启动:systemctl is-enabled firewalld.service

查看已启动的服务列表:systemctl list-unit-files|grep enabled

查看启动失败的服务列表:systemctl --failed

3.配置firewalld-cmd

查看版本:firewall-cmd --version

查看帮助:firewall-cmd --help

显示状态:firewall-cmd --state

查看所有打开的端口:firewall-cmd --zone=public --list-ports

更新防火墙规则:firewall-cmd --reload

查看区域信息: firewall-cmd --get-active-zones

查看指定接口所属区域:firewall-cmd --get-zone-of-interface=eth0

拒绝所有包:firewall-cmd --panic-on

取消拒绝状态:firewall-cmd --panic-off

查看是否拒绝:firewall-cmd --query-panic

那怎么开启一个端口呢

添加
firewall-cmd --zone=public --add-port=80/tcp --permanent (–permanent永久生效,没有此参数重启后失效)
重新载入
firewall-cmd --reload
查看
firewall-cmd --zone= public --query-port=80/tcp
删除
firewall-cmd --zone= public --remove-port=80/tcp --permanent

容器数据卷

1. 是什么?

先来看看docker的概念:将运用于运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的要求希望是持久化的,容器之间希望有可能共享数据

Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后数据也就没有了

所以为了能保存数据在docker中我们使用卷。

1. 能干嘛?

①容器的持久化和容器间继承

②共享数据

③容器与卷直接互通有无

卷就是目录或文件,存在于一个或多个容器中,由docker挂在到容器,但不属于联合文件系统,因此能够绕过Union File System提供的一些用于持久存储或共享数据的特性:

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

特点:

  1. 数据卷可在容器之间共享或重用数据
  2. 卷中的更改可以直接生效
  3. 数据卷中更改不会包含在镜像的更新中
  4. 数据卷的声明周期一直持续到没有容器使用为止。

- 容器内添加数据卷两种方式

直接命令添加:命令:docker run -it -v /宿主机绝对路径目录:/容器内目录镜像名

查看数据卷是否挂载成功docker inspect+容器名

容器和宿主机之间数据共享

容器停止退出后,主机修改后数据是否同步:完全同步

命令带权限:docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

加上ro就只有宿主机可以进行读写操作卷只能进行读的操作

DockerFile添加:根目录下新建mydocker文件夹并进入

可在dockerfile中使用volume指令来给镜像添加一个或多个数据卷:volume["/dataValumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"] 说明:出于对可移植和分享的考虑,用-v主机目录:容器目录这种方法不能够直接在DockerFile中实现。由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。

File构建:

#volume test
  FROM centos
  VOLUME [/dataVolumeContainer1”,/dataVolumeContainer2”]
  CMD echo “finished,---------success1”
  CMD /bin/bash

Build后生成镜像:

docker build -f /mydocker/DockerFIle -t Mycentos

Run容器:

docker run -it 生成的image

通过上述步骤,容器内的卷目录地址已经知道对应的主机目录地址在哪?docker inspect 容器ID 可以查看默认卷目录地址

主机对应默认地址

如果生成的镜像不能读写run的时候:

docker run -it -v /host:/docker --privileged=true 镜像名

-容器间传递共享

docker run -it --name dc01 centos01

docker run -it --name dc02 --volumes-from dc01 centos01

容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。

DockerFile解析

1.是什么?
DockerFile是用来构建docker镜像的构建文件,是由一系列命令和参数构成的脚本。
构建三步骤

1.编写dockerfile文件
2.docker build
3.docker run

2.docker 解析

  • (1)dockerfile内容基础知识:
1.每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2.指令按照从上到下顺序执行
3.#表示注释
4.每条指令都会创建一个新的镜像层,并对镜像进行提交
  • (2)docker执行dockerfile的大致流程
1.docker从基础镜像运行一个容器
2.执行一条指令并对容器做出修改
3.执行类似docker commit的操作提交一个新的镜像层
4.docker再基于刚提交的镜像运行一个新容器
5.执行dockerfile中的下一条指令直到所有指令都执行完成
  • (3)从应用软件的角度来看,dockerfile、docker镜像与docker容器分别代表软件的三个不同阶段
Dockerfile 是软件的原材料
②Docker镜像是软件的交付品
③Docker容器可以认为是软件的运行态
Dockerfile面向开发,docker镜像成为交付标准,docker容器则涉及部署与运维,三者缺一不可,合力充当docker体系的基石。

Dockerfile指令

在这里插入图片描述

FROM

基础镜像,当前新镜像是基于哪个镜像

MAINTAINER

镜像维护者的姓名和邮箱地址

RUN

容器构建时候需要运行的命令

EXPOSE

容器对外暴露的端口

WORKDIR

指定在容器创建后,终端默认登录进来的工作目录,一个落脚点

ENV

用来在构建镜像过程中设置环境变量

ADD

将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包

COPY

类似于add拷贝文件和目录到镜像中

VOLUME

容器数据卷,用于数据保存和持久化工作

CMD

指定容器启动时要运行的命令

DockeFile中可以有多个CMD命令,但是只有最后一个生效,CMD会被docker run之后的参数替换

ENTRYPOINT

指定一个容器启动时要运行的命令

Entrypoint的目的和cmd一样,都是在指定容器启动程序及参数,cmd在执行命令时会覆盖原本的参数,替换为终端命令中的参数,entrypoint会追加。

ONBUILD

当构建一个被集成的dockerfile时运行命令,父镜像在被子镜像继承后父镜像的onbuild被触发

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

base 西安内推私信

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值