总结一下Docker常用镜像 , 容器以及部署命令

docker常用命令

拉取镜像

docker pull ${image}:${version} 如果不写version默认为latest

查看日志

docker logs ${container}

docker logs -f ${container} 持续查看容器日志

进入容器内部

docker exec -it ${container} /bin/bash

设置docker自动启动

systemctl enable docker.service

设置容器自动启动

docker update ${container} --restart=always

docker常用容器部署命令

注意 , 如果使用-v 参数进行主机与容器的数据挂载 , 需要在主机里面提前创建好对应的目录 , 否则创建容器失败

举例

这里主机中并没有 /mydata目录, 因此创建容器失败

1
2
3
4
5
6
7
8
[root@192 usr]# docker run --restart=always -d \
> -v /mydata/mysql/conf.d/my.cnf:/etc/mysql/my.cnf \
> -v/mydata/mysql/logs:/logs \
> -v /mydata/mysql/data/mysql:/var/lib/mysql \
> -p 3306:3306 --name mysqltest \
> -e MYSQL_ROOT_PASSWORD=root mysql:5.7
a0c1120e96b2d8b124e8c1b325f3518c21d240aca4a75c1739f0c7ffb5092847
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/mydata/mysql/conf.d/my.cnf" to rootfs at "/etc/mysql/my.cnf": mount /mydata/mysql/conf.d/my.cnf:/etc/mysql/my.cnf (via /proc/self/fd/6), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.

MySQL

A

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mkdir /mydata/mysql/conf.d/my.cnf;
mkdir /mydata/mysql/logs;
mkdir /mydata/mysql/data/mysql;

docker run \
--name mysql \
-d \
--restart=always \
-v /mydata/mysql/conf.d/my.cnf:/etc/mysql/my.cnf \
-v /mydata/mysql/logs:/logs \
-v /mydata/mysql/data/mysql:/var/lib/mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-d \
mysql:${version}

注释版

1
2
3
4
5
6
7
8
9
10
11
docker run \
--name mysql \
-d \
--restart=always \ #设置自动启动
-v /mydata/mysql/conf.d/my.cnf:/etc/mysql/my.cnf \ # 挂载MySQL配置文件目录
-v /mydata/mysql/logs:/logs \ # 挂载MySQL日志目录
-v /mydata/mysql/data/mysql:/var/lib/mysql \ # 挂载MySQL 数据目录
-p 3306:3306 \ # 主机与容器端口映射
-e MYSQL_ROOT_PASSWORD=root \ # MySQL 密码
-d \ # 后台运行容器并返回容器id
mysql:${version}

Elasticsearch

创建目录

mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
echo "http.host: 0.0.0.0" >/mydata/elasticsearch/config/elasticsearch.yml

将mydata/elasticsearch/文件夹中文件都可读可写
chmod -R 777 /mydata/elasticsearch/

启动容器

一定要注意提前创建好目录

  • -Xms64m -Xmx512m 设置最小和最大堆大小为64M 512M
1
2
3
4
5
6
7
8
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
--restart=always \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:${version}
1
2
3
4
5
6
docker run \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://${VirtualMachineIP}:9200 \
--restart=always \
-p 5601:5601 \
-d kibana:7.6.2

Nginx

  • 随便启动一个nginx实例,只是为了复制出配置

    1
    2
    docker pull nginx:1.10;
    docker run -p 8081:80 --name nginx -d nginx:1.10
  • 将容器内的配置文件拷贝到/mydata/nginx/conf/ 下

    1
    2
    3
    4
    5
    6
    7
    mkdir -p /mydata/nginx/html
    mkdir -p /mydata/nginx/logs
    mkdir -p /mydata/nginx/conf
    docker container cp nginx:/etc/nginx . #拷贝到当前文件夹
    #由于拷贝完成后会在config中存在一个nginx文件夹,所以需要将它的内容移动到conf中
    mv /mydata/nginx/conf/nginx/* /mydata/nginx/conf/
    rm -rf /mydata/nginx/conf/nginx
  • 终止原容器:

    1
    docker stop nginx
  • 执行命令删除原容器:

    1
    docker rm nginx
  • 创建新的Nginx,执行以下命令

    1
    2
    3
    4
    5
    6
    7
    8
    docker run \
    -p 80:80 \
    --name nginx \
    --restart=always \
    -v /mydata/nginx/html:/usr/share/nginx/html \
    -v /mydata/nginx/logs:/var/log/nginx \
    -v /mydata/nginx/conf/:/etc/nginx \
    -d nginx:1.10
  • 设置开机启动nginx

    1
    docker update nginx --restart=always
  • 创建*/mydata/nginx/html/index.html*文件,测试是否能够正常访问

    1
    echo '<h2>hello nginx!</h2>' >/mydata/nginx/html/index.html

    访问:http://${VirtualMachineIP}/index.html

