最近学习Docker特此记录下情况,docker采用类似虚拟机方式,模拟真实部署之后的运行环境,确保了生产、测试环境的统一。
概述
docker的各个运行环境被称为容器,容器间物理隔离,可以通过网络连接方式进行桥接
建立网络
docker容器网络模式区分为三种形式:
- 默认网络
- 此网络状态下,容器间无法通讯,只能通过
run命令下增加–link参数进行关联
- 此网络状态下,容器间无法通讯,只能通过
- 桥接网络
- 桥接类似虚拟的网卡桥接,让容器网络与真实网络直连
- 自定义网络
- 生成自定义网络,设定网段,网络中容器间可以直连(遵循IP规则),默认可以通过容器名进行访问
建议docker测试中,采用自定义网络,后续所有配置默认以自定义网络配置。
1 | $ docker network create --subnet=100.0.0.0/16 net |
建立了自定义网络后可以不需要使用ip绑定,该网络下所有服务可以通过
--name设置的别名进行直接访问
- 查看现有网络
1 | $ docker network ls |
功能容器
下面列举了常用的几种功能容器的配置方式。
所有配置,默认工作路径为
/data/docker,下列配置以工作目录为基础目录
Nginx
反向代理服务
- 容器
1 | $ docker pull nginx |
- 配置容器
1 | $ mkdir -p conf.d wwwroot |
nginx需要正常运作,必须对外绑定使用端口(默认是80端口)
nginx配置映射为:
/etc/nginx/nginx.conf => nginx/nginx.conf
/etc/nginx/conf.d/ => nginx/conf.d/
/wwwroot => nginx/wwwroot
nginx支持纯静态网站,这边使用
nginx/wwwroot作为静态网站目录,对应配置文件中的/wwwroot
Redis
redis缓存数据库
- 安装
1 | $ docker pull redis |
- 配置
1 | $ docker run --net net --ip 100.0.0.10 --name redis -d -v $PWD:/data redis redis-server --appendonly yes |
Debug环境: 建议增加参数
-p 6379:6379(在-d参数后),可以在本机直接通过redis://100.0.0.10:6379方式连接
MongoDB
NoSql数据库
- 安装
1 | $ docker pull mongo |
- 配置
1 | $ docker run --net net --ip 100.0.0.11 --name mongodb -d -v $PWD:/data/db mongo --directoryperdb |
Debug环境: 建议增加参数
-p 27017:27017(在-d参数后),可以在本机直接通过mongodb://100.0.0.11:27017方式连接
- 查询
1 | $ docker exec -it mongodb mongo --host 100.0.0.11 |
Node.js
Node.js项目
Dockerfile,生成镜像配置文件
1 | FROM node:lts |
.dockerignore,生成镜像时忽略内容
1 | .git |
package.json,项目配置文件
1 | { |
- 建立image
1 | $ mkdir /data/git/reponame |
- 启用image
1 | $ mkdir -p reponame |
- 配置
1 | $ docker run --net net --ip 100.0.1.11 --name reponame -d -v $PWD:/data/upload reponame |
建议项目容器IP从100.0.1.11开始
