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.domains[0].main=wuxinkeoo.top

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

  • --entrypoints.websecure.http.tls.domains[0].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.domains[0].main=wuxinke.com

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

  • --entrypoints.websecure.http.tls.domains[0].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协议不安全,暂时还没得到解决。
相关推荐
小扳几秒前
Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)
运维·spring boot·后端·mysql·spring cloud·docker·容器
运维小文4 分钟前
服务器硬件介绍
运维·服务器·计算机网络·缓存·硬件架构
是安迪吖15 分钟前
nfs服务器
运维·服务器
鱼骨不是鱼翅16 分钟前
模拟回显服务器
运维·服务器
politeboy1 小时前
关于k8s中镜像的服务端口被拒绝的问题
云原生·容器·kubernetes
weixin_438197381 小时前
K8S创建云主机配置docker仓库
linux·云原生·容器·eureka·kubernetes
Elastic 中国社区官方博客1 小时前
使用真实 Elasticsearch 进行更快的集成测试
大数据·运维·服务器·数据库·elasticsearch·搜索引擎·集成测试
舞动CPU7 小时前
linux c/c++最高效的计时方法
linux·运维·服务器
皮锤打乌龟8 小时前
(干货)Jenkins使用kubernetes插件连接k8s的认证方式
运维·kubernetes·jenkins
钰@8 小时前
小程序开发者工具的network选项卡中有某域名的接口请求,但是在charles中抓不到该接口
运维·服务器·小程序