Redis

创建配置文件

1
2
3
mkdir -p /mydata/redis
touch /mydata/redis/redis.conf
mkdir -p /mydata/redis/data

docker hub官方文档教程提到redis.conf , docker-redis默认没有配置文件,自己在宿主机建立后挂载映射

下面以6.2.6版本redis 示例, 配置redis.conf

A

https://raw.githubusercontent.com/redis/redis/6.2/redis.conf 完整redis 6.2配置文件

B

我们先从Redis官网下载最新Redis-6.2.6的源码包,解压出来,在 redis-6.2.6 目录里面复制 redis.conf 配置文件到 /mydata/redis/conf 目录下。

  1. 下载源码包 wget https://download.redis.io/releases/redis-6.2.6.tar.gz
  2. 解压 tar -xzf redis-6.2.6.tar.gz
  3. 复制redis.conf cp redis-6.2.6/redis.conf /mydata/redis/conf/
  4. 更改 /mydata/redis 目录下所有文件的权限为可读可写可执行 chmod 777 -R /mydata/redis
  5. 删除下载的源码包以及redis rm -rf redis-6.2.6

修改配置文件

修改*/mydata/redis/redis.conf*

1
2
bind 0.0.0.0 开启远程权限
appendonly yes 开启aof持久化

创建容器

1
2
3
4
5
6
docker run \
--name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/redis.conf:/mydata/etc/redis/redis.conf \
-p 6379:6379 \
-d redis:6.2.6 redis-server /mydata/etc/redis/redis.conf

Rabbitmq

拉取镜像

  • management版本,不指定默认为最新版本latest
1
docker pull rabbitmq:management

运行MQ容器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
docker run \
--name rabbitmq \
--restart=always \
-e RABBITMQ_DEFAULT_USER=dhx \
-e RABBITMQ_DEFAULT_PASS=qwer \
--hostname mq1 \
-p15672:15672 \
-p5672:5672 \
-d \
rabbitmq:management

docker run \
-e RABBITMQ_DEFAULT_USER=dhx \ # 用户
-e RABBITMQ_DEFAULT_PASS=qwer \ # 密码
--restart=always \ # 自动启动
--name rabbitmq \ # 容器名
--hostname mq1 \ # 主机名
-p 15672:15672 \ # UI界面端口
-p 5672:5672 \ # 消息通信端口
-d \ # 后台运行
rabbitmq:management # 使用的镜像的名称 : rabbitmq

Nacos

简易版

docker pull nacos/nacos-server

  • Xmx指定应用程序可用的最大堆大小
  • Xms指定应用程序可用的最小堆大小
1
2
3
4
5
6
7
8
9
10
docker  run \
--name nacos -d \
-p 8848:8848 \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
nacos/nacos-server

接着访问http://${virtualMachineIP}:8848/nacos 即可, 账号密码均为nacos

详细版

上面的容器没有使用挂载, 如果我们在开发环境去写配置文件, 部署的时候会很不方便, 这里直接把nacos的数据持久化, 等到项目部署可以直接打包

拉取镜像

docker pull nacos/nacos-server

如果下载速度过慢可以往下滑查看 修改Docker镜像服务器

创建本地的映射文件
1
2
mkdir -p /mydata/nacos/init.d /root/nacos/logs
touch /mydata/nacos/init.d/custom.properties

在文件中写入 management.endpoints.web.exposure.include=*

启动容器

这里具体的配置信息可以参考官方文档nacos/nacos-server - Docker Image | Docker Hub

版本为nacos2.2.0

