docker部署项目 入门版

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 作者主页:https://www.couragesteak.com/

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

在这里插入图片描述

思考问题:我们每次改动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

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

在这里插入图片描述

思考问题:我们每次改动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
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
15天前
|
监控 文件存储 Docker
实现NAS远程下载,Docker部署qBittorrent、Transmission、贝锐花生壳
与电脑不同,NAS通常7x24小时运行,便于下载资源,解决BT/PT下载需长时间在线的问题。因此,qBittorrent、Transmission等下载管理工具成为NAS用户的必备应用。通过Docker,用户可在多种NAS设备上快速安装这些工具,并通过局域网IP地址+端口访问。然而,缺乏公网IPv4地址导致远程访问困难,贝锐花生壳提供了解决方案,允许无公网IP情况下通过固定域名远程访问NAS中的下载工具,简化了部署过程,使用户能随时随地控制家中的下载任务。
130 33
实现NAS远程下载,Docker部署qBittorrent、Transmission、贝锐花生壳
|
8天前
|
应用服务中间件 Docker 容器
docker应用部署---Tomcat的部署配置
这篇文章介绍了如何使用Docker部署Tomcat服务器,包括搜索和拉取Tomcat镜像、创建容器并设置端口映射和目录映射,以及如何创建一个HTML页面并使用外部机器访问Tomcat服务器。
docker应用部署---Tomcat的部署配置
|
8天前
|
关系型数据库 MySQL 数据安全/隐私保护
docker应用部署---MySQL的部署配置
这篇文章介绍了如何使用Docker部署MySQL数据库,包括搜索和拉取MySQL镜像、创建容器并设置端口映射和目录映射、进入容器操作MySQL,以及如何使用外部机器连接容器中的MySQL。
docker应用部署---MySQL的部署配置
|
4天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
1天前
|
Linux 持续交付 Docker
掌握Docker:从入门到实践
Docker 是一个开源容器引擎,允许开发者将应用及其依赖打包成可移植的容器,在任意 Linux 机器上运行。本文从基本概念入手,详细介绍 Docker 的安装、基本操作、镜像构建及 Docker Compose 的使用,并通过实战案例展示如何部署 Web 应用、构建微服务架构及实现 CI/CD。通过学习,你将掌握 Docker 的核心功能,提升应用开发和部署效率。
|
14天前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
9天前
|
前端开发 应用服务中间件 nginx
docker部署本地前端项目思路
docker部署本地前端项目思路
23 7
|
9天前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
29 4
|
8天前
|
应用服务中间件 nginx Docker
docker应用部署---nginx部署的配置
这篇文章介绍了如何使用Docker部署Nginx服务器,包括搜索和拉取Nginx镜像、创建容器并设置端口映射和目录映射,以及如何创建一个测试页面并使用外部机器访问Nginx服务器。
|
10天前
|
关系型数据库 Linux 虚拟化
Docker入门基础实战
Docker入门基础实战
下一篇
无影云桌面