一、MySQL 部署

  • 容器内的网络服务和外部机器不能直接通信
  • 外部机器和宿主机可以直接通信
  • 宿主机和容器可以直接通信
  • 当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上。
  • 外部机访问宿主机的该端口,从而间接访问容器的服务。
  • 这种操作称为:端口映射。

image.png

  1. # 在/root目录下创建mysql目录用于存储mysql数据信息
  2. mkdir ~/mysql
  3. cd ~/mysql
  1. docker run -id \
  2. -p 3308:3306 \
  3. --name=c_mysql5.7_slave01 \
  4. -v $PWD/conf:/etc/mysql/conf.d \
  5. -v $PWD/logs:/logs \
  6. -v $PWD/data:/var/lib/mysql \
  7. -e MYSQL_ROOT_PASSWORD=123456 \
  8. 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 用户的密码。
      1. # 进入容器
      2. [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

  1. ```shell
  2. # 在tomcat文件夹里创建一个文件
  3. [root@iZuf6dfisey1v7so2hyzwtZ tomcat]# mkdir test
  4. [root@iZuf6dfisey1v7so2hyzwtZ tomcat]# cd test/
  5. [root@iZuf6dfisey1v7so2hyzwtZ test]# vim index.html

三、Nginx 部署

  1. # 在/root目录下创建nginx目录用于存储nginx数据信息
  2. mkdir ~/nginx
  3. cd ~/nginx
  4. mkdir conf
  5. cd conf
  6. # 在~/nginx/conf/下创建nginx.conf文件,粘贴下面内容
  7. vim nginx.conf
  1. # 在nginx.conf中复制此内容
  2. user nginx;
  3. worker_processes 1;
  4. error_log /var/log/nginx/error.log warn;
  5. pid /var/run/nginx.pid;
  6. events {
  7. worker_connections 1024;
  8. }
  9. http {
  10. include /etc/nginx/mime.types;
  11. default_type application/octet-stream;
  12. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  13. '$status $body_bytes_sent "$http_referer" '
  14. '"$http_user_agent" "$http_x_forwarded_for"';
  15. access_log /var/log/nginx/access.log main;
  16. sendfile on;
  17. #tcp_nopush on;
  18. keepalive_timeout 65;
  19. #gzip on;
  20. include /etc/nginx/conf.d/*.conf;
  21. }
  1. docker run -id --name=nginx \
  2. -p 80:80 \
  3. -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
  4. -v $PWD/logs:/var/log/nginx \
  5. -v $PWD/html:/usr/share/nginx/html \
  6. nginx

第二种方式
首先运行一个nginx :docker run -p 80:80 —name nginx -d nginx:1.10
然后复制内容到外面 docker container cp nginx:/etc/nginx .
接着建立映射关系

  1. docker run --name=nginx \
  2. -p 80:80 \
  3. -v $PWD/conf:/etc/nginx \
  4. -v $PWD/logs:/var/log/nginx \
  5. -v $PWD/html:/usr/share/nginx/html \
  6. -d nginx:1.10

四、Redis 部署

  1. # 创建容器,设置端口映射
  2. docker run -id --name=c_redis -p 6379:6379 redis:5.0
  3. # 使用外部机器连接redis
  4. ./redis-cli -h 192.168.149.135 -p 6379
  5. # 带配置启动
  6. 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
  7. 命令说明:
  8.   --name myredis : 指定容器名称,这个最好加上,不然在看docker进程的时候会很尴尬。
  9.   -p 6699:6379 端口映射,默认redis启动的是6379,至于外部端口,随便玩吧,不冲突就行。
  10.   -v $PWD/redis.conf:/etc/redis/redis.conf 将主机中当前目录下的redis.conf配置文件映射。
  11.   -v $PWD/data:/data -d redis:3.2 : 将主机中当前目录下的data挂载到容器的/data
  12.   --redis-server --appendonly yes :在容器执行redis-server启动命令,并打开redis持久化配置\
  13.   --requirepass "redis123456aB"
  14.   注意事项:
  15.     如果不需要指定配置,-v $PWD/redis.conf:/etc/redis/redis.conf 可以不用
  16.     redis-server 后面的那段 /etc/redis/redis.conf 也可以不用。
  17.     ## 加密
  18.     requirepass redis123456aB 这句话可以写在redis.conf里面
  19. redis-cli -h host -p port -a password

五、ElasticSearch部署&&kibana

  1. docker run --name elasticsearch7.12.1 -p 9200:9200 \
  2. -p 9300:9300 \
  3. -e "discovery.type=single-node" \
  4. -e ES_JAVA_OPTS="-Xms128m -Xmx512m" \
  5. -v $PWD/config/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
  6. -v $PWD/data:/usr/share/elasticsearch/data \
  7. -v $PWD/plugins:/usr/share/elasticsearch/plugins \
  8. -d elasticsearch:7.12.1
  9. 注意权限问题 chmod 777 /mydata/es
  10. 记得在es.yml中写入 http.host : 0.0.0.0
  11. 验证:http://127.0.0.1:9200/ 返回一堆信息则表示安装成功
  12. # 启动后进入容器
  13. docker run -it --name elasticsearch7.12.1 -p 9200:9200 \
  14. -p 9300:9300 \
  15. -e "discovery.type=single-node" \
  16. -e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
  17. -v $PWD/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
  18. -v $PWD/data:/usr/share/elasticsearch/data \
  19. -v $PWD/plugins:/usr/share/elasticsearch/plugins \
  20. elasticsearch:7.12.1 /bin/bash
  21. ===安装kibana
  22. 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问题

image.png
究其原因还是网络的问题
创建docker网络:docker network create —subnet=172.18.0.0/16 mynetwork

  1. docker run --name elasticsearch7.12.1 -p 9200:9200 \
  2. -p 9300:9300 \
  3. --net mynetwork --ip 172.18.0.2 \
  4. -e "discovery.type=single-node" \
  5. -e ES_JAVA_OPTS="-Xms128m -Xmx512m" \
  6. -v $PWD/config/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
  7. -v $PWD/data:/usr/share/elasticsearch/data \
  8. -v $PWD/plugins:/usr/share/elasticsearch/plugins \
  9. -d elasticsearch:7.12.1
  1. docker run --name kibana7.12.1 -e ELASTICSEARCH_HOSTS=http://172.18.0.2:9200 -p 5601:5601 -d kibana:7.12.1
  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
  2. 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 部署

  1. -- 先安装 --auth:需要密码才能访问容器服务。
  2. docker run -itd --name mongo -p 27017:27017 -v $PWD/db:/data/db mongo:4.2.8 --auth
  3. -- 连接上 mangoDB
  4. docker exec -it mongo mongo admin
  5. -- 创建一个名为 admin,密码为 123456 的用户。
  6. db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]})
  7. -- 尝试使用上面创建的用户信息进行连接。
  8. db.auth('admin', '123456')

image.png