1
2
3
4
5
[root@192 ~]# docker image inspect nacos/nacos-server:latest |grep -i version
"DockerVersion": "",
"org.label-schema.schema-version": "1.0",
"org.opencontainers.image.version": "v2.2.0"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
docker run \
-d \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--restart=always \
-e MODE=standalone \
-e JVM_XMS=256m \
-e JVM_XMX=512m \
-e PREFER_HOST_MODE=hostname \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.159.132 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-e MYSQL_DATABASE_NUM=1 \
-v /mydata/nacos/logs:/home/nacos/logs \
-v /mydata/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
--name nacos nacos/nacos-server

在浏览器输入 http://${virtualMachineIP}/nacos , 默认登录密码为nacos / nacos

准备数据库

执行官网给的sql文件 , 创建数据库以及表结构

nacos/nacos-db.sql at master · alibaba/nacos (github.com)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = config_info */
/******************************************/
CREATE TABLE `config_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) DEFAULT NULL,
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) 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 COMMENT 'source user',
`src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
`app_name` varchar(128) DEFAULT NULL,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
`c_desc` varchar(256) DEFAULT NULL,
`c_use` varchar(64) DEFAULT NULL,
`effect` varchar(64) DEFAULT NULL,
`type` varchar(64) DEFAULT NULL,
`c_schema` text,
`encrypted_data_key` text NOT NULL COMMENT '秘钥',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';

/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = config_info_aggr */
/******************************************/
CREATE TABLE `config_info_aggr` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
`content` longtext NOT NULL COMMENT '内容',
`gmt_modified` datetime NOT NULL COMMENT '修改时间',
`app_name` varchar(128) DEFAULT NULL,
`tenant_id` varchar(128) 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='增加租户字段';


/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = config_info_beta */
/******************************************/
CREATE TABLE `config_info_beta` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`content` longtext NOT NULL COMMENT 'content',
`beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
`md5` varchar(32) 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 COMMENT 'source user',
`src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
`encrypted_data_key` text NOT NULL 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';

