开发中经常需要安装一些常用的服务软件,如Nginx、MySql、Redis等,如果按照普通的安装方法,一般都相对比较繁琐 ——
要经过下载软件或源码包,编译安装,配置,启动等步骤,使用 Docker 来安装这些服务软件能极大地简化安装过程,且速度也很快。

 

本文以下操作假定你已经装好了docker,并做好了镜像配置。如果没有,请参考 Docker笔记(三):
<http://mp.weixin.qq.com/s?__biz=MzIyMzYwMjA5MA==&mid=2247483781&idx=1&sn=b2180c8f86949f8b9edef17fbcb02d25&chksm=e81af540df6d7c56bf9392fb1ad727f99de1d6dd5896afe8b4157e20816fcc4c65827ad77e8f&scene=21#wechat_redirect>
Docker安装与配置
<http://mp.weixin.qq.com/s?__biz=MzIyMzYwMjA5MA==&mid=2247483781&idx=1&sn=b2180c8f86949f8b9edef17fbcb02d25&chksm=e81af540df6d7c56bf9392fb1ad727f99de1d6dd5896afe8b4157e20816fcc4c65827ad77e8f&scene=21#wechat_redirect>

1. MySql 安装

1.1 下载镜像
~$ docker pull mysql:5.7
1.2 创建挂载目录
~$ mkdir -p apps/mysql/conf apps/mysql/data apps/mysql/logs
如上分别创建了配置文件目录,数据存放目录,以及日志文件目录

1.3 启动容器实例
~$ docker run -d -p 3306:3306 --name mysql -v
/home/devuser/apps/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
-v /home/devuser/apps/mysql/logs:/var/log/mysql -v
/home/devuser/apps/mysql/data:/var/lib/mysql \
--restart=always -e MYSQL_ROOT_PASSWORD=Passw0rd mysql:5.7
其中

-d:表示在后台运行
-p:宿主机端口与容器端口映射
–name:容器名称
-v:宿主机目录与容器目录映射
–restart=always:除非被docker stop命令明确停止,否则一直尝试重启处于停止态的容器;如果Docker重启,也会自动启动容器
-e:设置环境变量,这里设置了mysql root用户的密码为Passw0rd

如此,MySql服务就跑起来了,很快很简单有木有。

 

2. Redis 安装

2.1 拉取镜像
~$ docker pull redis:5.0.5
2.2 启动容器
~$ docker run -d --name redis -p 6379:6379 -v
/home/devuser/apps/redis/data:/data \
--restart=always redis:5.0.5 redis-server --appendonly yes --requirepass "
Passw1rd"
-p, -v 与上同,不赘述
redis-server –appendonly yes : 在容器启动时执行redis-server命令,并打开redis持久化配置
–requirepass:设置密码

2.3 连接
~$ docker exec -it redis redis-cli -h 172.17.0.4 -p 6379 -a Passw1rd Warning:
Using a password with'-a' or '-u' option on the command line interface may not
be safe.172.17.0.4:6379> keys * (empty list or set) 172.17.0.4:6379>
 这种方式把密码暴露了,其它登录用户通过history即可看到密码,不是太安全。可改用如下方式,
~$ docker exec -it redis redis-cli 127.0.0.1:6379> 127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.127.0.0.1:6379> auth 'Passw1rd' OK 127.0.
0.1:6379> keys * (empty list or set) 127.0.0.1:6379>
 

3. Nginx 安装

3.1 拉取镜像
~$ docker pull nginx
不加标签默认会拉取最新的(latest)镜像

3.2 创建目录
~$ mkdir -p apps/nginx/html apps/nginx/logs apps/nginx/conf
3.3 先不指定映射路径启动一个容器
~$ docker run -d -p 80:80 --name nginx nginx
1fdcd13457a6eaacb511878e10d84ffbe48fe63fd1fb3705f58b2d4195b151d8
这里如果直接指定映射路径运行会报错,
~$ docker run -d -p 80:80 --name nginx -v
~/apps/nginx/html:/usr/share/nginx/html -v
~/apps/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v
~/apps/nginx/logs:/var/log/nginx nginx
dab56c13f9e76aad37fcf73411c78d495a6466f1c0d214949650dbae44adddf4 docker: Error
response from daemon: OCI runtime create failed: container_linux.go:345:
starting container process caused"process_linux.go:424: container init caused
\"rootfs_linux.go:58: mounting \\\"/home/devuser/apps/nginx/conf/nginx.conf\\\"
to rootfs
\\\"/home/docker_image/overlay2/e40ccaf4d845a9af92487b47cbc4d505c5c776800ef8887c5b43833b10661427/merged\\\"
at
\\\"/home/docker_image/overlay2/e40ccaf4d845a9af92487b47cbc4d505c5c776800ef8887c5b43833b10661427/merged/etc/nginx/nginx.conf\\\"
caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory
onto afile (or vice-versa)? Check if the specified host path exists and is the
expected type.
3.4 将运行容器的配置文件复制到宿主机目录下 
~$ docker cp 1fdcd13457a6:/etc/nginx/nginx.conf ~/apps/nginx/conf/
3.5 删除容器并重新运行
~$ docker stop 1fdcd1345 ~$ docker rm 1fdcd1345 ~$ docker run -d -p 80:80
--name nginx -v ~/apps/nginx/html:/usr/share/nginx/html -v
~/apps/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v
~/apps/nginx/logs:/var/log/nginx nginx
3.6 更新配置后重新加载
~$ docker kill -s HUP nginx
类似于 nginx -s reload

 

4. 总结

本文没有总结。

 

我的微信公众号:jboost-ksxy (一个不只有技术干货的公众号,欢迎关注)

——————————————————————————————————————



 

 




友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信