Docker常用安装基本步骤
- 搜索镜像
- 拉取镜像
- 查看镜像
- 启动镜像
- 停止容器
- 移除容器
Tomcat安装
docker search tomcat
docker pull tomcat
docker images
docker run -it -p 8080:8080 tomcat
docker-compose版本:
version: '3'
services:
tomcat1:
image: tomcat
_name: tomcat1
ports:
- 9090:8080
tomcat2:
image: tomcat
_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;
查看用户信息
- 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
_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
_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
_name: redis-master
ports:
- 6379:6379
slave1:
restart: always
image: redis
_name: redis-slave-1
ports:
- 6380:6379
command: redis-server --slaveof redis-master 6379
slave2:
restart: always
image: redis
_name: redis-slave-2
ports:
- 6381:6379
command: redis-server --slaveof redis-master 6379
- sentinel集群
- 我们至少需要创建三个 Sentinel 服务,docker-compose.yml 配置如下:
version: '3.1'
services:
sentinel1:
restart: always
image: redis
_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
_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
_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内容如下:
去这个网址拷贝
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
_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
_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,红框内就是文件位置
这里注意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
_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
_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
_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
_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','a$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
_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这个。
- 新建虚拟机建立一个空的稍后再添加操作系统
- 将centos镜像放到清楚的位置上
- 双击设备打开配置页面导入指定镜像文件
- 网络适配器选择桥接模式,为了像局域网一样连接虚拟机。
- 点击开启此虚拟机选择install centos linux 7
- 选择中文—>下图这种有感叹号的要双击打开点击完成—>设置root密码
- 重启系统打开后进行登录输入账号密码登录后如下,输入ip addr 发现ens33内没有inet这个属性,这就导致我们没办法通过ip地址连接虚拟机接下来查看ens33网卡的配置:vi /etc/sysconfig/network-scripts/ifcfg-ens33 注意vi后边加空格进入文档编辑页面
- 按i 进入输入模式,修改红框内的NO改为yes,然后ESC+:wq(保存退出)。然后重启网络服务:sudo service network restart 然后再次输入ip addr 就有了innet
安装Xshel
安装Docker
查看虚拟机系统:cat /etc/redhat-release
根据网页上内容走。
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
#容器名 自己起
_name: tomcat
ports:
- 8080:8080
volumes:
- /usr/local/docker/tomcat/RooT:/usr/local/tomcat/webapps/RooT
mysql:
restart: always
image: mysql
_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部署
- 在要部署的项目内部建立目录:docker。
- 将要部署的jar包拷贝到docker目录下,命令例子为:(其中最后一位.为当前目录) cp …/target/itoken-config-1.0.0-SNAPSHOT.jar .
- 在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
- 生成镜像:docker build -t 192.168.213.10:5000/itoken-config .
- 运行测试:docker run -p 8888:8888 itoken-config
- docker-compose.yml启动:
version: '3.1'
services:
itoken-config:
restart: always
image: itoken-config
_name: itoken-config
ports:
- 8888:8888
- 集群启动方式:
version: '3.1'
services:
itoken-eureka-1:
restart: always
image: itoken-eureka
_name: itoken-eureka-1
ports:
- 8761:8761
itoken-eureka-2:
restart: always
image: itoken-eureka
_name: itoken-eureka-2
ports:
- 8861:8761
itoken-eureka-3:
restart: always
image: itoken-eureka
_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存放数量庞大的镜像供用户下载,不过由于是国外的网站很慢,所以一般用不到,国内公开仓库包括阿里云,网易云等。 |
能干嘛?
虚拟机缺点 :
- 资源占用多
- 冗余步骤多
- 启动慢
Docker 与传统虚拟化方式的不同之处:
- 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该操作系统上再运行所需应用进程。
- 容器内的进程是直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更轻便。
- 每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源,降低耦合度。
开发/ 运维(devops)
- 更快速的应用应付和部署
- 更便捷的升级和扩缩容
- 更简单的系统运维
- 更有效的计算资源利用
去哪下?
Docker 官网
常见原理性问题
使用镜像 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不会在容器删除时删除其挂载的数据卷。
特点:
- 数据卷可在容器之间共享或重用数据
- 卷中的更改可以直接生效
- 数据卷中更改不会包含在镜像的更新中
- 数据卷的声明周期一直持续到没有容器使用为止。
- 容器内添加数据卷两种方式
直接命令添加:命令: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被触发