Docker 常用服务 安装使用 教程

Docker安装常用服务

1、 安装mysql

1.拉取mysql镜像到本地

docker pull mysql:tag (tag不加默认最新版本)

2.运行mysql服务

docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:tag --没有暴露外部端口外部不能连接
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:tag --暴露外部端口外部能连接(前提是防火墙开放暴露的端口并且端口不能冲突)

3.进入mysql容器

docker exec -it 容器名称|容器id bash

4.外部查看mysql日志

docker logs 容器名称|容器id

5.mysql容器启动配置

docker run --name mysql -v /root/mysql/data:/var/lib/mysql -v /home/mysql/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:tag
配置项说明:

  • -v /root/mysql/data:/var/lib/mysql:挂载数据
  • -v /home/mysql/my.cnf:/etc/my.cnf:挂载mysql配置文件(根据自己容器内的配置位置,可以进入容器使用find / -name my.cnf 查询配置文件所在位置)
  • -e MYSQL_ROOT_PASSWORD=root:设置root账号的密码

6.通过其他客户端访问 如在window系统|macos系统使用客户端工具访问可以实现数据的备份(客户端工具方式)

7.将mysql数据库备份为sql文件(命令方式)

docker exec mysql|容器id sh -c 'exec mysqldump --all-databases -uroot -p"MYSQL_ROOT_PASSWORD"' \> /root/all-databases.sql --导出全部数据 docker exec mysql sh -c 'exec mysqldump --databases 库表 -uroot -p"MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql --导出指定库数据
docker exec mysql sh -c 'exec mysqldump --no-data --databases 库表 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql --导出指定库数据不要数据

9.执行sql文件到mysql中

docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /root/xxx.sql

2、 安装Redis服务

1.在docker hub搜索redis镜像

docker search redis

2.拉取redis镜像到本地

docker pull redis

3.启动redis服务运行容器(基础)

docker run --name redis -d redis:tag (没有暴露外部端口)
docker run --name redis -p 6379:6379 -d redis:tag (暴露外部宿主机端口为6379进行连接)
docker run --name redis -v 宿主机目录:/data -p 6379:6379 -d redis:tag redis-server --appendonly yes(开启持久化)

4.查看启动日志

docker logs -t -f 容器id|容器名称

5.进入容器内部查看

docker exec -it 容器id|名称 bash

6.加载外部自定义配置启动redis容器

第一种:下载对应版本的redis,把redis.conf上传到宿主机,修改自己需要修改的配置然后起动(覆盖全部配置启动)
(1)默认情况下redis官方镜像中没有redis.conf配置文件 需要去官网下载指定版本的配置文件
(2)wget http://download.redis.io/releases/redis-5.0.8.tar.gz 下载官方安装包
(3)将官方安装包中配置文件进行复制到宿主机指定目录中如 /data/redis_data/redis.conf文件
(4)修改需要自定义的配置
bind 0.0.0.0 ----------开启远程访问
appendonly yes ---------开启持久化
appendfilename "appendonly.aof" ----------持久化文件名称
(5)加载配置启动
docker run --name redis -v /data/redis_data/data:/data -v /data/redis_data/redis.conf:/etc/redis/redis.conf --restart=always -p 6379:6379 -d redis:4.0.14 redis-server /etc/redis/redis.conf
解释:
-v /data/redis_data/data:/data:挂在数据到宿主机,实现持久化
-v /data/redis_data/redis.conf:/etc/redis/redis.conf:挂在配置文件
--restart=always:设置redis容器随docker启动而自启动
redis-server /etc/redis/redis.conf:指定redis在docker中的配置文件路径,后台启动redis
第二种:创建一个redis.conf文件,然后配置你所需要的修改的配置,然后启动(覆盖局部配置启动)(推荐使用这种,因为不会修改它一些默认配置)
(1)创建redis.conf文件(/data/redis_data/目录下)
touch redis.conf
(2)修改redis.conf文件
vi redis.conf
(3)添加如下配置
bind 0.0.0.0 ----------开启远程访问
appendonly yes ---------开启持久化
appendfilename "appendonly.aof" ----------持久化文件名称
(4)加载创建的配置启动
docker run --name redis -v /data/redis_data:/data -p 6379:6379 -d redis:5.0.10 redis-server /data/redis.conf

