在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情
特别是现在,系统越来越复杂,所需要连接的一些中间件也越来越多.
然而要顺利的安装好这些中间件也是一个比较费时费力的工作.
俗话说"工欲善其事,必先利其器",这篇文章,就跟大家一起分享一下使用docker在本地环境或者测试环境快速搭建我们常用的一些中间件容器的方法,
(这里没有提及生产环境,并不是说生产环境不能使用docker,只是说要在生产环境上使用,请务必根据自身的实际情况,做好充分的评估)
docker支持多种操作系统,本文的内容则是基于centos7操作系统的
docker的文档写的很清晰,大家可以在
https://docs.docker.com/engine/installation/linux/docker-ce/centos/
站点中按照文档的步骤一步一步的安装docker , 假如一切正常 , 大家在命令行输入version , 会得到如下结果 :
- $ sudo docker version
- # 结果输出 :
- Client:
- Version: 17.09.0-ce-rc2
- API version: 1.32
- Go version: go1.8.3
- Git commit: 363a3e7
- Built: Thu Sep 14 01:54:43 2017
- OS/Arch: linux/amd64
- Server:
- Version: 17.09.0-ce-rc2
- API version: 1.32 (minimum version 1.12)
- Go version: go1.8.3
- Git commit: 363a3e7
- Built: Thu Sep 14 01:56:05 2017
- OS/Arch: linux/amd64
- Experimental: false
docker的命令还有很多 , 大家可以在 :
https://docs.docker.com/reference/
站点中找到其他命令的文档
一般情况,我们使用run命令来创建一个容器 , 此命令的主要格式如下 :
docker run {指令/参数} {registry地址}/{组织名称}/{镜像名称}:{版本}
{registry地址}/{组织名称}/{镜像名称}:{版本} 这一串内容组成了一个docker镜像唯一的标识 , 具体值可能是这样的 :
wjrfy32i.mirror.aliyuncs.com/library/nginx:latest
以上字符串描述了阿里云的nginx镜像,然后是latest版本 (指的是最新版本)
- $ sudo mkdir /var/lib/mysql && chown -R 200 /var/lib/mysql
以上命令创建了一个目录,用于存放mysql数据库文件
- $ sudo docker run \
- -d \
- --restart=always \
- -p 3306:3306 \
- -e TZ="Asia/Shanghai" \
- -v /etc/localtime:/etc/localtime:ro \
- -v /var/lib/mysql:/var/lib/mysql \
- --name mysql \
- -e MYSQL_ROOT_PASSWORD=XXX \
- wjrfy32i.mirror.aliyuncs.com/library/mysql:latest
其中-e MYSQL_ROOT_PASSWORD=XXX指定了mysql数据库的root密码
- $ sudo mkdir /var/lib/rabbitmq && chown -R 200 /var/lib/rabbitmq
- $ sudo mkdir /var/log/rabbitmq && chown -R 200 /var/log/rabbitmq
以上命令创建了用于存放rabbitmq数据文件和日志文件的路径
- $ sudo docker run \
- -d \
- --restart=always \
- --hostname rabbitmq \
- --name rabbitmq \
- -p 15672:15672 \
- -p 5672:5672 \
- -e TZ="Asia/Shanghai" \
- -v /etc/localtime:/etc/localtime:ro \
- -v /var/lib/rabbitmq:/var/lib/rabbitmq \
- -v /var/log/rabbitmq:/var/log/rabbitmq \
- -e RABBITMQ_DEFAULT_USER=admin \
- -e RABBITMQ_DEFAULT_PASS=xxx \
- wjrfy32i.mirror.aliyuncs.com/library/rabbitmq:3.6.10-management-alpine
其中-e RABBITMQ_DEFAULT_USER和-e RABBITMQ_DEFAULT_PASS用于指定rabbitmq控制台管理员的账户和密码
- $ sudo mkdir /var/lib/redis && chown -R 200 /var/lib/redis
- $ sudo mkdir /var/lib/redis_conf && chown -R 200 /var/lib/redis_conf
以上命令创建了用于存放redis数据文件和配置文件的目录
另外,配置文件可以从redis.conf可以从redis官网获取,并且上传至宿主机的/var/lib/redis_conf目录
- $ sudo docker run \
- -d \
- --restart=always \
- --hostname redis \
- --name redis \
- -p 6379:6379 \
- -e TZ="Asia/Shanghai" \
- -v /etc/localtime:/etc/localtime:ro \
- -v /var/lib/redis:/data \
- -v /var/lib/redis_conf/redis.conf:/usr/local/etc/redis/redis.conf \
- wjrfy32i.mirror.aliyuncs.com/library/redis:latest \
- redis-server /usr/local/etc/redis/redis.conf
在将宿主机的/var/lib/redis_conf/redis.conf映射到容器中,并且指定redis-server使用的配置文件
- $ sudo mkdir /var/lib/nginx && chown -R 200 /var/lib/nginx
- $ sudo mkdir /var/lib/nginx/conf.d && chown -R 200 /var/lib/nginx/conf.d
- $ sudo mkdir /var/lib/nginx_conf && chown -R 200 /var/lib/nginx_conf
- $ sudo mkdir /var/lib/nginx_content && chown -R 200 /var/lib/nginx_content
- $ sudo mkdir /var/log/nginx && chown -R 200 /var/log/nginx
- $ sudo mkdir /var/lib/nginx_file && chown -R 200 /var/lib/nginx_file
- $ sudo docker run -d --hostname nginx --name nginx -p 80:80 wjrfy32i.mirror.aliyuncs.com/library/nginx:latest
- $ sudo docker cp nginx:/etc/nginx/nginx.conf /var/lib/nginx/nginx.conf
- $ sudo docker cp nginx:/etc/nginx/conf.d/default.conf /var/lib/nginx/conf.d/default.conf
- $ sudo docker cp nginx:/usr/share/nginx/html/50x.html /var/lib/nginx_content/50x.html
- $ sudo docker cp nginx:/usr/share/nginx/html/index.html /var/lib/nginx_content/index.html
- $ sudo docker rm -f nginx
以上命令创建了一些列目录,用于存放nginx的静态文件以及配置文件,
并且使用cp命令从nginx中拷贝了原始的配置文件,以及默认的html文件
最后删除了用于拷贝文件而创建的容器
- $ sudo docker run \
- -d \
- --restart=always \
- --hostname nginx \
- --name nginx \
- --link=rabbitmq:rabbitmq \
- -p 81:81 \
- -e TZ="Asia/Shanghai" \
- -v /etc/localtime:/etc/localtime:ro \
- -v /var/lib/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
- -v /var/lib/nginx/conf.d:/etc/nginx/conf.d:ro \
- -v /var/lib/nginx_content:/usr/share/nginx/html:ro \
- -v /var/lib/nginx_file:/usr/share/nginx/file:ro \
- -v /var/log/nginx:/var/log/nginx \
- wjrfy32i.mirror.aliyuncs.com/library/nginx:latest
以上命令映射了一系列目录到容器中,主要用于不同场景的静态文件
- <!-- docker -->
- <plugin>
- <groupId>com.spotify</groupId>
- <artifactId>docker-maven-plugin</artifactId>
- <version>1.0.0</version>
- <configuration>
- <imageName>192.168.1.10:5000/${project.groupId}/${project.artifactId}:latest</imageName>
- <baseImage>192.168.1.10:5000/org.itkk/java:8</baseImage>
- <maintainer>wangkangit@163.com</maintainer>
- <exposes>${server.port}</exposes>
- <cmd></cmd>
- <entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
- <resources>
- <resource>
- <directory>${project.build.directory}</directory>
- <include>${project.build.finalName}.jar</include>
- </resource>
- </resources>
- </configuration>
- </plugin>
- $ sudo mvn clean install package docker: build
执行以上命令,在maven构建完成后docker:build会将其构建成docker镜像
自己创建镜像需要有docker registry支持 , 可以使用公共的 , 也可以自建 .
本文因篇幅原因 , 不讲解docker registry的搭建过程 , 有兴趣的同学可以自行百度 .
另外 , 由于构建出来的镜像往往会比较大(至少有100M左右) , 所以使用公共docker registry的同学 , 请注意网速问题 .
在以上的内容中 , 我们创建了rabbitmq,mysql,nginx,rabbitmq这4个常用的中间件 ,
使用docker命令 , 我们可以非常快速的创建这些服务 ,
相比传统的方式来说 , 确实节省了不少的时间和经历 .
当然 , 以上内容都是一些基本的玩法 , docker能做到的事情远不只这些 .
有兴趣的同学可深入了解 .
关于本文内容 , 欢迎大家的意见跟建议
想获得最快更新,请关注公众号
来源: http://www.cnblogs.com/itkk/p/7594880.html