前一阵重做了自己PC上的Ubuntu系统,顺便把所有占用端口的软件都用Docker重构了,
把重构过程纪录了一下,攒鸡毛凑掸子写成此文。
一些比较基础的软件如JDK则没有重构。
本文环境为Ubuntu系统,Fuck CentOS。
Linux最重要的概念是权限,我在操作docker的时候为了安全起见,没有使用sudo,而是直接输入,再配合pip3的thefuck进行命令补全,所以本文是以普通用户操作,所有命令都需要提权sudo。
按本人习惯,所有容器映射到本地的位置为/opt/docker/CONTAINER_NAME
docker也有windows版,我个人的windows版docker容器映射位置是 d:\\programming\\docker\\container\\CONTAINER_NAME,注意windows下要有转义符两个反斜杠。
0.0、Docker的安装
#使用如下脚本一键安装
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun
#为方便连接数据库,在本机hosts中为docker设置虚拟域名
vim /etc/hosts
#添加如下
172.17.0.1 docker
#本文所介绍容器均安装在PC上,为节省内存,只有portainer设置了开机自启,其他容器均未设置开机自启,
#设置开机自启的方式如下
#创建名为xxx的容器时设置开机自启
docker run -d -p xxxx:xxxx --restart=always -v /xxx/xxx:/xxx/xxx --name xxx
#为已有的容器设置开机自启
docker update --restart=always xxx
#取消开机自启
docker update --restart=no xxx
0.1、配置docker 的163镜像
vim /etc/docker/daemon.json
#填入以下内容
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
#重启docker
server restart docker
#docker容器可以理解为一个个单独的系统,当需要修改配置文件时,可以修改挂载在宿主机上的配置文件,也可以进入容器后修改源配置文件,但进入容器再修改需要安装vim,方法如下:
#进入容器
docker exec -it xxx bash
#更新容器软件源
apt update
#安装vim
apt install vim
1、容器安装
1.1、Portainer
#利用web来管理docker容器
docker pull portainer/portainer
docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name portainer portainer/portainer
#浏览器打开 ip:9000进行设置,设置用户名和密码,选择localhost
1.2、MySQL
1.2.1、MySQL5.7
docker pull hub.c.163.com/library/mysql:5.7
docker run -p 3306:3306 --name mysql57 -v /opt/docker/mysql57/conf:/etc/mysql/conf.d -v /opt/docker/mysql57/logs:/logs -v /opt/docker/mysql57/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d hub.c.163.com/library/mysql:5.7
1.2.2、MySQL8.0
docker pull hub.c.163.com/library/mysql:8
docker run -p 3306:3306 --name mysql80 -v /opt/docker/mysql80/conf:/etc/mysql/conf.d -v /opt/docker/mysql80/logs:/logs -v /opt/docker/mysql80/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d hub.c.163.com/library/mysql:8.0 --lower_case_table_names=1 --character-set-server=utf8
#注意结尾一定要有 --lower_case_table_names=1和 --character-set-server=utf8,第一句是因为mysql8.0只有在初始化时才允许设置大小写不敏感,初始化完成后,不再允许设置,第二句是因为我不知道怎么修改mysql8的字符集。。
#登录mysql
mysql -h docker -u root -p
#因为前面设置了docker 的hosts,所以这里docker=172.17.0.1=你的docker地址
#设置密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MIMA';
#添加远程登录用户
CREATE USER 'YONGHUMING'@'%' IDENTIFIED WITH mysql_native_password BY 'MIMA';
#给予权限
#MySQL 5.7版本:
GRANT ALL PRIVILEGES ON *.* TO 'YONGHUMING'@'%';
#MySQL 8.0版本:
# 文章修改时间 2019-04-12 15:45
grant all privileges on *.* to 'YONGHUMING'@'%' with grant option;
1.3、Oracle DB 11g
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
docker run -d -p 1521:1521 -v /opt/docker/oracle/data/oracle:/data/oracle --name oracle11 registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
#配置
#进入容器,这个容器是以CentOS为基础的,very not friendly
#文章修改时间 2019-04-12 15:45
docker exec -it --user root oracle11 /bin/bash
yum install vim
#修改/etc/profile 在尾部添加如下字段
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2 #安装位置
export ORACLE_SID=helowin #数据库 SID
export PATH=$ORACLE_HOME/bin:$PATH
#切换用户
su - oracle
sqlplus /nolog
conn /as sysdba
alter user system identified by system; #修改system用户账号密码;
alter user sys identified by system; #修改sys用户账号密码;
create user YONGHUMING identified by MIMA; #创建内部管理员账号;
grant connect,resource,dba to YONGHUMING; #提权
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; #修改密码规则策略为密码永不过期;
alter system set processes=1000 scope=spfile; #修改数据库最大连接数据;
exit
#重启数据库
sqlplus /nolog
conn /as sysdba
shutdown immediate;
startup;
exit
#安装完成后,还要修改字符集为UTF8
#Server端字符集修改
#将数据库启动到RESTRICTED模式下做字符集更改:
sqlplus "/as sysdba"
conn /as sysdba;
shutdown immediate;
startup mount;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
alter database open;
alter database character set INTERNAL_USE UTF8;
shutdown immediate;
startup;
exit;
1.4、Tomcat
#文章修改时间 2019-04-12 15:47
# 动态IP的Tomcat的方法
docker run --name tomcat8080 -p 8080:8080 -v /opt/docker/tomcat8080/:/usr/local/tomcat/webapps -d hub.c.163.com/library/tomcat
# 创建静态IP的Tomcat的方法写在Nginx实现负载均衡里
1.5、Nginx
1.5.1、 Docker安装Nginx并mount外部配置文件
1.5.2、 Docker安装的Nginx实现负载均衡
1.6、Apache2 + php7
#PHP还有人用?
1.6.1、创建容器
sudo docker run -p 80:80 -p 443:443 -v /opt/docker/apache-php/www:/var/www/html -d eboraas/apache-php apache-php
1.6.2、 Apache2 负载均衡
//TODO
1.7、ElasticSearch
//TODO
1.8、Solr
//TODO
1.9、Redis
文章修改时间:2019-04-13 17:54:47
1.9.0 安装redis客户端
sudo apt install redis-tools
1.9.1、单机redis
sudo docker run --net=mynetwork --ip=172.18.0.200 --name=redis32-master -p 6379:6379 -v /opt/docker/redis32/master-slave/master/data:/data -d hub.c.163.com/library/redis:3.2 redis-server --appendonly yes
1.9.2、主从
#在创建1.9.1的单机容器之后,继续创建下面的容器
sudo docker run --net=mynetwork --ip=172.18.0.201 --name=redis32-slave1 -p 6380:6379 -v /opt/docker/redis32/master-slave/slave1/data:/data -d hub.c.163.com/library/redis:3.2 redis-server --slaveof 172.18.0.200 6379
sudo docker run --net=mynetwork --ip=172.18.0.202 --name=redis32-slave2 -p 6381:6379 -v /opt/docker/redis32/master-slave/slave2/data:/data -d hub.c.163.com/library/redis:3.2 redis-server --slaveof 172.18.0.200 6379
#测试
1.9.3、集群
#关掉或者删除上面创建的所有redis容器
#集群的创建需要至少3个实例,使用如下的配置文件来实现
#创建目录
sudo mkdir /opt/docker/redis32/cluster
#创建名为redis32-cluster-redis1.conf并拷贝至/opt/docker/redis32/cluster目录下,内容如下
port 6382
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
#复制出另外两份配置文件
cd /opt/docker/redis32/cluster
cp redis32-cluster-redis1.conf redis32-cluster-redis2.conf
sed -i ‘s/6382/6383/’ redis32-cluster-redis2.conf
cp redis32-cluster-redis1.conf redis32-cluster-redis3.conf
sed -i ‘s/6382/6384/’ redis32-cluster-redis2.conf
#创建容器
sudo docker run --net=mynetwork --ip=172.18.0.203 --name=redis32-cluster-redis1 -v /opt/docker/redis32/cluster/redis1/data:/data -v /opt/docker/redis32/cluster/redis32-cluster-redis1.conf:/usr/local/etc/redis/redis.conf -d hub.c.163.com/library/redis:3.2 redis-server /usr/local/etc/redis/redis.conf
sudo docker run --net=mynetwork --ip=172.18.0.204 --name=redis32-cluster-redis2 -v /opt/docker/redis32/cluster/redis2/data:/data -v /opt/docker/redis32/cluster/redis32-cluster-redis2.conf:/usr/local/etc/redis/redis.conf -d hub.c.163.com/library/redis:3.2 redis-server /usr/local/etc/redis/redis.conf
sudo docker run --net=mynetwork --ip=172.18.0.205 --name=redis32-cluster-redis3 -v /opt/docker/redis32/cluster/redis3/data:/data -v /opt/docker/redis32/cluster/redis32-cluster-redis3.conf:/usr/local/etc/redis/redis.conf -d hub.c.163.com/library/redis:3.2 redis-server /usr/local/etc/redis/redis.conf
#我们用redis-trib.rb来创建集群
#注意:上面我们安装的版本是3.2.10,所以客户端也要用3.2.10对应版本
#到官网下载对应的版本
http://download.redis.io/releases/
#解压后提取src目录下的redis-trib.rb文件并且拷贝到/opt/docker/redis32/cluster/
cd /opt/docker/redis32/cluster
ruby redis-trib.rb create 172.18.0.203:6382 172.18.0.204:6383 172.18.0.205:6384
#测试
1.9.4、主从集群
//TODO
1.10、RabbitMQ
//TODO
1.11、Jenkins
//TODO
1.12、MongoDB
//TODO