3、 安装Nginx

1.在docker hub搜索nginx

docker search nginx

2.拉取nginx镜像到本地(如下下载没有指定版本默认下载最新版本)

root@localhost \~# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
afb6ec6fdc1c: Pull complete
b90c53a0b692: Pull complete
11fa52a0fdc0: Pull complete
Digest: sha256:30dfa439718a17baafefadf16c5e7c9d0a1cde97b4fd84f63b69e13513be7097
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

3.启动nginx容器(基础)

docker run --name nginx01 -p 80:80 -d nginx:1.19.10

4.进入容器

docker exec -it nginx01 bash
查找nginx目录:
find / -name 'nginx' -------------------关于nginx的所有目录
find / -name 'nginx.conf' --------------nginx的配置文件所在目录(/etc/nginx/nginx.conf)
find / -name 'index.html' --------------nginx的index页面所在目录也是nginx的资源目录(/usr/share/nginx/html/index.html)

5.然后退出容器到宿主机

exit

6.复制配置文件到宿主机

docker cp nginx01(容器id|容器名称):/etc/nginx/nginx.conf 宿主机目录
例如:docker cp nginx-test:/etc/nginx/nginx.conf ./

7.挂在nginx配置以及html到宿主机外部

docker run --name nginx02 -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/html:/usr/share/nginx/html -p 80:80 -d nginx:1.19.10
nginx可以作为负载均衡,也可以作为服务器使用。


4、 安装Tomcat

1.在docker hub搜索tomcat

docker search tomcat

2.下载tomcat镜像

docker pull tomcat

3.运行tomcat镜像

docker run -p 8080:8080 -d --name mytomcat tomcat

4.进入tomcat容器

docker exec -it mytomcat bash

5.将webapps目录挂载在外部

docker run -p 8080:8080 -v /root/webapps:/usr/local/tomcat/webapps -d --name mytomcat tomcat
#注意:如果挂载server.xml配置文件,挂载的路径要精确到server.xml文件
#如下示例:
docker run --name hkht-tomcat -p 8081:8081 -v /data/hkht/tomcat/webapps:/usr/local/tomcat/webapps -v /data/hkht/tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml -d tomcat:8.0-jre8
#这里再注意:下面的图片中挂载配置文件是直接挂载到conf文件,暂时不知道什么原因,但是在实践中挂载到conf不精确到配置文件,访问前端资源是无法访问的(前后端不分离的web项目)。
#还有就是这里选用tomcat的8.0-jre8镜像而不是单独的版本号8.0,因为没有单独的下载jdk镜像,如果要是用8.0需采用dockerfile进行打包,我是直接下载了包含jre的tomcat,这样就可以运行项目了(前后端不分离的web项目)。


5、 安装MongoDB数据库

1.运行mongDB

docker run -d -p 27017:27017 --name mymongo mongo ---无须权限
docker logs -f mymongo ---查看mongo运行日志

2.进入mongodb容器

docker exec -it mymongo bash
直接执行mongo命令进行操作

3.常见具有权限的容器

docker run --name mymongo -p 27017:27017 -d mongo --auth

4.进入容器配置用户名密码

mongo
use admin 选择admin库
db.createUser({user:"root",pwd:"root",roles:{role:'root',db:'admin'}}) //创建用户,此用户创建成功,则后续操作都需要用户认证
exit

5.将mongoDB中数据目录映射到宿主机中

docker run -d -p 27017:27017 -v /root/mongo/data:/data/db --name mymongo mongo

6、 安装ElasticSearch

  • 注意: 调高JVM线程数限制数量

0.拉取镜像运行elasticsearch

1.dockerhub 拉取镜像

docker pull elasticsearch:6.4.2

2.查看docker镜像

docker images

3.运行docker镜像

docker run -p 9200:9200 -p 9300:9300 elasticsearch:6.4.2

  • 启动出现如下错误

1. 预先配置

1.在centos虚拟机中,修改配置sysctl.conf

vim /etc/sysctl.conf

