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;

查看用户信息

docker 笔记整理_第1张图片

  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.1'
services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3306:3306
    volumes:
      - ./data:/var/lib/mysql

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 为最小投票数(因为有 3 台 Sentinel 所以可以设置成 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 “[email protected]”,生成秘钥,如下
    docker 笔记整理_第2张图片
  • ②进入如下目录:C:\Users\Administrator.ssh,打开生成的id_rsa.pub文件,复制所有内容。
    docker 笔记整理_第3张图片
  • ③进入后粘贴刚刚的秘钥,修改账户即可。
  • ④进入tortoiseGit设置 ,这里默认为小乌龟的SSH链接Client不能用需要切换为Git的客户端:进入Git安装目录 /Git/usr/bin/ssh.exe
    docker 笔记整理_第4张图片
  • ⑤这样就可以进行拉项目跟push项目了,不过会出现这样的情况需要输入密码(就是gitlab密码)这是因为在生成秘钥的时候输入了密码,即黑框中输密码时候,直接回车就行不要输入密码,这样到了这就不需要输入密码了。
    docker 笔记整理_第5张图片

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,红框内就是文件位置

docker 笔记整理_第6张图片

这里注意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. 双击设备打开配置页面导入指定镜像文件
    docker 笔记整理_第7张图片
    docker 笔记整理_第8张图片

  4. 网络适配器选择桥接模式,为了像局域网一样连接虚拟机。
    docker 笔记整理_第9张图片

  5. 点击开启此虚拟机选择install centos linux 7
    docker 笔记整理_第10张图片

  6. 选择中文—>下图这种有感叹号的要双击打开点击完成—>设置root密码
    docker 笔记整理_第11张图片

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

  8. 按i 进入输入模式,修改红框内的NO改为yes,然后ESC+:wq(保存退出)。然后重启网络服务:sudo service network restart 然后再次输入ip addr 就有了innet
    docker 笔记整理_第13张图片

安装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。
    docker 笔记整理_第14张图片

DockerCompose

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

Compose中有两个重要概念:

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

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

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

安装DockerCompose

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

在这里插入图片描述

Docker-compose常用命令

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

docker-compose up 执行命令启动容器
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就是容器,根据镜像可以创建多个容器就像根据类可以创建多个对象。

Docker Java面向对象
容器 对象
镜像

容器
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.2 docker提交容器副本使之成为一个新的镜像
docker run -it -p 8080:8080 tomcat-p主机端口:docker容器端口docker run -it -P tomcat-P随机分配端口 下载tomcat镜像到本地并成功运行
docker update 容器ID --restart=no/always docker 设置容器自动重启与否

容器内无法使用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指令

docker 笔记整理_第15张图片

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被触发

你可能感兴趣的:(学习笔记,运维,docker,docker-compose)