Docker常用容器安装
目录
运行一个容器不仅仅是docker run
,还需要考虑端口、数据的持久化、容器自身的特殊命令等等,这样的容器在生产环境中才有实际意义。
安装tomcat
安装命令
|
|
Linux系统安装了浏览器的话,就可以通过http://localhost:8080来访问。
问题:访问不了?
-
可能没有映射端口,即:
-p 8080:8080
-
可能下载的tomcat版本过新,需要把webapps.dist目录名修改为webapps即可。
1 2 3 4
docker exec -it 容器id /bin/bash ls -l rm -r webapps #是一个空文件夹 mv webapps.dist webapps #给webapps.dist 文件夹换名字
外网访问不了?
- 如果服务器是云服务器,需要开启安全组8080端口和防火墙8080端口
- 如果是本地虚拟机,开启防火墙8080端口,如果还是访问不了就重启一下。虚拟机ip地址可以在虚拟机中使用
ifconfig
命令获取,ip地址在ens33
。
Centos一些常用防火墙命令
|
|
安装mysql
常规容器安装
-
拉取镜像
1
docker pull mysql:5.7
-
运行容器
1
docker run -d -p 3306:3306 --privileged=true -v /mysql/log:/var/log/mysql -v /mysql/data:/var/lib/mysql -v /mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=1234567 --name mysql mysql:5.7
- 数据库中的数据不能丢失,所以数据卷一定要配置上
-e MYSQL_ROOT_PASSWORD=1234567
是MySQL容器的特殊命令,表示配置root账户的登陆密码
-
配置编码(不配置的话插入中文数据会报错)
1 2
cd /mysql/conf/ # 通过数据卷同步到容器中,这个目录是 docker run 时配置的目录 vim my.cnf
将下面这段写入my.cnf:
1 2 3 4 5
[client] default_character_set=utf8 [mysqld] collation_server = utf8_general_ci character_set_server = utf8
-
重启容器,查看字符编码
1 2 3 4 5
docker restart mysql docker exec -it mysql bash mysql -uroot -p # 输入密码 show variables like 'character%';
之后,还可以删除容器,再重新跑一个mysql容器,只要数据卷映射的文件夹不变,数据就会自动恢复了。
安装主从复制
-
新建主服务器容器,端口为3307
1
docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
-
新建配置文件my.cnf
1 2
cd /mydatamysql-master/conf/ vim my.cnf
my.cnf内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
[mysqld] collation_server = utf8_general_ci character_set_server = utf8 ## 设置server_id,同一局域网中需要唯一 server_id=101 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能 log-bin=mall-mysql-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062 [client] default_character_set=utf8
-
重启容器后进入容器
1 2 3 4
docker restart mysql-master docker exec -it mysql-master bash root@5d6bc6db6d53:/# mysql -uroot -p Enter password:
-
master容器内创建用户身份,用于slave容器同步数据
1 2
create user 'slave'@'%' identified by '123456'; grant replication slave, replication client on *.* to 'slave'@'%';
-
新建从服务器容器,端口为3308
1
docker run -p 3308:3306 --name mysql-slave -v /mydata/mysql-slave/log:/var/log/mysql -v /mydata/mysql-slave/data:/var/lib/mysql -v /mydata/mysql-slave/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
-
新建配置文件my.cnf
1 2
cd /mydata/mysql-slave/conf/ vim my.cnf
my.cnf内容如下:
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
[mysqld] collation_server = utf8_general_ci character_set_server = utf8 ## 设置server_id,同一局域网中需要唯一 server_id=102 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用 log-bin=mall-mysql-slave1-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062 ## relay_log配置中继日志 relay_log=mall-mysql-relay-bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志 log_slave_updates=1 ## slave设置为只读(具有super权限的用户除外) read_only=1 [client] default_character_set=utf8
-
重启容器后进入容器
1 2 3 4
docker restart mysql-slave docker exec -it mysql-slave bash root@5d6bc6db6d53:/# mysql -uroot -p Enter password:
-
主数据库中查看主从同步状态
1
show master status;
我的内容如下:
1 2 3 4 5
+-----------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-----------------------+----------+--------------+------------------+-------------------+ | mall-mysql-bin.000001 | 617 | | mysql | | +-----------------------+----------+--------------+------------------+-------------------+
-
从服务器中配置主从复制
1
change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
参数说明:
- master_host:主数据库的IP地址;
- master_port:主数据库的运行端口;
- master_user:在主数据库创建的用于同步数据的用户账号;
- master_password:在主数据库创建的用于同步数据的用户密码;
- master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;(第八步)
- master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;(第八步)
- master_connect_retry:连接失败重试的时间间隔,单位为秒
-
从数据库中开启主从复制
1
start slave;
-
查看主从状态
1
show slave status \G;
Slave_IO_Running
与Slave_SQL_Running
都为yes,则成功! -
测试主机新增库表,从机查看数据。
安装redis
-
拉取镜像
1
docker pull redis:6.0.8
-
编辑redis配置文件,利用数据卷挂载到容器中
1 2 3
mkdir -p /redis #创建宿主机目录,存放redis容器中的数据 cd /redis vim redis.conf # 去网上找一个redis初始配置文件,将内容复制进去
-
修改redis.conf中的内容
1 2 3 4
requirepass 1234567 #redis密码验证,开启会安全很多 bind 0.0.0.0 #将配置文件中的bind 127.0.0.1注释掉或改成bind 0.0.0.0 ;不改则只能本机访问redis daemonize no # 将daemonize yes注释起来或者 daemonize no设置,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败 # appendonly yes 开启redis数据持久化 可选
-
运行容器
1
docker run -p 6379:6379 --name redis --privileged=true -v /redis/redis.conf:/etc/redis/redis.conf -v /redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
-
redis-cli连接
1 2 3 4
docker exec -it redis bash root@7c5608e916c8:/data# redis-cli root@7c5608e916c8:/data# auth 1234567 root@7c5608e916c8:/data# exit