Dokcer的安装

🌈Docker 部署常见应用

Nginx

  1. 使用docker拉取nginx镜像

    1
    docker pull nginx
  2. 修改nginx 配置 vim /usr/local/nginx/nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
client_max_body_size 50m;
client_body_buffer_size 10m;
client_header_timeout 1m;
client_body_timeout 1m;

server {
listen 80;
server_name 172.29.49.90;

location / {
root /usr/local/vue/blog;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}

location ^~ /api/ {
proxy_pass http://172.29.49.90:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

server {
listen 9090;
server_name 172.29.49.90;

location / {
root /usr/local/vue/admin;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}

location ^~ /api/ {
proxy_pass http://172.29.49.90:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
  1. 启动nginx 镜像

    • 已将nginx 配置文件映射到宿主机/opt/module/nginx/nginx.conf
    • 将部署网站的静态目录 映射至/usr/local/vue
    1
    2
    3
    docker run --name nginx --restart=always -p 80:80 -p 443:443 -p 9090:9090 -d -v /opt/module/nginx/nginx.conf:/etc/nginx/nginx.conf -v /opt/module/vue:/usr/local/vue nginx 

    docker run --name nginx --restart=always -p 80:80 -p 443:443 -d -v /opt/module/nginx/nginx.conf:/etc/nginx/nginx.conf -v /opt/module/blog:/opt/module/blog nginx
  2. 查看nginx容器和日志

    1
    2
    3
    4
    5
    # 查看启动容器
    docker ps

    # 查看日志
    docker logs nginx
  3. 若重写了nginx 配置后, 需要重新加载nginx

    1
    2
    # 重启nginx
    docker restart nginx
  4. 测试

MySQL

mysql 5.7 安装

  1. 拉取MySQL 5.7 镜像

    1
    docker pull mysql:5.7
  2. 运行MySQL镜像

    说明: 将MySQL的data/conf/log 全部映射到宿主机的/opt/module/mysql 目录下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    docker run \
    --name mysql \
    -d \
    -p 3306:3306 \
    --restart=always \
    -v /opt/module/mysql/log:/var/log/mysql \
    -v /opt/module/mysql/data:/var/lib/mysql \
    -v /opt/module/mysql/conf:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=123456.. \
    mysql:5.7
  3. 查看MySQL容器和日志

    1
    2
    3
    4
    5
    # 查看启动容器
    docker ps

    # 查看日志
    docker logs mysql
  4. 进入mysql容器, 并测试环境

    1
    docker exec -it mysql /bin/bash

mysql 8.0 安装

  1. 拉取MySQL 8.0 镜像

    1
    docker pull mysql:8.0
  2. 运行MySQL镜像

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    docker run \
    --name mysql8 \
    -d \
    -p 3307:3306 \
    --restart=always \
    -v /opt/module/mysql-8.0/log:/var/log/mysql \
    -v /opt/module/mysql-8.0/data:/var/lib/mysql \
    -v /opt/module/mysql-8.0/conf:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=123456.. \
    mysql:8.0
  3. 查看MySQL容器和日志

    1
    2
    3
    4
    5
    # 查看启动容器
    docker ps

    # 查看日志
    docker logs mysql8
  4. 进入mysql容器, 测试环境

    1
    docker exec -it mysql8 /bin/bash

Redis

  1. 使用docker拉取redis镜像

    1
    docker pull redis

``

  1. 启动Redis容器

    1
    2
    3
    4
    5
    6
    docker run \
    --name redis \
    --restart=always \
    -p 6379:6379 \
    -d redis \
    --requirepass "123456.." # 启动Redis
  2. 连接测试

RabbitMQ

  1. 拉取镜像

    1
    2
    # 拉取镜像
    docker pull rabbitmq:3.13-management
  2. 启动

    1
    2
    3
    4
    5
    6
    7
    8
    9
    docker run -d \
    --name rabbitmq \
    -p 5672:5672 \
    -p 15672:15672 \
    -v rabbitmq-plugin:/plugins \
    -e RABBITMQ_DEFAULT_USER=guest \
    -e RABBITMQ_DEFAULT_PASS=123456 \
    --restart=always \
    rabbitmq:3.13-management

Nacos

  1. 拉取镜像

    1
    2
    # 拉取镜像
    docker pull nacos/nacos-server:v2.1.1
  2. 启动

    1
    2
    3
    4
    5
    6
    7
    8
    docker run -id \
    --name nacos \
    -p 8848:8848 \
    -p 9848:9848 \
    -p 9849:9849 \
    -e MODE=standalone \
    --restart=always \
    nacos/nacos-server:v2.1.1

Sentinel

  1. 拉取镜像

    1
    2
    # 拉取镜像
    docker pull bladex/sentinel-dashboard
  2. 启动

    1
    2
    docker run -p 8858:8858 -d --name=sentinel \
    --restart=always bladex/sentinel-dashboard:latest

Elasticserach

直接使用docker compose搭建ESkibana的环境,

本次使用Window Docker 来安装, 若为Linux 系统, 则可以直接从第三步开始

  1. 拉取镜像

    1
    docker pull elasticsearch:8.5.0
  2. 启动ES容器

    1
    docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:8.5.0
  3. 复制文件到挂载目录后, 停止并删除ES容器

    1
    2
    3
    4
    5
    6
    # 复制配置 
    docker cp elasticsearch:/usr/share/elasticsearch/config/ D:\\Environment\\DockerData\\Elasticsearch\\es_config

    # 停止并删除容器
    docker stop es
    docker rm es
  4. 查看docker compose 环境

    1
    docker-compose --version 
  5. 创建docker-compose.yaml 文件, 内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    services:
    elasticsearch:
    container_name: elasticsearch
    image: elasticsearch:8.5.0
    restart: always
    networks:
    - glsx_net
    ports:
    - "9200:9200"
    - "9300:9300"
    environment:
    - "discovery.type=single-node"
    - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
    - "bootstrap.memory_lock=true"
    volumes:
    - "/d/Environment/DockerData/Elasticsearch/es_config:/usr/share/elasticsearch/config"
    - "/d/Environment/DockerData/Elasticsearch/es_data:/usr/share/elasticsearch/data"
    - "/d/Environment/DockerData/Elasticsearch/es_plugins:/usr/share/elasticsearch/plugins"
    ulimits:
    nproc: 65535
    nofile:
    soft: 65535
    hard: 65535
    kibana:
    container_name: kibana
    image: kibana:8.5.0
    restart: always
    networks:
    - glsx_net
    ports:
    - "5601:5601"
    environment:
    - "ELASTICSEARCH_HOSTS=http://elasticsearch:9200"
    networks:
    glsx_net:
    ipam:
    driver: default
    config:
    - subnet: 172.20.0.0/16
  6. 在创建es的文目录下, 启动容器

    1
    docker compose -f docker-compose.yml up -d
  7. 修改ES 配置, 关闭es的安全模块:

    vim /var/lib/docker/volumes/es_es_config/_data/elasticsearch.yml

    修改值为false, 如下所示:

    image-20241114111503078

  8. 集成ik 分词器

    (若已经有安装包, 则可以直接将解压后的文件复制到挂载的目录下 /d/Environment/DockerData/Elasticsearch/es_plugins)

    1
    2
    3
    4
    5
    # 进入已经启动成功的elasticsearch容器。
    docker exec -it elasticsearch /bin/bash

    # 下载ik分词器
    ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.5.0/elasticsearch-analysis-ik-8.5.0.zip

    ps: 安装的ik分词器的版本一定要与elasticsearch的版本保持一致

    下载完成后, 退出容器, 并重启elasticsearch

  9. 访问ES 和kibana

    http://localhost:5601/

    http://localhost:9200/

⭐Docker常用操作

基础操作

  1. docker常用操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    # 搜索镜像 可以指定版本 docker search mysql:5.7
    docker search 镜像名

    # 查看已经下载的镜像
    docker images

    # 拉取镜像 可以指定版本 如 docker pull mysql:5.7
    docker pull 镜像名

    # 删除镜像
    docker rmi id/名称

    # 查看正在运行的容器
    docker ps -a

    # 停止容器
    docker stop id/名称

    # 删除容器
    docker rm id/名称

    # 查看容器日志
    docker logs id/名称

    # 查看容器内部ip
    docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名 | 容器id

    # 查看目录映射关系
    docker inspect -f "{{.Mounts}}" 【container-ID】

    更改挂载目录

方式一: 更改文件

  1. 关闭docker 服务

    1
    2
    3
    4
    5
    6
    7
    8
    # 关闭docker
    systemctl stop docker.service

    # 查看容器id
    docker ps -a

    # 查看容器的配置文件
    cat /var/lib/docker/containers/【container-ID】/config.v2.json
  2. 使用工具(idea 或 在线工具) 格式化json 文件

  3. 修改挂载的目录, 具体位置如下:

    image-20240807201702736

  4. 启动docker

    1
    2
    3
    4
    # 启动
    systemctl start docker
    # 查看docker状态
    systemctl status docker
  5. 启动容器

    1
    docker restart 【container-ID】

docker 镜像的导出和导入

导出

1
docker save -o myimage_latest.tar myimage:latest

导入

1
docker load -i myimage_latest.tar

docker 日志

docker 的容器日志通常存放在宿主机的 /var/lib/docker/containers/【container-ID】

日志过多时, 可以进行删除

加速Docker镜像拉取

配置Docker 镜像加速

  1. 将镜像加速网站写入/etc/docker/daemon.json

    1
    2
    3
    4
    5
    sudo tee /etc/docker/daemon.json <<EOF
    {
    "registry-mirrors": ["https://docker.211678.top"]
    }
    EOF
  2. 重启Docker 进程

    1
    2
    sudo systemctl daemon-reload
    sudo systemctl restart docker
  3. 若遇见Docker 启动故障, 以下操作可能解决

    1
    2
    3
    4
    5
    mv  /etc/docker/daemon.json  /etc/docker/daemon.conf

    sudo systemctl daemon-reload
    sudo systemctl restart docker

镜像加速网站

  1. https://docker.211678.top

  2. https://dockerproxy.com“,

https://docker.m.daocloud.io“,
https://dockerproxy.com“,
https://docker.mirrors.ustc.edu.cn“,
https://docker.nju.edu.cn

3.

Docker Compose

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
services:
rabbitmq:
container_name: rabbitmq
image: rabbitmq:3.12.0-management
ports:
- "15672:15672"
- "5672:5672"
restart: always
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=123456..
hostname: rabbitmq
volumes:
- "/opt/module/rabbitmq/data:/var/lib/rabbitmq"
- "/opt/module/rabbitmq/conf:/etc/rabbitmq"
- /etc/timezone:/etc/timezone
- /etc/localtime:/etc/localtime
nacos:
container_name: nacos
image: nacos/nacos-server:v2.1.1
restart: always
environment:
- "MODE=standalone"
- "NACOS_USER=admin"
- "NACOS_PASSWORD=123456.."

- "SPRING_DATASOURCE_PLATFORM=mysql"
- "MYSQL_SERVICE_HOST=172.29.49.90"
- "MYSQL_SERVICE_PORT=3307"
- "MYSQL_SERVICE_DB_NAME=nacos"
- "MYSQL_SERVICE_USER=root"
- "MYSQL_SERVICE_PASSWORD=123456.."
- "JVM_XMX=512m"
- "JVM_XMS=512m"
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"

sentinel:
container_name: sentinel
image: bladex/sentinel-dashboard:latest
restart: always
ports:
- "8858:8858"
environment:
- "TZ=Asia/Shanghai"
# nacos访问地址+端口号
- "SENTINEL_NACOS_SERVER_ADDR=nacos:8848"
# nacos访问账号
- "SENTINEL_NACOS_USERNAME=nacos"
# nacos访问密码
- "SENTINEL_NACOS_PASSWORD=123456.."

- "SENTINEL_USERNAME=sentinel"
- "SENTINEL_PASSWORD=123456.."

elasticsearch:
container_name: elasticsearch
image: elasticsearch:8.5.0
restart: always
ports:
- "9200:9200"
- "9300:9300"
environment:
- "discovery.type=single-node"
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
- "bootstrap.memory_lock=true"
volumes:
- "/opt/module/elasticsearch/config:/usr/share/elasticsearch/config"
- "/opt/module/elasticsearch/data:/usr/share/elasticsearch/data"
- "/opt/module/elasticsearch/plugins:/usr/share/elasticsearch/plugins"
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535

kibana:
container_name: kibana
image: kibana:8.5.0
restart: always
ports:
- "5601:5601"
environment:
- "ELASTICSEARCH_HOSTS=http://elasticsearch:9200"

mongodb:
container_name: mongodb
image: mongo:7.0.0
restart: always
volumes:
- "/opt/module/mongodb/config:/data/configdb"
- "/opt/module/mongodb/data:/data/db"
ports:
- "27017:27017"
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=123456..
- MONGO_INITDB_DATABASE=admin

seata-server:
container_name: seata-server
image: seataio/seata-server:2.0.0
hostname: seata-server
restart: always
ports:
- "8091:8091"
- "7091:7091"
environment:
- SEATA_PORT=8091
- SEATA_IP=192.168.200.10
volumes:
- "/opt/module/seata-server/resources:/seata-server/resources"
- "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime" #设置系统时区
- "/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone" #设置时区