1. 介绍
1.1 介绍
前面福哥已经教给大家使用Dockerfile安装各种服务器软件的方法了,今天福哥要带着大家把TFLinux服务器上的软件都转移到Docker容器里面。使用Docker容器搭建服务器环境是现如今部署服务器环境的主流方式,福哥顺应潮流将Docker这种部署方式教给大家,活到老学到老嘛~~
这次福哥整理的服务器软件包括MySQL、Redis、MongoDB、Elasticsearch, 本节课不包括PHP、Apache以及Nginx软件的部署,福哥将在后面详细介绍~~
2. MySQL
2.1 直接部署
福哥直接部署的MySQL的路径是/tongfu.net/env/mysql-5.7.28/,福哥使用了同样的版本的MySQL的Docker镜像避免了数据库数据的兼容问题。现在只需要将当前直接部署的MySQL的数据指向给Docker容器使用就可以了。
2.2 Docker部署
直接部署的MySQL的数据路径是/tongfu.net/env/mysql-5.7.28/data/,福哥使用数据卷映射的方式将这个路径映射到MySQL的镜像里面。
2.3 Dockerfile
2.3.1 my-extra.cnf
# server id
server_id = 131415926
# log bin
log-bin=mysql-bin
binlog-do-db=tfapi_utf8
expire_logs_days=10
max_binlog_size=1G
binlog-format=row
# performance
max_allowed_packet=104857600
# innodb
innodb_flush_log_at_trx_commit = 2 # 0 - no writen, 1 - writen everytimes, 2 - writen per second
# sql
sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
2.3.2 Dockerfile
FROM mysql:5.7
MAINTAINER Andy Bogate
MAINTAINER tongfu@tongfu.net
MAINTAINER http://docker.tongfu.net
EXPOSE 3306
# local mirror
RUN sed -i 's/deb.debian.org/ftp.cn.debian.org/g' /etc/apt/sources.list \
&& sed -i 's/security.debian.org/ftp.cn.debian.org/g' /etc/apt/sources.list
# timezone
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
# config
ADD my-extra.cnf /tmp/my-extra.cnf
RUN cat /tmp/my-extra.cnf >> /etc/mysql/mysql.conf.d/mysqld.cnf
# clear
RUN rm -f /tmp/my-extra.cnf
2.4 测试
2.4.1 创建镜像
docker build -f Dockerfile -t tflinux-mysql5.7 ./
2.4.2 授权数据卷
我们映射到容器里面的目录的所有者还是宿主机的,为了避免启动容器后出现权限问题,我们需要在启动容器之前将宿主机的目录所有者改成容器里面的。
好在容器启动后的用户ID、组ID都不会变,福哥查到了mysql:5.7的镜像里面的mysql用户ID是999、组ID是999。
chown 999 -R /tongfu.net/env/mysql-5.7.28/data/
chgrp 999 -R /tongfu.net/env/mysql-5.7.28/data/
2.4.3 启动容器
docker run -tid \
--name tflinux-mysql5.7 \
-h tflinux-mysql5.7 \
-p 10.16.1.1:3306:3306 \
-v /tongfu.net/env/mysql-5.7.28/data/:/var/lib/mysql/ \
tflinux-mysql5.7
3. Redis
3.1 直接部署
福哥直接部署的Redis的路径是/tongfu.net/env/redis-4.0.10/,福哥使用了同样的版本的Redis的Docker镜像避免了数据库数据的兼容问题。现在只需要将当前直接部署的Redis的数据和日志指向给Docker容器使用就可以了。
3.2 Docker部署
直接部署的Redis的数据路径是/tongfu.net/env/redis-4.0.10/data/,直接部署的Redis的日志路径是/tongfu.net/env/redis-4.0.10/logs/,福哥使用数据卷映射的方式将这两个路径映射到Redis的镜像里面。
3.3 Dockerfile
3.3.1 redis.conf
# host and port
bind 0.0.0.0
port 6379
# data
maxmemory 268435456
dbfilename dump.rdb
dir /var/lib/redis
# logs
logfile /var/log/redis/redis.log
# security
requirepass tongfu.net
3.3.2 Dockerfile
FROM redis:6.0-buster
MAINTAINER Andy Bogate
MAINTAINER tongfu@tongfu.net
MAINTAINER http://docker.tongfu.net
MAINTAINER 2021/5/25
MAINTAINER v1.0.0
EXPOSE 6379
# local mirror
RUN sed -i 's/deb.debian.org/ftp.cn.debian.org/g' /etc/apt/sources.list \
&& sed -i 's/security.debian.org/ftp.cn.debian.org/g' /etc/apt/sources.list
# timezone
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
# config
RUN mkdir /usr/local/etc/redis
ADD redis.conf /usr/local/etc/redis/redis.conf
# run by redis.conf
CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]
3.4 测试
3.4.1 创建镜像
docker build -f Dockerfile -t tflinux-redis6.0 ./
3.4.2 授权数据卷
我们映射到容器里面的目录的所有者还是宿主机的,为了避免启动容器后出现权限问题,我们需要在启动容器之前将宿主机的目录所有者改成容器里面的。
好在容器启动后的用户ID、组ID不会变,福哥查到了redis:6.0-buster的镜像里面的redis用户ID是999、组ID是999。
chown 999 -R /tongfu.net/env/redis-4.0.10/data/
chown 999 -R /tongfu.net/env/redis-4.0.10/logs/
chgrp 999 -R /tongfu.net/env/redis-4.0.10/data/
chgrp 999 -R /tongfu.net/env/redis-4.0.10/logs/
3.4.3 启动容器
docker run -tid \
--name tflinux-redis6.0 \
-h tflinux-redis6.0 \
-p 10.16.1.1:6379:6379 \
-v /tongfu.net/env/redis-4.0.10/data/:/var/lib/redis/ \
-v /tongfu.net/env/redis-4.0.10/logs/:/var/log/redis/ \
tflinux-redis6.0
4. MongoDB
4.1 直接部署
福哥直接部署的MongoDB的路径是/tongfu.net/env/mongodb-4.2.2/,福哥使用了同样的版本的MongoDB的Docker镜像避免了数据库数据的兼容问题。现在只需要将当前直接部署的MongoDB的数据和日志指向给Docker容器使用就可以了。
4.2 Docker部署
直接部署的MongoDB的数据路径是/tongfu.net/env/mongodb-4.2.2/data/,直接部署的MongoDB的日志路径是/tongfu.net/env/mongodb-4.2.2/logs/,福哥使用数据卷映射的方式将这两个路径映射到MongoDB的镜像里面。
4.3 Dockerfile
4.3.1 mongod.conf
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
#security:
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
4.3.2 Dockerfile
FROM mongo:4.2-bionic
MAINTAINER Andy Bogate
MAINTAINER tongfu@tongfu.net
MAINTAINER http://docker.tongfu.net
MAINTAINER 2021/5/25
MAINTAINER v1.0.0
EXPOSE 27017
# local mirror
RUN sed -i 's/deb.debian.org/ftp.cn.debian.org/g' /etc/apt/sources.list \
&& sed -i 's/security.debian.org/ftp.cn.debian.org/g' /etc/apt/sources.list
# timezone
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
# config
ADD mongod.conf /etc/mongod.conf
4.4 测试
4.4.1 创建镜像
docker build -f Dockerfile -t tflinux-mongo4.2 ./
4.4.2 授权数据卷
我们映射到容器里面的目录的所有者还是宿主机的,为了避免启动容器后出现权限问题,我们需要在启动容器之前将宿主机的目录所有者改成容器里面的。
好在容器启动后的用户ID、组ID不会变,福哥查到了mongo:4.2-bionic的镜像里面的mongodb用户ID是999、组ID是999。
chown 999 -R /tongfu.net/env/mongodb-4.2.2/data/
chown 999 -R /tongfu.net/env/mongodb-4.2.2/logs/
chgrp 999 -R /tongfu.net/env/mongodb-4.2.2/data/
chgrp 999 -R /tongfu.net/env/mongodb-4.2.2/logs/
4.4.3 启动容器
docker run -tid \
--name tflinux-mongo4.2 \
-h tflinux-mongo4.2 \
-p 10.16.1.1:27017:27017 \
-v /tongfu.net/env/mongodb-4.2.2/data/:/var/lib/mongodb/ \
-v /tongfu.net/env/mongodb-4.2.2/logs/:/var/log/mongodb/ \
tflinux-mongo4.2 \
-f /etc/mongod.conf
5. Elasticsearch
5.1 直接部署
福哥直接部署的Elasticsearch的路径是/tongfu.net/env/elasticsearch-6.5.2/,福哥使用了同样的版本的Elasticsearch的Docker镜像避免了数据库数据的兼容问题。现在只需要将当前直接部署的Elasticsearch的数据和日志指向给Docker容器使用就可以了。
5.2 Docker部署
直接部署的Elasticsearch的数据路径是/tongfu.net/env/elasticsearch-6.5.2/data/,直接部署的Elasticsearch的日志路径是/tongfu.net/env/elasticsearch-6.5.2/logs/,福哥使用数据卷映射的方式将这两个路径映射到Elasticsearch的镜像里面。
5.3 Dockerfile
5.3.1 elasticsearch.yml
# elasticsearch.yml
# host and port
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.port: 9200
# data
path.data: /var/lib/elasticsearch
# logs
path.logs: /var/log/elasticsearch
5.3.2 Dockerfile
FROM elasticsearch:6.8.15
MAINTAINER Andy Bogate
MAINTAINER tongfu@tongfu.net
MAINTAINER http://docker.tongfu.net
MAINTAINER 2021/5/25
MAINTAINER v1.0.0
EXPOSE 9200
# timezone
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
# config
COPY elasticsearch.yml /usr/share/elasticsearch/config/elasticsearch.yml
5.4 测试
5.4.1 创建镜像
docker build -f Dockerfile -t tflinux-es6.8.15 ./
5.4.2 授权数据卷
我们映射到容器里面的目录的所有者还是宿主机的,为了避免启动容器后出现权限问题,我们需要在启动容器之前将宿主机的目录所有者改成容器里面的。
好在容器启动后的用户ID、组ID不会变,福哥查到了elasticsearch:6.8.15的镜像里面的elasticsearch用户ID是1000、组ID是1000。
chown 1000 -R /tongfu.net/env/elasticsearch-6.5.2/data/
chown 1000 -R /tongfu.net/env/elasticsearch-6.5.2/logs/
chgrp 1000 -R /tongfu.net/env/elasticsearch-6.5.2/data/
chgrp 1000 -R /tongfu.net/env/elasticsearch-6.5.2/logs/
5.4.3 启动容器
docker run -tid \
--name tflinux-es6.8.15 \
-h tflinux-es6.8.15 \
-p 10.16.1.1:9200:9200 \
-v /tongfu.net/env/elasticsearch-6.5.2/data/:/var/lib/elasticsearch/ \
-v /tongfu.net/env/elasticsearch-6.5.2/logs/:/var/log/elasticsearch/ \
tflinux-es6.8.15
6. 总结
今天福哥带着童鞋们将之前学习的使用Dockerfile搭建各种服务器软件的技巧综合了一下,使用这些技巧将我们的TFLinux服务器上面直接部署的MySQL、Redis、MongoDB、Elasticsearch都转移到了Docker里面,利用Docker的数据卷映射技术保留了我们的TFLinux服务器软件的数据。
这一课的内容比较多,大家在实践的时候要仔细一点,不要将TFLinux服务器上的直接部署的软件的数据弄丢了!
下一课福哥会带着大家把TFLinux服务器上面直接部署的PHP的环境转移到Docker里面,届时大家可以学到php-apache转php-fpm的相关技术,敬请期待~~
https://m.tongfu.net/home/35/blog/513323.html