有勇气的牛排博客

docker部署项目 入门版

有勇气的牛排 480 云原生 2023-05-18 23:16:25

1 通用

1.1 权限

开启挂载目录权限

#开启目录权限 chmod a+rwx /usr/local/test #开启docker挂载权限 chmod a+rw /var/run/docker.sock

所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxx/_data

1.2 可视化

  • portainer(先用这个)
  • Rancher(CI/CD再用)

什么是portainer?

Docker图形化界面管理工具!提供一个后台面板供我们操作

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer # 测试 http://42.192.168.139:8088/

平时不适用,可以测试玩玩、

学习参考:
https://www.bilibili.com/video/BV1og4y1q7M4

2 部署nginx

[root@vitloud home]# docker search nginx NAME DESCRIPTION STARS OFFICIAL AUTOMATED nginx Official build of Nginx. 16148 [OK]
# 下载 docker pull nginx # 运行测试 # -d: 后台运行 # -name: 给容器命名 # -p: 宿主机端口:容器内部端口 # -v: /宿主机路径:容器内路径 docker run -d \ -v cnginx:/etc/nginx \ -p 3344:80 \ --name vitcloud-nginx nginx # 测试 curl localhost:3344 # 进入容器nginx01 [root@vitloud home]# docker exec -it nginx01 /bin/bash # 查找nginx配置路径 root@e7979f326715:/# whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx

image.png

思考问题:我们每次改动nginx配置文件,都需要进入容器内部?十分麻烦,我要是可以在容器外部提供一个映射路径,达到在容器修改文件名,容器就可以自动修改?-v 数据卷

3 部署tomcat

# 官方的使用 docker run -it --rm tomcat:9.0 # 我们之前的启动都是后台,停止了容器之后,容器还是可以查到 docker run -it rm. 一般用来测试,用完删除 # 下载再启动 docker pull tomcat # 启动运行 # 访问地址:域名:3355 docker run -d -p 3355:8080 -name tomcate01 tomcat # 进入容器 [root@vitloud home]# docker exec -it tomcate01 /bin/bash # 部署网站 cd /usr/local/tomcat/webapps cp -r webapps.dist/* webapps # 发现问题:1、linux命令少了,2、没有webapps,阿里云镜像的原因,默认是最小镜像,所有不必要的都剔除掉

思考问题:我们以后部署项目,如果每次都要进入容器是不是十分麻烦?我要是可以在容器外部提供一个映射路径,webapps我们在外部放置项目,就自动同步到内部就好了。

4 部署MySQL

# 后去镜像 docker pull mysql:5.7 # 运行容器,需要做数据挂载!(需要配置密码) # 官方测试 # docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag # -d: 后台运行 # -p: 端口映射 暴露端口:容器端口 # -v: 卷挂载 # -e: 环境配置 # --name: 容器名字
docker run -d \ -p 3310:3306 \ -v /home/mysql/conf:/etc/mysql/conf.d \ -v /home/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=root \ --name mysql01 mysql:5.7

可以通过Navicat连接测试
删除容器 数据也在

5 实战:部署Redis集群

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wIDQub8X-1643381954752)(image-20220121230315954.png)]

5.1 配置网卡

# 创建网卡 docker network create redis --subnet 172.38.0.0/16 # 查看网卡 docker network ls

5.1 通过脚本创建redis配置文件

for port in $(seq 1 6); \ do mkdir -p /mydata/redis/node-${port}/conf touch /mydata/redis/node-${port}/conf/redis.conf cat << EOF >>/mydata/redis/node-${port}/conf/redis.conf port 6379 bind 0.0.0.0 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 172.38.0.1${port} cluster-announce-port 6379 cluster-announce-bus-port 16379 appendonly yes EOF done

5.3 启动 docker redis 容器

# -p: 端口映射 外部端口:内部端口 # -d: 后台运行 # --net: 使用redis网络 # -ip: 绑定ip docker run -p 6371:6379 -p 16371:16379 --name redis-1 \ -v /mydata/redis/node-1/data:/data \ -v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf docker run -p 6372:6379 -p 16372:16379 --name redis-2 \ -v /mydata/redis/node-2/data:/data \ -v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf docker run -p 6373:6379 -p 16373:16379 --name redis-3 \ -v /mydata/redis/node-3/data:/data \ -v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf docker run -p 6374:6379 -p 16374:16379 --name redis-4 \ -v /mydata/redis/node-4/data:/data \ -v /mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf docker run -p 6375:6379 -p 16375:16379 --name redis-5 \ -v /mydata/redis/node-5/data:/data \ -v /mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf docker run -p 6376:6379 -p 16376:16379 --name redis-6 \ -v /mydata/redis/node-6/data:/data \ -v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

5.4 进入容器并创建集群

# 进入容器 docker exec -it redis-1 /bin/sh # 创建集群 # 集群切片:--cluster-plicas 1 redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1

5.5 连接测试

# -c: 集群 redis-cli -c # 查看集群信息 127.0.0.1:6379> cluster info # 查看集群节点 cluster nodes set a b -> Redirected to slot [15495] located at 172.38.0.13:6379 OK # 模拟redis-3宕机 172.38.0.13 docker stop redis-3

使用dokcer后,所有的技术都会慢慢遍的简单

7 部署es+kibana

elasticsearch

es 暴露端口很多

es 十分耗内存

es的数据一般需要放置到安全目录!挂载

# --net somenetwork ? 网络配置 # 启动 docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2 # 会很卡 docker stats # 查看cpu的状态 # 赶紧关闭,在呢个价内存的限制,修改配置文件 -e 环境配置修改 # -e ES_JAVA_OPTS="-Xms64 -Xmx512m" docker run -d --name elasticsearch01 --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2 # 测试是否成功 curl localhost:9200

留言

专栏
文章
加入群聊