当前位置: 代码迷 >> MySQL >> mac中创设mysql docker容器、docker中搭建java服务及nginx反向代理
  详细解决方案

mac中创设mysql docker容器、docker中搭建java服务及nginx反向代理

热度:462   发布时间:2016-05-05 16:18:35.0
mac中创建mysql docker容器、docker中搭建java服务及nginx反向代理

github上有一个专门的docker-libary项目,里面有各种各样常用的docker镜像,可以做为学习的示例,今天研究下其中mysql镜像的用法,国内镜像daocloud.io也能找到mysql的镜像,但根据其参考文档在mac上尝试了数次,将mysql数据库文件存储在mac本机时,启动总是报错,大意是docker容器运行时,容器的当前用户mysql,由于权限不足无法mac本机上创建文件,stackoverflow上有人解决了这个问题,参考其解决方法,重新整理了下Dockerfile文件,内容如下(主要是增加了vim的安装,以方便直接在容器内修改mysql配置文件):

1
2
3
4
5
6
7
8
9
FROM mysql:latest
?
MAINTAINER jimmy.yang <[email protected]>
LABEL Descripttion="This image is build for MAC to use mysql"?Vendor="GitHub"?Version="latest"
RUN apt-get update
RUN apt-get -y?install?vim
RUN?usermod?-u 1000 mysql
RUN?mkdir?-p?/var/run/mysqld
RUN?chmod?-R 777?/var/run/mysqld

将上面这段保存成名为"Dockerfile"的文件,然后在当前目录下,输入:

1
docker build -t?"yjmyzz/mysql-osx:latest"?.

注意最后有一个点,-t后的内容为image的tag,可以根据需要修改成自己的内容。build完成后,可用docker images ls确认下是否在本机生成了名为yjmyzz/mysql-osx的镜像,接着就可以创建mysql容器了,示例如下:

1
2
3
4
docker run -d -h mysql \
??-v?/Users/yjmyzz/data/db/mysql:/var/lib/mysql?\
??-p 0.0.0.0:3306:3306 --name mysql \
??-e MYSQL_ROOT_PASSWORD=123456 yjmyzz/mysql-osx

上面有几个参数值大家根据需要自行调整:

-v 后面的/Users/yjmyzz/data/db/mysql 为mac本机的目录,用于存放mysql数据库文件(创建前要注意该目录必须为空,且必须是当前登录用户~/下,且要有读写权限)

-p 后面的部分为端口映射

MYSQL_ROOT_PASSWORD=123456为root账号的密码

?

mac上连接验证:

1
mysql -h192.168.99.100 -uroot -p123456?

上面的ip地址,大家换成自己虚拟机default的IP

?

mysql参数调整:

先进入容器

1
docker?exec?-it mysql sh

然后在容器内

1
vi?/etc/mysql/my.cnf

注意:修改完mysql参数后,如果直接在容器内 service mysql restart ,容器就退出了(因为mysql stop完成的瞬间,没有命令在运行,容器生命周期结束),需要在mac机上执行

1
docker start mysql

?

上传镜象

为了以后使用方便,可以将mac版的mysql镜像上传到daocloud.io,命令如下:

1
2
3
docker login daocloud.io
docker tag yjmyzz/mysql-osx?daocloud.io/yjmyzz/mysql-osx:latest
docker push daocloud.io/yjmyzz/mysql-osx:latest

提醒:daocloud push上去的镜像,目前未提供删除功能(客服说是以后会提供),一旦上传了,目前就没办法删除了,所以千万不要在镜像里放一些敏感信息。  

参考文章:

1.?官网dockerfile用法?

?

docker学习(6) docker中搭建java服务及nginx反向代理

?

先看下容器规划:

上图中mysql容器的搭建见上篇博客,service1/2为java rest service,创建脚本如下:

1
2
3
4
5
6
7
8
9
10
11
docker run -d -h service1 \
??-v?/Users/yjmyzz/data/service:/opt/service?\
??--name service1 \
??--link mysql:mysql -p 0.0.0.0:9081:8080 java \
??java -jar opt/service/spring-boot-rest-framework-1.0.0.jar
?
docker run -d -h service2 \
??-v?/Users/yjmyzz/data/service:/opt/service?\
??--name service2 \
??--link mysql:mysql -p 0.0.0.0:9082:8080 java \
??java -jar opt/service/spring-boot-rest-framework-1.0.0.jar  

注:对外的端口映射可选,因为最后会用nginx转发,暴露出来是为了方便单独测试service1及service2是否正常。

nginx容器的创建脚本如下:

1
2
3
4
5
6
7
8
docker run -d -h nginx1 \
??-v?/Users/yjmyzz/data/nginx/html:/usr/share/nginx/html:ro \
??-v?/Users/yjmyzz/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
??-v?/Users/yjmyzz/data/nginx/conf/conf.d:/etc/nginx/conf.d:ro \
??-p 0.0.0.0:9000:80 \
??--link service1:service1 \
??--link service2:service2 \
??--name nginx1 nginx

注:因为nginx1要访问service1/2,所以用了二个link来打通nginx1到service1/2的网络访问,另外有3个-v参数,分别用于映射静态资源、主配置文件、虚拟主机映射文件,最后将80端口映射到mac本机9000端口。

~/data/nginx/conf/nginx.conf参考配置如下:

~/data/nginx/conf/conf.d/default.conf参考配置如下:

参考文章:

docker-nginx镜像使用文档

docker-java镜像使用文档

  相关解决方案