Docker运行常用软件,亲测建议收藏

使用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

MySQL

1. Docker运行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 MYSQL_ROOT_PASSWORD=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
lower_case_table_names=1
character-set-server=utf8 

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

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

重启MySQL容器,使配置生效

$ docker restart mysql-5.7.5

Redis

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

1. Docker运行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

Nginx

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

1. Docker运行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;
    server_name  192.168.199.210;

    error_page   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!

RabbitMQ

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

Docker运行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

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的使用,有机会开一章单独说下。

Gitlab

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

1. Docker运行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
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "admin@gits.xyz"
gitlab_rails['smtp_password'] = "your_smtp_password"
gitlab_rails['smtp_domain'] = "exmail.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
# If your SMTP server does not like the default 'From: gitlab@localhost' you
# can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = 'admin@gits.xyz'
gitlab_rails['gitlab_email_reply_to'] = 'admin@gits.xyz'
  • 修改external_url(可选)

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

## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
external_url 'http://gits.xyz'
  • 修改ssh端口
### GitLab Shell settings for GitLab
gitlab_rails['gitlab_shell_ssh_port'] = 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.test_email('idudiao@163.com', '测试邮件标题', '测试邮件正文').deliver_now

收到邮件,Get!

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

然后创建个项目试试


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

总结

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

官方会给出详细介绍



当你使用docker镜像遇到困惑时,可以试着查看这些文档。

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

  • 暴露端口:-p
  • 挂载文件(数据、配置、日志):-v
  • 设置参数:-e
  • 修改配置文件

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容