2.加入如下配置

vm.max_map_count=262144

3.启用配置

sysctl -p
注:这一步是为了防止启动容器时,报出如下错误:
bootstrap checks failed max virtual memory areas vm.max_map_count 65530 likely too low, increase to at least 262144

2.启动EleasticSearch容器

0.复制容器中data目录到宿主机中

docker cp 容器id:/usr/share/share/elasticsearch/data /root/es

1.运行ES容器 指定jvm内存大小并指定ik分词器位置

docker run -d --name es -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms128m -Xmx128m" -v /root/es/plugins:/usr/share/elasticsearch/plugins -v /root/es/data:/usr/share/elasticsearch/data elasticsearch:6.4.2

3.安装IK分词器

1.下载对应版本的IK分词器

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.2/elasticsearch-analysis-ik-6.4.2.zip

2.解压到plugins文件夹中

yum install -y unzip
unzip -d ik elasticsearch-analysis-ik-6.4.2.zip

3.添加自定义扩展词和停用词

cd plugins/elasticsearch/config
vim IKAnalyzer.cfg.xml
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">ext_dict.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">ext_stopwords.dic</entry>
</properties>

4.在ik分词器目录下config目录中创建ext_dict.dic文件 编码一定要为UTF-8才能生效

vim ext_dict.dic 加入扩展词即可

5. 在ik分词器目录下config目录中创建ext_stopword.dic文件

vim ext_stopwords.dic 加入停用词即可

6.重启容器生效

docker restart 容器id

7.将此容器提交成为一个新的镜像

docker commit -a="xiaochen" -m="es with IKAnalyzer" 容器id xiaochen/elasticsearch:6.4.2

4. 安装Kibana

1.下载kibana镜像到本地

docker pull kibana:6.4.2

2.启动kibana容器

docker run -d --name kibana -e ELASTICSEARCH_URL=http://10.15.0.3:9200 -p 5601:5601 kibana:6.4.2

7.docker可视化工具

7.1 安装Portainer

官方安装说明: https://www.portainer.io/installation/

root@ubuntu1804 \~#docker pull portainer/portainer

-d:后台启动,-p:映射端口,--name:容器名称,--restart=always:开机自启动,-v:挂在

root@ubuntu1804 \~#docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
20db26b67b791648c2ef6aee444a5226a9c897ebcf0160050e722dbf4a4906e3
root@ubuntu1804 \~#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20db26b67b79 portainer/portainer "/portainer" 5 seconds ago Up 4 seconds 0.0.0.0:8000->8000/tcp, 0.0.0.0:9000->9000/tcp portainer

7.2 登录和使用Portainer

用浏览器访问: http://localhost:9000

7.3 忘记admin的密码,重置并查看密码

#查看容器
docker ps
#查看容器详情
docker inspect 容器id/名称
#复制图中目录地址

#执行如下命令:docker run --rm -v 挂在目录地址:/data portainer /helper-reset-password
docker run --rm -v /var/lib/docker/volumes/436d93252d9a382768eab7e9b7a29b8a10cbbf990257e37c9171eedc8df21c2e/_data:/data portainer/helper-reset-password

#然后重新启动portainer
docker start portainer
#再次访问登录

8.安装Traefik

官网地址:Traefik Labs: Say Goodbye to Connectivity Chaos

1、什么是Traefik

Traefik 是一种开源 边缘路由器,它使您发布服务成为一种有趣而轻松的体验。它代表您的系统接收请求并找出哪些组件负责处理它们。
Traefik 的与众不同之处在于,除了它的许多功能之外,它还可以自动为您的服务发现正确的配置。当 Traefik 检查您的基础架构时,奇迹就会发生,它会在其中找到相关信息并发现哪个服务服务于哪个请求。
Traefik 原生兼容所有主要的集群技术,例如 Kubernetes、Docker、Docker Swarm、AWS、Mesos、Marathon,等等;并且可以同时处理很多。(它甚至适用于在裸机上运行的遗留软件。)
使用 Traefik,无需维护和同步单独的配置文件:一切都自动实时发生(无需重启,无连接中断)。使用 Traefik,您可以花时间为系统开发和部署新功能,而不是配置和维护其工作状态。

