Docker 运行常用软件:MySQL,Redis,Nginx,RabbitMQ,Neuxs,Gitlab

用户头像
读钓
关注
发布于: 2020 年 04 月 29 日
Docker运行常用软件:MySQL,Redis,Nginx,RabbitMQ,Neuxs,Gitlab

使用Docker可以快速搭建你的开发环境,以下是我经常用到的几个常用软件。文章的最后会总结下使用docker run的套路。



默认的,Docker会从官方的 Docker Hub 拉取镜像,国内用户想要提升访问 Docker Hub 拉取镜像的速度及稳定性,需要配置镜像站,这里使用的是DaoCloud的镜像站

以Linux系统为例:

$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

更多详情,请访问:https://www.daocloud.io/mirror

Docker-MySQL

1. 运行MySQL容器

$ docker run -d -p 3306:3306 --name mysql-5.7.5 \
-v /opt/docker/mysql/data:/var/lib/mysql \
-v /opt/docker/mysql/conf:/etc/mysql/conf.d \
-v /opt/docker/mysql/logs:/logs \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
-e MYSQLROOTPASSWORD=yourpassword \
daocloud.io/library/mysql:5.7.5

其中,

  • -v:宿主机和容器的目录映射关系;

  • ":"前为宿主机目录,之后为容器目录;

  • 这里分别将MySQL的数据、配置和日志目录挂载到了宿主机。

2. 修改配置

MySQL的配置文件my.cnf会读取容器内目录/etc/mysql/conf.d下的配置文件

# 新建配置文件
$ vim /opt/docker/mysql/conf/docker.cnf



docker.cnf文件如下:

[mysqld]
skip-host-cache
skip-name-resolve
lowercasetable_names=1
character-set-server=utf8

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

其中lowercasetable_names=1表示:表名存储在磁盘是小写的,但是比较的时候是不区分大小写

重启MySQL容器,使配置生效

$ docker restart mysql-5.7.5



Docker-Redis

Redis 是一个开源,基于内存的高性能 key-value 数据库。

1. 运行Redis容器

$ docker run -d -p 6379:6379 --name redis-6379 \
-v /opt/docker/redis/data:/data \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
daocloud.io/library/redis:5.0 \
redis-server --appendonly yes --requirepass yourpassword

这里使用了Redis AOF持久化,同时将appendonly.aof文件挂载到了/opt/docker/redis/data目录下。

2. 重写aof文件

当用的时间长了,文件appendonly.aof会越来越大,使用BGREWRITEAOF命令可以对redis的AOF进行重写

# 伪终端以交互式的方式进入容器
$ docker exec -it redis-6379 bash
root@1ff606aa6ad6:/data# redis-cli
127.0.0.1:6379> auth yourpassword
OK
127.0.0.1:6379> BGREWRITEAOF
Background append only file rewriting started

Docker-Nginx

Nginx 是一款轻量级的 Web 服务器、反向代理服务器、及电子邮件(IMAP/POP3)代理服务器。一般使用本地安装的方式安装nginx,但我比较喜欢用docker运行,真香!

1. 运行Nginx容器

$ docker run --name nginx-1.17.9 -d -p 80:80 \
-v /opt/docker/nginx/html:/etc/nginx/html \
-v /opt/docker/nginx/log:/var/log/nginx:rw \
-v /opt/docker/nginx/config/conf.d:/etc/nginx/conf.d \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
daocloud.io/library/nginx:1.17.9

2. 配置

新建nginx配置文件

$ vim /opt/docker/nginx/config/conf.d/dudiao.conf



dudiao.conf文件如下:

