一、MySQL 部署
- 容器内的网络服务和外部机器不能直接通信
- 外部机器和宿主机可以直接通信
- 宿主机和容器可以直接通信
- 当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上。
- 外部机访问宿主机的该端口,从而间接访问容器的服务。
- 这种操作称为:端口映射。
# 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3308:3306 \
--name=c_mysql5.7_slave01 \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
- 参数说明
- -p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口。
- -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录。MySQL(5.7.19)的默认配置文件是 /etc/mysql/my.cnf 文件。如果想要自定义配置,建议向 /etc/mysql/conf.d 目录中创建 .cnf 文件。新建的文件可以任意起名,只要保证后缀名是 cnf 即可。新建的文件中的配置项可以覆盖 /etc/mysql/my.cnf 中的配置项。
- -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录
- -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录。
- -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
# 进入容器
[root@iZuf6dfisey1v7so2hyzwtZ mysql]# docker exec -it c_mysql /bin/bash
二、Tomcat 部署
```shell在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir ~/tomcat cd ~/tomcat
docker run -id —name=c_tomcat \ -p 8081:8080 \ -v $PWD:/usr/local/tomcat/webapps \ tomcat
退出后可以进入容器
docker exec -it c2 /bin/bash
```shell
# 在tomcat文件夹里创建一个文件
[root@iZuf6dfisey1v7so2hyzwtZ tomcat]# mkdir test
[root@iZuf6dfisey1v7so2hyzwtZ tomcat]# cd test/
[root@iZuf6dfisey1v7so2hyzwtZ test]# vim index.html
三、Nginx 部署
# 在/root目录下创建nginx目录用于存储nginx数据信息
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
# 在~/nginx/conf/下创建nginx.conf文件,粘贴下面内容
vim nginx.conf
# 在nginx.conf中复制此内容
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
docker run -id --name=nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
第二种方式
首先运行一个nginx :docker run -p 80:80 —name nginx -d nginx:1.10
然后复制内容到外面 docker container cp nginx:/etc/nginx .
接着建立映射关系
docker run --name=nginx \
-p 80:80 \
-v $PWD/conf:/etc/nginx \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
-d nginx:1.10
四、Redis 部署
# 创建容器,设置端口映射
docker run -id --name=c_redis -p 6379:6379 redis:5.0
# 使用外部机器连接redis
./redis-cli -h 192.168.149.135 -p 6379
# 带配置启动
docker run -p 6699:6379 --name myredis -v $PWD/redis.conf:/etc/redis/redis.conf -v $PWD/data:/data -d redis:6.2.1 redis-server /etc/redis/redis.conf --appendonly yes
命令说明:
--name myredis : 指定容器名称,这个最好加上,不然在看docker进程的时候会很尴尬。
-p 6699:6379 : 端口映射,默认redis启动的是6379,至于外部端口,随便玩吧,不冲突就行。
-v $PWD/redis.conf:/etc/redis/redis.conf : 将主机中当前目录下的redis.conf配置文件映射。
-v $PWD/data:/data -d redis:3.2 : 将主机中当前目录下的data挂载到容器的/data
--redis-server --appendonly yes :在容器执行redis-server启动命令,并打开redis持久化配置\
--requirepass "redis123456aB"
注意事项:
如果不需要指定配置,-v $PWD/redis.conf:/etc/redis/redis.conf 可以不用 ,
redis-server 后面的那段 /etc/redis/redis.conf 也可以不用。
## 加密
requirepass redis123456aB 这句话可以写在redis.conf里面
redis-cli -h host -p port -a password
五、ElasticSearch部署&&kibana
docker run --name elasticsearch7.12.1 -p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms128m -Xmx512m" \
-v $PWD/config/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v $PWD/data:/usr/share/elasticsearch/data \
-v $PWD/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.12.1
注意权限问题 chmod 777 /mydata/es
记得在es.yml中写入 http.host : 0.0.0.0
验证:http://127.0.0.1:9200/ 返回一堆信息则表示安装成功
# 启动后进入容器
docker run -it --name elasticsearch7.12.1 -p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
-v $PWD/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v $PWD/data:/usr/share/elasticsearch/data \
-v $PWD/plugins:/usr/share/elasticsearch/plugins \
elasticsearch:7.12.1 /bin/bash
===安装kibana
docker run --name kibana7.12.1 -e ELASTICSEARCH_HOSTS=http://127.0.0.1:9200 -p 5601:5601 -d kibana:7.12.1
kibana连接不上elasticsearch问题
究其原因还是网络的问题
创建docker网络:docker network create —subnet=172.18.0.0/16 mynetwork
docker run --name elasticsearch7.12.1 -p 9200:9200 \
-p 9300:9300 \
--net mynetwork --ip 172.18.0.2 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms128m -Xmx512m" \
-v $PWD/config/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v $PWD/data:/usr/share/elasticsearch/data \
-v $PWD/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.12.1
docker run --name kibana7.12.1 -e ELASTICSEARCH_HOSTS=http://172.18.0.2:9200 -p 5601:5601 -d kibana:7.12.1
docker run --name kibana7.12.1 -p 5601:5601 --net bridge --link elasticsearch7.12.1:elasticsearch7.12.1 -v $PWD/config/kibana.yml:/usr/share/kibana/config/kibana.yml -d kibana:7.12.1
docker run --name kibana -d --net elasticsearch_default --link elasticsearch:elasticsearch -p 5601:5601 -v /data1/docker/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml 3e014820ee3f
六、MangoDB 部署
-- 先安装 --auth:需要密码才能访问容器服务。
docker run -itd --name mongo -p 27017:27017 -v $PWD/db:/data/db mongo:4.2.8 --auth
-- 连接上 mangoDB
docker exec -it mongo mongo admin
-- 创建一个名为 admin,密码为 123456 的用户。
db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]})
-- 尝试使用上面创建的用户信息进行连接。
db.auth('admin', '123456')