2、概念

Traefik 基于入口点、路由器、中间件和服务的概念。
主要功能包括动态配置、自动服务发现以及对多个后端和协议的支持。

  • EntryPoints: 是进入 Traefik 的网络入口点。 它们定义将接收数据包的端口,以及是否监听 TCP 或 UDP。
  • 路由器: 路由器负责将传入请求连接到可以处理它们的服务。
  • 中间件: 附加到路由器,中间件可以在发送到您的服务之前修改请求或响应。
  • 服务: 服务负责配置如何到达最终将处理传入请求的实际服务。

Traefik 是一个Edge Router,这意味着它是您平台的大门,它拦截并路由每个传入请求:它知道确定哪些服务处理哪些请求的所有逻辑和每条规则(基于pathhost头等)。

传统上边缘路由器(或反向代理)需要一个配置文件,其中包含到您的服务的每条可能路径,Traefik 从服务本身获取它们。
部署您的服务,您附加信息告诉 Traefik 服务可以处理的请求的特征。

这意味着当一个服务被部署时,Traefik 会立即检测到它并实时更新路由规则。同样,当一个服务从基础设施中移除时,对应的路由也会相应地被删除。
您不再需要创建和同步混杂着 IP 地址或其他规则的配置文件。

3、快速入门(使用docker-compose启动)

3.1、阿里云

3.1.1、首先需要有阿里云域名,然后就是需要有一台服务器哪个平台购买的无所谓,注意域名需要是备案过的。

3.1.2、添加域名解析

3.1.3、添加密钥和RAM角色
添加密钥

添加RAM角色,首先选择创建角色指定角色名称,然后分配权限, 通过关键字搜索授权策略AliyunACMFullAccess, 点击授权策略,将其添加到右侧选中的授权列表中,点击确定。

3.1.4、创建 docker-compose.yml文件
touch docker-compose.yml

3.1.5、创建本地网络
docker network create proxy

3.1.6、编写traefik的docker-compose.yml

version: '3.8'

网络

networks:
proxy:
external: true

定义数据卷

volumes:
acme:
services:

服务名称

traefik:

镜像

image: traefik:v2.5.4

网络

networks:

  • proxy

端口

ports:

  • "80:80"
  • "443:443"
  • "8080:8080"
    volumes:

时区

  • /etc/timezone:/etc/timezone
  • /etc/localtime:/etc/localtime

使Traefik 能够监听 Docker 事件

  • /var/run/docker.sock:/var/run/docker.sock

生成持久化acme证书

  • acme:/etc/acme

密钥位置

env_file:

  • ./.alidns.env
    command:

是否开启api的路由转发功能

  • --api.insecure=true

底层代理的是什么

  • --providers.docker

使用docker的那个网络

  • --providers.docker.network=proxy

是否暴露docker

  • --providers.docker.exposedByDefault=false

web

web端口

  • --entryPoints.web.address=:80

是否将http重定向

  • --entrypoints.web.http.redirections.entrypoint.permanent=true

重定向的类别

  • --entrypoints.web.http.redirections.entrypoint.scheme=https

重定向入口

  • --entrypoints.web.http.redirections.entrypoint.to=websecure

websecure

websecure端口

  • --entryPoints.websecure.address=:443

是否自动申请证书

  • --entrypoints.websecure.http.tls=true

证书申请厂商

  • --entrypoints.websecure.http.tls.certresolver=ali

申请的主域名

  • --entrypoints.websecure.http.tls.domains0.main=wuxinkeoo.top

扫描该层级域名的所有域名

  • --entrypoints.websecure.http.tls.domains0.sans=*.wuxinkeoo.top

Let's Encrypt

申请厂商

  • --certificatesresolvers.ali.acme.dnschallenge.provider=alidns

邮箱

申请证书存储位置

  • --certificatesresolvers.ali.acme.storage=/etc/acme/acme.json

描述

labels:

是否交给traefik管理

  • "traefik.enable=true"

路由入口

  • "traefik.http.routers.traefik.entrypoints=web, websecure"

路由规则

  • "traefik.http.routers.traefik.rule=Host(`proxy.wuxinkeoo.top`)"

