开发中经常需要安装一些常用的服务软件, 如 Nginx,MySQL,Redis 等, 如果按照普通的安装方法, 一般都相对比较繁琐 -- 要经过下载软件或源码包, 编译安装, 配置, 启动等步骤, 使用 Docker 来安装这些服务软件能极大地简化安装过程, 且速度也很快.
本文以下操作假定你已经装好了 docker, 并做好了镜像配置. 如果没有, 请参考 Docker 笔记(三):Docker 安装与配置
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 a file (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 (一个不只有技术干货的公众号, 欢迎关注)
--------------------------------------
来源: https://www.cnblogs.com/spec-dog/p/11320513.html