server {
# nginx服务器端口号
listen 80;
servername 192.168.199.210;
errorpage 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

重启nginx,使配置生效

# 重启nginx
$ docker restart nginx-1.17.9

$ cd /opt/docker/nginx/html
$ touch index.html && echo 'hello world!' >> index.html



访问ip:80即可看到刚刚输入的 hello world!

Docker-RabbitMQ

RabbitMQ 是开源的消息队列系统(或称消息中间件)

运行RabbitMQ容器

$ docker run -d --name rabbitmq-3.7.24 --hostname my-rabbit \
-p 5672:5672 -p 15672:15672 \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
daocloud.io/library/rabbitmq:3.7.24-management

RabbitMQ 已经有一些自带管理插件的镜像。用这些镜像创建的容器实例可以直接使用默认的 15672 端口访问,默认账号密码是guest/guest

Docker-Neuxs

Sonatype Nexus是一个Maven私服软件

# 拉取镜像,时间会有点长,642M
$ docker pull sonatype/nexus3:3.22.0

$ mkdir -p /opt/docker/nexus/data && chown -R 200 /opt/docker/nexus/data

# 这里运行nexus3的时区还有点问题(会相差8个多小时)
$ docker run -d -p 8081:8081 --name nexus-3.22.0 \
-v /opt/docker/nexus/data:/nexus-data \
sonatype/nexus3:3.22.0

# 查看日志
$ docker logs -f nexus-8081

...
-------------------------------------------------

Started Sonatype Nexus OSS 3.22.0-02

-------------------------------------------------



访问ip:8081,点击右上角 Sign in 按钮,进行登录,账号为:admin,密码在 /opt/docker/nexus/data/admin.password中。

关于Nexus3的使用,有机会开一章单独说下。

Docker-Gitlab

Gitlab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。官方推荐需要至少4G的内存。

1. 运行Gitlab容器

# 时间会比较久,共1.89GB
$ docker pull gitlab/gitlab-ce:12.8.8-ce.0

$ docker run --detach \
--publish 10443:443 --publish 10080:80 --publish 10022:22 \
--name gitlab-ce-12.8.8-ce.0 \
--volume /opt/docker/gitlab/config:/etc/gitlab \
--volume /opt/docker/gitlab/logs:/var/log/gitlab \
--volume /opt/docker/gitlab/data:/var/opt/gitlab \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
gitlab/gitlab-ce:12.8.8-ce.0
# 查看日志,启动需要几分钟
$ docker logs -f gitlab-ce-12.8.8-ce.0

耐心等待一段时间后,访问ip:10080/gitlab可以测试是否启动成功。



出现该页面时,则启动成功,先别着急填写密码,咱们需要做一些配置。

2. 修改配置文件

配置文件路径为:/opt/docker/gitlab/config/gitlab.rb

  • 修改邮箱配置(可选)

### Email Settings
gitlabrails['smtpenable'] = true
gitlabrails['smtpaddress'] = "smtp.exmail.qq.com"
gitlabrails['smtpport'] = 465
gitlabrails['smtpusername'] = "admin@gits.xyz"
gitlabrails['smtppassword'] = "yoursmtppassword"
gitlabrails['smtpdomain'] = "exmail.qq.com"
gitlabrails['smtpauthentication'] = "login"
gitlabrails['smtpenablestarttlsauto'] = true
gitlabrails['smtptls'] = true
# If your SMTP server does not like the default 'From: gitlab@localhost' you
# can change the 'From' with this setting.
gitlabrails['gitlabemailfrom'] = 'admin@gits.xyz'
gitlabrails['gitlabemailreplyto'] = 'admin@gits.xyz'



  • 修改external_url(可选)

如果你想用域名访问gitlab服务,可以更改external_url的值

## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring externalurl see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
externalurl 'http://gits.xyz'



  • 修改ssh端口

### GitLab Shell settings for GitLab
gitlabrails['gitlabshellsshport'] = 10022

3. 刷新配置

使用docker restart这样的方式来重启容器达到配置生效的效果,这样做非常不安全,配置文件可能只有部分生效而且很可能造成gitlab的完全崩溃,无法启动。



使用gitlab-ctl reconfigure命令刷新配置

$ docker exec -it gitlab-ce-12.8.8-ce.0 /bin/bash

root@0d8135776b45:/# gitlab-ctl reconfigure
# 出现如下界面,则重载配置成功
gitlab Reconfigured!
root@0d8135776b45:/# exit



然后重启docker就可以了

$ docker restart gitlab-ce-12.8.8-ce.0

4. 测试

  • 测试邮箱(可选)

$ docker exec -it gitlab-ce-12.8.8-ce.0 /bin/bash
root@0d8135776b45:/# gitlab-rails console
--------------------------------------------------------------------------------
GitLab: 12.8.8 (6ea04b16a40) FOSS
GitLab Shell: 11.0.0
PostgreSQL: 10.12
--------------------------------------------------------------------------------
Loading production environment (Rails 6.0.2)
irb(main):001:0> Notify.testemail('idudiao@163.com', '测试邮件标题', '测试邮件正文').delivernow



收到邮件,Get!



  • 初次登陆时,需要访问ip:10080 修改root密码

然后创建个项目试试



可以看到咱之前设置的external_url和ssh端口已经生效,Get!

总结

每个镜像如何使用,一般可以在https://hub.docker.com/会有详细的描述。比如MySQL



官方会给出详细介绍



下面总结下上面运行的几个镜像的关键点:

  • 暴露端口:-p

  • 挂载文件(数据、配置、日志):-v

  • 设置参数:-e

  • 修改配置文件

而这些关键点和如何构建docker镜像由有着关联,感兴趣的可以了解下docker build命令,构建一个自己的镜像。


End.

欢迎留言给出你的姿势!

发布于: 2020 年 04 月 29 日 阅读数: 91
用户头像

读钓

关注

Java开发,专心练剑 2017.11.10 加入

公众号:读钓的YY,欢迎关注

评论

发布
暂无评论
Docker运行常用软件:MySQL,Redis,Nginx,RabbitMQ,Neuxs,Gitlab