介绍
介绍
前面福哥已经教给大家使用Dockerfile安装各种服务器软件的方法了,今天福哥要带着大家把TFLinux服务器上的软件都转移到Docker容器里面。使用Docker容器搭建服务器环境是现如今部署服务器环境的主流方式,福哥顺应潮流将Docker这种部署方式教给大家,活到老学到老嘛~~
这次福哥整理的服务器软件包括MySQL、Redis、MongoDB、Elasticsearch, 本节课不包括PHP、Apache以及Nginx软件的部署,福哥将在后面详细介绍~~
MySQL
直接部署
福哥直接部署的MySQL的路径是/tongfu.net/env/mysql-5.7.28/,福哥使用了同样的版本的MySQL的Docker镜像避免了数据库数据的兼容问题。现在只需要将当前直接部署的MySQL的数据指向给Docker容器使用就可以了。
Docker部署
直接部署的MySQL的数据路径是/tongfu.net/env/mysql-5.7.28/data/,福哥使用数据卷映射的方式将这个路径映射到MySQL的镜像里面。
Dockerfile
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'
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
测试
创建镜像
docker build -f Dockerfile -t tflinux-mysql5.7 ./
授权数据卷
我们映射到容器里面的目录的所有者还是宿主机的,为了避免启动容器后出现权限问题,我们需要在启动容器之前将宿主机的目录所有者改成容器里面的。
好在容器启动后的用户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/
启动容器
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
Redis
直接部署
福哥直接部署的Redis的路径是/tongfu.net/env/redis-4.0.10/,福哥使用了同样的版本的Redis的Docker镜像避免了数据库数据的兼容问题。现在只需要将当前直接部署的Redis的数据和日志指向给Docker容器使用就可以了。
Docker部署
直接部署的Redis的数据路径是/tongfu.net/env/redis-4.0.10/data/,直接部署的Redis的日志路径是/tongfu.net/env/redis-4.0.10/logs/,福哥使用数据卷映射的方式将这两个路径映射到Redis的镜像里面。
Dockerfile
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
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"]
测试
创建镜像
docker build -f Dockerfile -t tflinux-redis6.0 ./
授权数据卷
我们映射到容器里面的目录的所有者还是宿主机的,为了避免启动容器后出现权限问题,我们需要在启动容器之前将宿主机的目录所有者改成容器里面的。
好在容器启动后的用户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/
启动容器
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
MongoDB
直接部署
福哥直接部署的MongoDB的路径是/tongfu.net/env/mongodb-4.2.2/,福哥使用了同样的版本的MongoDB的Docker镜像避免了数据库数据的兼容问题。现在只需要将当前直接部署的MongoDB的数据和日志指向给Docker容器使用就可以了。
Docker部署
直接部署的MongoDB的数据路径是/tongfu.net/env/mongodb-4.2.2/data/,直接部署的MongoDB的日志路径是/tongfu.net/env/mongodb-4.2.2/logs/,福哥使用数据卷映射的方式将这两个路径映射到MongoDB的镜像里面。
Dockerfile
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:
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
测试
创建镜像
docker build -f Dockerfile -t tflinux-mongo4.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/
启动容器
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
Elasticsearch
直接部署
福哥直接部署的Elasticsearch的路径是/tongfu.net/env/elasticsearch-6.5.2/,福哥使用了同样的版本的Elasticsearch的Docker镜像避免了数据库数据的兼容问题。现在只需要将当前直接部署的Elasticsearch的数据和日志指向给Docker容器使用就可以了。
Docker部署
直接部署的Elasticsearch的数据路径是/tongfu.net/env/elasticsearch-6.5.2/data/,直接部署的Elasticsearch的日志路径是/tongfu.net/env/elasticsearch-6.5.2/logs/,福哥使用数据卷映射的方式将这两个路径映射到Elasticsearch的镜像里面。
Dockerfile
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
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
测试
创建镜像
docker build -f Dockerfile -t tflinux-es6.8.15 ./
授权数据卷
我们映射到容器里面的目录的所有者还是宿主机的,为了避免启动容器后出现权限问题,我们需要在启动容器之前将宿主机的目录所有者改成容器里面的。
好在容器启动后的用户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/
启动容器
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
总结
今天福哥带着童鞋们将之前学习的使用Dockerfile搭建各种服务器软件的技巧综合了一下,使用这些技巧将我们的TFLinux服务器上面直接部署的MySQL、Redis、MongoDB、Elasticsearch都转移到了Docker里面,利用Docker的数据卷映射技术保留了我们的TFLinux服务器软件的数据。
这一课的内容比较多,大家在实践的时候要仔细一点,不要将TFLinux服务器上的直接部署的软件的数据弄丢了!
下一课福哥会带着大家把TFLinux服务器上面直接部署的PHP的环境转移到Docker里面,届时大家可以学到php-apache转php-fpm的相关技术,敬请期待~~