常用组件的docker部署
Docker Hub是全球最大的容器映像库和社区
Docker Hub 我们可以在此搜索image的相关信息(tags、run命令等等)
安装mysql community 5.6版本
拉取镜像
# docker pull mysql:5.6
运行容器
# docker run -p 3306:3306 --name mymysql -v $PWD/mysql/conf:/etc/mysql/conf.d -v $PWD/mysql/logs:/logs -v $PWD/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mysql12345 -d mysql:5.6
// 进入容器,验证;
# docker exec -it gtp_account_db bash
修改字MySQL字符集 vim $PWD/mysql/conf/my.cnf (运行容器时指定的配置宿主机挂载目录)
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
特别注意点:
在宿主机上配置好my.cnf文件之后要在虚拟机里重启mysql
# service mysql restart
此时会自动退出到宿主机,需要重启mysql容器.
然后进入mysql虚拟机查看字符集
# show variables like "%char%";
如果做到这一步字符集配置不显效或者部分显效那应该是创建容器时的路径问题或者是虚拟机和宿主机启动问题;
重点看下宿主机目录看看是否在原来创建的容器目录上容器又自动创建了目录,有的时候mysql容器会忽略已创建目录在已有的目录上再新建一级目录;如:
- mysql
---- conf logs data mysql
---------------------------- conf log data
可能的问题
在安装5.7版本的时候我们可能会遇到目录权限问题
2020-09-06 02:02:53+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.31-1debian10 started.
2020-09-06 02:02:53+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
command was: mysqld --verbose --help
mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 13 - Permission denied)
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
使用特权模式运行是解决这个问题的最快方法
$ docker run -p 3306:3306 --name mymysql -v $PWD/mysql/conf:/etc/mysql/conf.d -v $PWD/mysql/logs:/logs -v $PWD/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mysql12345 -d --privileged=true mysql:5.7
检查运行状态
$ docker logs -f mymysql
以下日志代表启动正常
2020-09-06T02:26:35.314198Z 0 [Note] InnoDB: Highest supported file format is Barracuda.
2020-09-06T02:26:35.319137Z 0 [Note] InnoDB: Creating shared tablespace for temporary tables
2020-09-06T02:26:35.319189Z 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
2020-09-06T02:26:35.326797Z 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
2020-09-06T02:26:35.327317Z 0 [Note] InnoDB: 96 redo rollback segment(s) found. 96 redo rollback segment(s) are active.
2020-09-06T02:26:35.327337Z 0 [Note] InnoDB: 32 non-redo rollback segment(s) are active.
2020-09-06T02:26:35.327558Z 0 [Note] InnoDB: Waiting for purge to start
2020-09-06T02:26:35.377885Z 0 [Note] InnoDB: 5.7.31 started; log sequence number 12578196
2020-09-06T02:26:35.378140Z 0 [Note] Plugin 'FEDERATED' is disabled.
2020-09-06T02:26:35.379117Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
2020-09-06T02:26:35.381520Z 0 [Note] InnoDB: Buffer pool(s) load completed at 200906 2:26:35
2020-09-06T02:26:35.387069Z 0 [Note] Found ca.pem, server-cert.pem and server-key.pem in data directory. Trying to enable SSL support using them.
2020-09-06T02:26:35.387098Z 0 [Note] Skipping generation of SSL certificates as certificate files are present in data directory.
2020-09-06T02:26:35.388051Z 0 [Warning] CA certificate ca.pem is self signed.
2020-09-06T02:26:35.388097Z 0 [Note] Skipping generation of RSA key pair as key files are present in data directory.
2020-09-06T02:26:35.388409Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
2020-09-06T02:26:35.388468Z 0 [Note] IPv6 is available.
2020-09-06T02:26:35.388475Z 0 [Note] - '::' resolves to '::';
2020-09-06T02:26:35.388488Z 0 [Note] Server socket created on IP: '::'.
2020-09-06T02:26:35.389717Z 0 [Warning] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2020-09-06T02:26:35.405298Z 0 [Note] Event Scheduler: Loaded 0 events
2020-09-06T02:26:35.405773Z 0 [Note] mysqld: ready for connections.
Version: '5.7.31' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)
Docker 安装 Redis
# docker pull redis:3.2
查找Docker Hub上的redis镜像
这里我们拉取官方的镜像,标签为3.2
使用redis镜像
运行容器
# docker run -p 6379:6379 -v $PWD/data:/data -d redis:3.2 redis-server --appendonly yes
命令说明:
-p 6379:6379 : 将容器的6379端口映射到主机的6379端口
-v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data
redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置
查看容器启动情况
# docker ps
连接、查看容器
使用redis镜像执行redis-cli命令连接到刚启动的容器
# docker exec -it redis-server redis-cli
Redis 密码设置和查看密码
redis没有实现访问控制这个功能,但是它提供了一个轻量级的认证方式,可以编辑redis.conf配置来启用认证。
1、初始化Redis密码:
在配置文件中有个参数: requirepass 这个就是配置redis访问密码的参数;
比如 requirepass test123;
(Ps:需重启Redis才能生效)
redis的查询速度是非常快的,外部用户一秒内可以尝试多大150K个密码;所以密码要尽量长(对于DBA 没有必要必须记住密码);
2、不重启Redis设置密码:
在配置文件中配置requirepass的密码(当redis重启时密码依然有效)。
redis 127.0.0.1:6379> config set requirepass test123
查询密码:
redis 127.0.0.1:6379> config get requirepass
(error) ERR operation not permitted
密码验证:
redis 127.0.0.1:6379> auth test123
OK
再次查询:
redis 127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "test123"
PS:如果配置文件中没添加密码 那么redis重启后,密码失效;
3、登陆有密码的Redis:
在登录的时候的时候输入密码:
redis-cli -p 6379 -a test123
先登陆后验证:
redis-cli -p 6379
redis 127.0.0.1:6379> auth test123
OK
AUTH命令跟其他redis命令一样,是没有加密的;阻止不了攻击者在网络上窃取你的密码;
认证层的目标是提供多一层的保护。如果防火墙或者用来保护redis的系统防御外部攻击失败的话,外部用户如果没有通过密码认证还是无法访问redis的。
Docker 安装 MongoDB
# docker pull mongo
查找Docker Hub上的mongo镜像
这里我们拉取官方的镜像
使用mongo镜像
运行容器
先在当前目录下创建db目录
# docker run --name mongodb-server -p 27017:27017 -v $PWD/db:/data/db -d mongo:latest
启动容器设置密码
docker run -d -p 27017:27017 --name mongodb -v $PWD/db:/data/db -e MONGO_INITDB_ROOT_USERNAME=mongoroot -e MONGO_INITDB_ROOT_PASSWORD=mongorootpwd mongo:latest
命令说明:
-p 27017:27017 :将容器的27017 端口映射到主机的27017 端口
-v $PWD/db:/data/db :将主机中当前目录下的db挂载到容器的/data/db,作为mongo数据存储目录
–name 指定容器的名字,要想指定容器的名字必须在整个创建命令的前面指定,放到后面会出现创建容器失败的情况.
查看容器启动情况
#docker ps
使用mongo镜像执行mongo 命令连接到刚启动的容器,主机IP为127.0.0.1
# docker exec -it mongodb-server bash
# mongo
# show dbs
MongoDB客户端工具MongoDB-Compass下载
MongoDB-Compass 官网下载
docker部署rabbitMQ
要注意网络问题:
127.0.0.1 是否正常
异常的话可以尝试重启主机
获取rabbit镜像:(镜像名字不要搞错啊)
# docker pull rabbitmq:management
创建并运行容器:
# docker run -d --hostname my-rabbit --name rabbit -p 8080:15672 rabbitmq:management
或在运行时设置用户和密码
# docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management
查看rabbit运行状况:
# docker logs rabbit
容器运行正常,使用http://127.0.0.1:15672访问rabbit控制台
一般我们在使用RabbitMQ的时候会创建多个低权限账号,来给各个业务系统使用。
在新建用户的时候可不要忘了选择用户角色,不然会出现:An unexpected connection driver error occured java.net.SocketException: Socket Closed
异常。
docker部署FastDFS
环境
Machine 1 :(tracker)
IP4.ADDRESS[1]: 192.168.91.128/24
IP4.GATEWAY: 192.168.91.2
Machine 2 :(storage)
IP4.ADDRESS[1]: 192.168.91.129/24
IP4.GATEWAY: 192.168.91.2
Machine 3 :(storage)
IP4.ADDRESS[1]: 192.168.91.130/24
IP4.GATEWAY: 192.168.91.2
拉取镜像
# docker pull delron/fastdfs
运行tracker容器
128
# docker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker
运行storage容器
129
[root@ ~]# docker run -dti --network=host --name storage -e TRACKER_SERVER=192.168.91.128:22122 -v /var/fdfs/storage:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs storage
130
[root@ ~]# docker run -dti --network=host --name storage2 -e TRACKER_SERVER=192.168.91.128:22122 -v /var/fdfs/storage:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs storage
上传文件测试
129
进入到storage容器中上传一个文件
// # docker exec -it storage bash
// 随意编辑一个aa.txt文件
# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf aa.txt
上传成功。
远程访问文件测试
128
远程访问成功。
查看冗余备份状态
130
在130的机器上
冗余备份成功。
Docker安装WebLogic
Oracle官方版本的Weblogic Container需要访问外网登录docker才能pull下来,而Oracle官方的image和这个第三方的image,安装和使用方面并没有多少不同。因为是用于开发使用的,图着方便就用了使用率较高的第三方image。
How To Use:
docker pull ismaleiva90/weblogic12
To start the docker machine with 7001, 7002 and 5556 ports opened:
docker run -d -p 49163:7001 -p 49164:7002 -p 49165:5556 ismaleiva90/weblogic12:latest
Web Console
http://localhost:49163/console
User: weblogic
Pass: welcome1