路由端口

  • "traefik.http.services.traefik.loadbalancer.server.port=8080"

3.1.7、创建.alidns.env文件,然后填写厂商密钥
touch .alidns.env

3.1.8、将密钥和RAM角色信息编写到.alidns.env

ALICLOUD_ACCESS_KEY=LTAIxxxxxxxxxxxxxxxxxxx
ALICLOUD_SECRET_KEY=VMy3xxxxxxxxxxxxxxxxxxx
ALICLOUD_REGION_ID=root

3.1.9、启动
docker-compose up -d

3.1.10、访问

3.2、腾讯云

3.2.1、首先需要有腾讯云域名,然后就是需要有一台服务器哪个平台购买的无所谓,注意域名需要是备案过的。

3.2.2、添加域名解析(腾讯不支持使用通配符*,所以只能具体表明)

3.2.3、创建访问密钥(如果已经存在使用之前的就可以了)
快速访问地址:登录 - 腾讯云

3.2.4、创建docker-compose
touch docker-compose.yml
3.2.5、创建网络
docker network create proxy
3.2.6、创建.tencentcloud.env
touch .tencentcloud.env
3.2.7、将密钥编写到.tencentcloud.env

TENCENTCLOUD_SECRET_ID=AKIxxxxxxxxxxxxxxxx
TENCENTCLOUD_SECRET_KEY=rSpxxxxxxxxxxxxxxx
3.2.8、编写docker-compose.yml文件
version: '3.8'

网络

networks:
proxy:
external: true

定义数据卷

volumes:
acme:
services:

服务名称

traefik:

镜像

image: traefik:v2.5.4

网络

networks:

  • proxy

端口

ports:

  • "80:80"
  • "443:443"
  • "8080:8080"
    volumes:

时区

  • /etc/timezone:/etc/timezone
  • /etc/localtime:/etc/localtime

使Traefik 能够监听 Docker 事件

  • /var/run/docker.sock:/var/run/docker.sock

生成持久化acme证书

  • acme:/etc/acme

密钥位置

env_file:

  • ./.tencentcloud.env
    command:

是否开启api的路由转发功能

  • --api.insecure=true

底层代理的是什么

  • --providers.docker

使用docker的那个网络

  • --providers.docker.network=proxy

是否暴露docker

  • --providers.docker.exposedByDefault=false

web

web端口

  • --entryPoints.web.address=:80

是否将http重定向

  • --entrypoints.web.http.redirections.entrypoint.permanent=true

重定向的类别

  • --entrypoints.web.http.redirections.entrypoint.scheme=https

重定向入口

  • --entrypoints.web.http.redirections.entrypoint.to=websecure

websecure

websecure端口

  • --entryPoints.websecure.address=:443

是否自动申请证书

  • --entrypoints.websecure.http.tls=true

证书申请厂商

  • --entrypoints.websecure.http.tls.certresolver=tencent

申请的主域名

  • --entrypoints.websecure.http.tls.domains0.main=wuxinke.com

扫描该层级域名的所有域名

  • --entrypoints.websecure.http.tls.domains0.sans=*.wuxinke.com

Let's Encrypt

申请厂商

  • --certificatesresolvers.ali.acme.dnschallenge.provider=tencentcloud

邮箱

申请证书存储位置

  • --certificatesresolvers.ali.acme.storage=/etc/acme/acme.json

描述

labels:

是否交给traefik管理

  • "traefik.enable=true"

路由入口

  • "traefik.http.routers.traefik.entrypoints=web, websecure"

路由规则

  • "traefik.http.routers.traefik.rule=Host(`proxy.wuxinke.com`)"

路由端口

  • "traefik.http.services.traefik.loadbalancer.server.port=8080"
    注意:服务器记得开放8080端口
    3.2.9、启动
    docker-compose up -d
    3.2.10、访问测试

    注意:访问时他会提示,HTTPS协议不安全,暂时还没得到解决。
相关推荐
SelectDB11 小时前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
曲幽18 小时前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220703 天前
如何搭建本地yum源(上)
运维
武子康3 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树885 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠5 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质5 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工6 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn866 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker