Docker创建服务容器-集合

创建网络(同一网络可以内网互通)

docker network create --driver bridge --subnet=子网段 --gateway=网关 网络名

例子:

docker network create --driver bridge --subnet=172.18.0.0/16 --gateway=172.18.1.1 mynet

--driver bridge:通常多个容器之前有互相隔离和互相连通,所以常用自建bridge,再分配创建容器

运行Redis容器(Docker仓库

docker run --name redis -d --network 网络名 --ip 容器网络地址 -p 本地端口:服务器端口 --network-alias 内网名 --restart=always -v 本地地址|Volume:容器地址 redis

例子:

docker run --name redis -d --network mynet --ip 172.18.0.100 -p:6379:6379 --network-alias redis --restart=always -v redis-data:/var/lib/redis redis

--restart=always:自动重启

-v redis-data:/var/lib/redis:将数据存入到volume内防止重新创建容器后数据丢失,也可以将本地数据代替volume

-p:6379:6379:将6379端口暴露出来,方便宿主机连通

--network-alias redis:在mynet网络下指向redis->172.18.1.100,这样在配置redis的地方可以不写死网络地址而是用redis替代,效果等同我们常用的hosts文件

运行MySQL容器(Docker仓库

docker run --name mysql -d -e MYSQL_ROOT_PASSWORD=管理员密码 --network 网络名 --ip 容器网络地址 -p 本地端口:服务器端口 --network-alias 内网名 -v 本地地址|Volume:容器地址 mysql

例子:

docker run --name redis -d -e MYSQL_ROOT_PASSWORD=root-password --network mynet --ip 172.18.0.101 -p:3306:3306 --network-alias mysql -v mysql-data:/var/lib/mysql mysql

-e MYSQL_ROOT_PASSWORD=root-password:为必传的环境变量 用于设置管理员密码(具体看Docker仓库的文档)

另外如果需要宿主机能使用管理软件连接数据库,则需要将访问权限打开,通过容器进入到Mysql CLI,并执行以下命令:

grant all privileges on *.*  to 'root'@'%' ; #赋予权限
flush privileges; #刷新权限

重启下容器,就能从宿主机连通;

运行Consul容器(Docker仓库

docker run --name consul -d --network 网络名 --ip 容器网络地址 -p 本地端口:服务器端口 --network-alias 内网名 consul agent -dev -ui -client=0.0.0.0

开发模式例子:

docker run --name consul -d --network mynet --ip 172.18.0.102 -p 8500:8500 --network-alias consul consul agent -dev -ui -client=0.0.0.0

agent:运行Consul Agent,用于集群

-dev -ui:将会启动Web管理界面

-client=0.0.0.0:接受绑定所有接口

当添加:-join=网络地址 参数时,将会形成集群。

运行Elasticsearch容器(Docker仓库

docker run -d --name 容器名 --net 网络名 --ip 容器网络地址 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:版本号

注:设置容器网络地址可避免变化导致kibana无法连接

运行kibana容器(Docker仓库

docker run -d --name 容器名 --net 网络名 --ip 容器网络地址 -p 5601:5601 kibana:版本号

运行Mongo容器(Docker仓库

docker run -d --network 网络名 --ip 网络Ip -p 27017:27017 --name 容器名 -v 存储或本地路径:/etc/mongo mongo

例子:

docker run -d --network net --ip 172.18.0.100 -p 27017:27017 --name mongo -v mongo-data:/etc/mongo mongo

连接需要鉴权的话:

docker run -d --network net --ip 172.18.0.100 -p 27017:27017 --name mongo -v mongo-data:/etc/mongo  -e MONGO_INITDB_ROOT_USERNAME=用户名 -e MONGO_INITDB_ROOT_PASSWORD=密码 mongo

运行Rabbit容器(Docker仓库

docker run -d --network 网络名 --ip 网络Ip -p 5672:5672 --name 容器名 rabbitmq:3

例子:

docker run -d --network net --ip 172.18.0.116 -p 5672:5672 --hostname rabbit-mq --name rabbit-mq rabbitmq:3

如果需要带管理界面的话:

docker run -d --network net --ip 172.18.0.117 -p 5672:5672 -p 15672:15672 --hostname rabbit-mq -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=guest --name rabbit-mq rabbitmq:3-management