/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = config_info_tag */
/******************************************/
CREATE TABLE `config_info_tag` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
`tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) 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 COMMENT 'source user',
`src_ip` varchar(20) 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';

/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = config_tags_relation */
/******************************************/
CREATE TABLE `config_tags_relation` (
`id` bigint(20) NOT NULL COMMENT 'id',
`tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
`tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`tenant_id` varchar(128) 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';

/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = group_capacity */
/******************************************/
CREATE TABLE `group_capacity` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`group_id` varchar(128) 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容量信息表';

/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = 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) NOT NULL,
`group_id` varchar(128) NOT NULL,
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`content` longtext NOT NULL,
`md5` varchar(32) 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,
`src_ip` varchar(20) DEFAULT NULL,
`op_type` char(10) DEFAULT NULL,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
`encrypted_data_key` text NOT NULL 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='多租户改造';


/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = tenant_capacity */
/******************************************/
CREATE TABLE `tenant_capacity` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`tenant_id` varchar(128) 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='租户容量信息表';


CREATE TABLE `tenant_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`kp` varchar(128) NOT NULL COMMENT 'kp',
`tenant_id` varchar(128) default '' COMMENT 'tenant_id',
`tenant_name` varchar(128) default '' COMMENT 'tenant_name',
`tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
`create_source` varchar(32) 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';

CREATE TABLE users (
username varchar(50) NOT NULL PRIMARY KEY,
password varchar(500) NOT NULL,
enabled boolean NOT NULL
);

CREATE TABLE roles (
username varchar(50) NOT NULL,
role varchar(50) NOT NULL,
constraint uk_username_role UNIQUE (username,role)
);

CREATE TABLE permissions (
role varchar(50) NOT NULL,
resource varchar(512) NOT NULL,
action varchar(8) NOT NULL,
constraint uk_role_permission UNIQUE (role,resource,action)
);

INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

创建数据库,库名为 nacos-config ,并执行sql脚本

测试持久化

访问nacos控制台 Nacos

简单的添加一个配置信息

查看数据库config_info 表 , 可以看到配置已经持久化到MySQL

Oracle

Docker 安装 oracle - 黑质白章 - 博客园 (cnblogs.com)

使用docker安装Oracle 11g,因为使用docker 直接pull启动的话没办法做到数据持久化

首先pull镜像docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

这里可以看到是aliyun的镜像, 因为Oracle官方没有Oracle的Docker镜像。

创建容器

启动临时容器获取初始化数据

1
2
3
4
5
6
docker run \
-d \
--name oracle \
--restart unless-stopped \
-p 1521:1521 \
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

创建目录

1
2
mkdir -p /mydata/oracle/ 
docker cp oracle:/home/oracle/app/oracle/oradata/ /mydata/oracle/

把文件赋权给容器内Oracle用户

1
chown -R 500.500 helowin

删除临时容器

1
docker rm -f oracle

启动容器

1
2
3
4
5
6
7
docker run \
-d \
--name oracle11g \
--restart unless-stopped \
-v /mydata/oracle/oradata/helowin:/home/oracle/app/oracle/oradata/helowin \
-p 1521:1521 \
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

进入镜像进行配置(root用户)

1
docker exec -it -u root oracle11g /bin/bash

切换root用户后修改配置文件,root密码为helowin

1
vi /etc/profile

内部新增如下配置信息:

1
2
3
4
5
6
# oracle home目录
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
# oracle 服务名或者 SID名,要记住这个名字helowin,它是naivcat或者DBeaver登录的重要选项
export ORACLE_SID=helowin
# oracle环境变量
export PATH=$ORACLE_HOME/bin:$PATH

刷新环境变量

1
source /etc/profile

ps: 直接复制配置内容可能会出现乱码问题, 需要清除export 所在行的乱码, 变为空格 , 否则可能配置文件报错

创建软连接

1
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin

切换oracle环境

1
su - oracle

登录sqlplus,修改sys、system用户密码,创建用户

1
2
3
4
5
6
7
8
9
10
11
12
#登录
sqlplus /nolog
#连接
conn /as sysdba
#修改密码
alter user system identified by system;

alter user sys identified by sys;
#创建用户
create user dev identified by helowin;
#并给用户赋予权限
grant connect,resource,dba to dev;

MongoDB

mongo - Official Image | Docker Hub 为准

docker pull mongo 拉取最新版本镜像

创建并运行容器

注意 , 需要把–auth放到最后, 否则不会会创建失败

1
2
3
4
5
6
7
8
docker run -d \
--name mongo \
-p 27017:27017 \
--restart=always \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=root \
mongo \
--auth

MongoDB数据库角色说明

  • 数据库用户角色:read、readWrite;
  • 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  • 集群管理角色:clusterAdmin、clusterManager、4. clusterMonitor、hostManage;
  • 备份恢复角色:backup、restore;
  • 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  • 超级用户角色:root
  • 内部角色:__system

MongoDB中的role详解

  • Read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  • userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户
  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
  • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限
  • root:只在admin数据库中可用。超级账号,超级权限

补充

Linux目录结构及含义

  • /bin
    bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。

  • /boot:
    这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

  • /dev :
    dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。

  • /etc:
    etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。

  • /home
    用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。

  • /lib
    lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。

  • /lost+found
    这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

  • /media
    linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

  • /mnt
    系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

  • /opt
    opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

  • /proc
    proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
    这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:

    1
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /root
    该目录为系统管理员,也称作超级权限者的用户主目录。

  • /sbin
    s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。

  • /selinux
    这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

  • /srv
    该目录存放一些服务启动之后需要提取的数据。

  • /sys

    这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。

    sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。

    该文件系统是内核设备树的一个直观反映。

    当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

  • /tmp
    tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。

  • /usr
    usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。

  • /usr/bin:
    系统用户使用的应用程序。

  • /usr/sbin:
    超级用户使用的比较高级的管理程序和系统守护程序。

  • /usr/src:
    内核源代码默认的放置目录。

  • /var
    var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

Linux常用命令

禁用防火墙

1
2
3
4
5
6
# 关闭防火墙
systemctl stop firewalld.service
# 查看防火墙状态
systemctl status firewalld.service
# 禁止开机启动防火墙
systemctl disable firewalld.service

修改Docker 镜像服务器

编辑 /etc/docker/daemon.json 配置文件

编辑文件vi /etc/docker/daemon.json

把以下配置信息放到文件中

1
2
3
4
5
6
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}

重启docker

1
2
systemctl daemon-reload 
systemctl restart docker

检验

docker info

如果显示下面的信息, 说明配置成功