当前位置: 首页 > article >正文

Docker生存手册:安装到服务一本通

文章目录

  • 一. Docker 容器介绍
    • 1.1 什么是Docker容器?
    • 1.2 为什么需要Docker容器?
    • 1.3 Docker架构
    • 1.4 Docker 相关概念
    • 1.5 Docker特点
  • 二. Docker 安装
    • 2.1 查看Linux内核版本
    • 2.2 卸载老版本docker,避免产生影响
    • 2.3 升级yum 和配置源
    • 2.4 安装Docker
    • 2.5 启动Docker
    • 2.6 验证Docker
    • 2.7 设置Docker开机自启
    • 2.8 配置镜像加速器
    • 2.9 验证镜像加速是否生效
    • 2.10 卸载Docker
  • 三. Docker 命令
    • 3.1 镜像命令
    • 3.2 容器命令
    • 3.3 数据卷命令
    • 3.4 其他命令
    • 3.5 参考
  • 四、Docker安装常用服务指南
    • 4.1 ◆ Docker安装Nginx
      • 4.1.1 普通安装方式
      • 4.1.2 挂载配置方案
        • 方案一:Volume数据卷挂载
        • 方案二:目录挂载(生产推荐)
    • 4.2 ◆ Docker安装MySQL
      • 4.2.1 基础安装步骤
      • 4.2.2 数据持久化方案
        • 数据卷挂载模式
        • 目录挂载模式(推荐)
    • 4.3 ◆ Docker安装Nacos集群
      • 4.3.1 单节点部署
      • 4.3.2 集群部署方案
    • 4.4 ◆ Docker安装Redis
      • 4.4.1 基础安装
      • 4.4.2 持久化配置
        • 配置文件挂载
    • 4.5 ◆ Docker安装ElasticSearch
      • 4.5.1 ElasticSearch部署
      • 4.5.2 Kibana可视化
    • 4.6 服务验证清单


一. Docker 容器介绍

1.1 什么是Docker容器?

Docker 是一种开源的容器化平台,允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中。通过 Docker,应用程序可以在任何环境中快速部署和运行,确保开发、测试和生产环境的一致性。

1.2 为什么需要Docker容器?

项目部署的困扰:

  • 环境一致性:开发、测试、生产环境应当保持一致,但由于各种原因,往往会出现环境差异,导致部署出现问题。

  • 版本管理:不同开发人员在开发过程中,可能会使用不同的开发工具、编程语言、框架,导致版本管理混乱。

  • 依赖管理:不同项目依赖不同的库,如果没有统一的依赖管理,部署会出现问题。
    Docker如何解决这些问题?

  • Docker 容器化:Docker 容器化解决了环境一致性问题,将开发环境、测试环境、生产环境打包成一个容器,确保开发、测试、生产环境的一致性。

  • Docker 镜像:Docker 镜像解决了版本管理问题,将开发环境、测试环境、生产环境的依赖打包成镜像,确保开发人员使用统一的开发工具、编程语言、框架。

  • Docker 仓库:Docker 仓库解决了依赖管理问题,将镜像上传到仓库,其他开发人员可以下载使用。

1.3 Docker架构

  • 服务端(server): Docker守护进程,负责处理Docker指令,管理镜像、容器等
  • 客户端(client): 通过命令或RestAP向Docker服务端发送指令。可以在本地或远程向服务端发送指令
  • 远程仓库(registry): 远程仓库是Docker用来保存镜像的地方,可以理解为代码仓库。
    在这里插入图片描述

1.4 Docker 相关概念

  • 镜像(Image): Docker镜像是一个只读的模板,包含了运行容器所需的一切。
  • 容器(Container): 容器是一个运行中的镜像实例,可以启动、停止、删除、暂停等。
  • 仓库(Repository): Docker仓库是一个集中存放镜像文件的地方,每个镜像都有唯一的ID,并可以被推送到多个仓库。
  • 标签(Tag): 标签是镜像的版本,可以用来区分同一个镜像的不同版本。
  • Dockerfile: Dockerfile是用来构建Docker镜像的文本文件,包含了一条条的指令来构建镜像。
  • 卷(Volume): 卷是一个可供一个或多个容器使用的目录,它可以绕过联合文件系统,直接存取底层文件系统。

1.5 Docker特点

  • 轻量级:Docker 容器的大小仅几十MB,相比虚拟机镜像大小只有几百MB。
  • 便携:Docker 可以在任何 Linux 机器上运行,并不需要安装Docker软件,只需要安装Docker引擎。
  • 隔离:Docker 使用容器技术,容器之间互相隔离,互不影响,更安全。文件隔离、系统隔离、资源隔离、网络隔离、日志隔离等。每个容器都完全独立运行在一个沙盒中,所有数据、资源都是隔离的,比如,CPU、内存等等,网络上会为每个容器虚拟一个ip地址,docker为每个容器都提供自己的日志,互不影响。

二. Docker 安装

2.1 查看Linux内核版本

uname -r

要求3.0版本以上

2.2 卸载老版本docker,避免产生影响

如果服务器安装过docker,没有卸载再次安装会导致安装失败,首先要卸载老版本(咱们没安装过docker,可以不需要这个操作,不过可以试一下。)

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-selinux \
    docker-engine-selinux \
    docker-engine \
    docker-ce

2.3 升级yum 和配置源

yum工具可以安装软件,安装docker时需要更多工具,操作系统自带不够,所以要升级。

yum install -y yum-utils

配置本地镜像源

yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

更新镜像源

yum makecache fast

2.4 安装Docker

yum install -y docker-ce

docker-ce是社区版,docker-ee是企业版,这里安装的是社区版。社区版是免费的,企业版收费。

2.5 启动Docker

systemctl start docker

2.6 验证Docker

docker version

2.7 设置Docker开机自启

systemctl enable docker

2.8 配置镜像加速器

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://hub-mirror.c.163.com"]
}
EOF
systemctl restart docker

或者阿里云加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://wm7fopru.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

或者修改/etc/docker/daemon.json文件

{
  "registry-mirrors": ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"]
}

然后重启Docker

systemctl daemon-reload
systemctl restart docker

2.9 验证镜像加速是否生效

docker info

其中Registry Mirrors就是镜像加速器的地址。

2.10 卸载Docker

yum remove docker-ce

三. Docker 命令

3.1 镜像命令

  • 镜像名称一般分两部分组成[tag]。
  • 在没有指定tag时,默认是latest,代表最新版本的镜像
docker images:查看本地镜像列表
docker pull:拉取镜像
docker rmi:删除镜像
docker tag:给镜像打标签
docker save:保存镜像
docker load:加载镜像
docker build:构建镜像

在这里插入图片描述
案例:拉取nginx镜像

docker pull nginx

如果不指定镜像名称,则默认拉取latest版本的镜像(最新版本)。

案例:删除镜像

docker rmi nginx

如果有版本号,则删除指定版本的镜像。 如果镜像正在运行,则无法删除。

案例:给镜像打标签

docker tag nginx:latest my-nginx:v1.0

案例:保存镜像

docker save -o nginx.tar nginx:latest

案例:加载镜像

docker load -i nginx.tar

案例:构建镜像

docker build -t my-nginx:v1.0 .
  • docker build命令的-t参数指定镜像的名称和标签,.表示当前目录。
  • docker build命令的.表示Dockerfile文件所在目录。
  • docker build命令的-t参数可以指定多个镜像名称和标签,多个镜像之间用空格隔开。

3.2 容器命令

  • 容器名称一般分两部分组成[id]。
  • 在没有指定name时,默认是随机生成的。
docker run:运行容器
docker ps:查看容器列表
docker start:启动容器
docker stop:停止容器
docker restart:重启容器
docker rm:删除容器
docker logs:查看容器日志
docker exec:进入容器

在这里插入图片描述
案例:运行nginx容器

docker run -d -p 80:80 --name my-nginx nginx

docker run 命令参数说明:

  • docker run命令的-d参数表示后台运行容器。
  • docker run命令的-p参数表示将容器的80端口映射到主机的80端口。如:如:-p 81:80表示将容器的80端口映射到主机的81端口。
  • docker run命令的--name参数表示给容器指定名称。如果不指定名称,则默认随机生成名称。
  • docker run命令的nginx参数表示启动的镜像名称。必须指定镜像名称,否则会报错。
  • docker run命令的-v参数表示将主机的目录挂载到容器的目录。如:-v /data/my-data:/usr/share/nginx/html表示将主机的/data/my-data目录挂载到容器的/usr/share/nginx/html目录。
  • docker run命令的-e参数表示设置环境变量。
  • docker run命令的-it参数表示进入交互模式。
  • docker run命令的--network参数表示指定容器的网络模式。如--network=host表示容器使用宿主机的网络。
  • docker run命令的--restart参数表示设置容器的重启策略。如--restart=always表示容器总是重启。

案例:查看容器列表

docker ps

docker ps 命令参数说明

  • docker ps命令 默认只显示运行中的容器。
  • docker ps命令的-a参数表示显示所有容器,包括停止的容器。
  • docker ps命令的-q参数表示只显示容器的ID。
  • docker ps命令的-f参数表示根据条件过滤容器。

案例:启动容器

docker start my-nginx

案例:停止容器

docker stop my-nginx

案例:重启容器

docker restart my-nginx

案例:删除容器

docker rm my-nginx

docker rm命令的参数说明:

  • docker rm命令的-f参数表示强制删除容器。

案例:查看容器日志

docker logs my-nginx

案例:进入容器

docker exec -it my-nginx /bin/bash
  • docker exec命令的-it参数表示进入交互模式。
  • docker exec命令的my-nginx参数表示容器名称。
  • docker exec命令的/bin/bash参数表示进入容器的bash命令行。

3.3 数据卷命令

数据卷可以让容器之间共享数据,容器之间的数据修改会立即同步到所有容器。

  • docker volume create:创建数据卷
  • docker volume ls:查看数据卷列表
  • docker volume inspect:查看数据卷详情
  • docker volume rm:删除数据卷
  • docker run:使用数据卷

案例:创建数据卷

docker volume create my-data

案例:查看数据卷列表

docker volume ls

案例:查看数据卷详情

docker volume inspect my-data

案例:删除数据卷

docker volume rm my-data

案例:使用数据卷

docker run -d -p 80:80 --name my-nginx -v my-data:/usr/share/nginx/html nginx
  • docker run命令的-v参数表示将主机的my-data目录挂载到容器的/usr/share/nginx/html目录。
  • 这样,主机的my-data目录中的内容会同步到容器的/usr/share/nginx/html目录,容器的/usr/share/nginx/html目录中的内容会同步到主机的my-data目录。

3.4 其他命令

  • 复制内容到主机
docker cp my-nginx:/usr/share/nginx/html/ /data/my-data/
  • 导入/导出镜像
docker save -o my-nginx.tar my-nginx:v1.0
docker load -i my-nginx.tar
  • 导入/导出容器
docker export -o my-nginx.tar my-nginx
docker import my-nginx.tar my-nginx:v1.0

3.5 参考

Docker命令大全
Docker官方文档
Docker中文文档
Docker入门教程
Docker从入门到实践

四、Docker安装常用服务指南

4.1 ◆ Docker安装Nginx

4.1.1 普通安装方式

操作流程:

  1. 拉取镜像
docker pull nginx
# 或加载本地镜像
docker load -i nginx.tar
  1. 运行容器
docker run -d -p 80:80 --name nginx-test nginx

参数说明:

  • -d:后台运行
  • -p 80:80:端口映射(主机:容器)
  • --name:容器命名

4.1.2 挂载配置方案

方案一:Volume数据卷挂载
# 创建数据卷
docker volume create nginx-{html,conf}-volume

# 启动容器
docker run -d -p 80:80 --name nginx-test \
  -v nginx-html-volume:/usr/share/nginx/html \
  -v nginx-conf-volume:/etc/nginx \
  nginx
方案二:目录挂载(生产推荐)
# 创建本地目录
mkdir -p /opt/mount/nginx/{html,conf.d}

# 复制默认配置
docker cp nginx-test:/usr/share/nginx/html /opt/mount/nginx/
docker cp nginx-test:/etc/nginx/conf.d /opt/mount/nginx/

# 重新挂载启动
docker run -d -p 80:80 --name nginx-prod \
  -v /opt/mount/nginx/html:/usr/share/nginx/html \
  -v /opt/mount/nginx/conf.d:/etc/nginx/conf.d \
  nginx

注意事项:

  • 访问验证:curl http://localhost
  • 配置文件修改后需重启容器生效
  • 生产环境建议绑定80+443端口

4.2 ◆ Docker安装MySQL

4.2.1 基础安装步骤

  1. 拉取镜像
docker pull mysql:8.0
  1. 启动容器
docker run -d -p 3306:3306 --name mysql-test \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql:8.0

4.2.2 数据持久化方案

数据卷挂载模式
docker volume create mysql-{data,conf}-volume

docker run -d -p 3306:3306 --name mysql-prod \
  -v mysql-data-volume:/var/lib/mysql \
  -v mysql-conf-volume:/etc/mysql/conf.d \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql:8.0
目录挂载模式(推荐)
mkdir -p /opt/mount/mysql/{data,conf.d}

docker run -d -p 3306:3306 --name mysql-prod \
  -v /opt/mount/mysql/data:/var/lib/mysql \
  -v /opt/mount/mysql/conf.d:/etc/mysql/conf.d \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql:8.0

关键配置说明:

# my.cnf 配置文件示例
[mysqld]
character-set-server=utf8mb4
default_authentication_plugin=mysql_native_password

4.3 ◆ Docker安装Nacos集群

4.3.1 单节点部署

docker run -d \
  --name nacos-standalone \
  -p 8848:8848 -p 9848:9848 -p 9849:9849 \
  -e MODE=standalone \
  -e JVM_XMS=512m -e JVM_XMX=512m \
  nacos/nacos-server:v2.3.0

4.3.2 集群部署方案

  1. 准备3台服务器(node1/node2/node3)
  2. 每台执行:
mkdir -p /opt/nacos/{logs,conf,data}

docker run -d \
  --name nacos-cluster \
  --network=host \
  -v /opt/nacos/logs:/home/nacos/logs \
  -v /opt/nacos/conf:/home/nacos/conf \
  -v /opt/nacos/data:/home/nacos/data \
  -e MODE=cluster \
  -e NACOS_SERVERS="node1:8848,node2:8848,node3:8848" \
  -e JVM_XMS=2g -e JVM_XMX=2g \
  nacos/nacos-server:v2.3.0

MySQL集成配置:

-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.1.100 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=nacos \
-e MYSQL_SERVICE_PASSWORD=Nacos@1234

4.4 ◆ Docker安装Redis

4.4.1 基础安装

docker run -d \
  --name redis-test \
  -p 6379:6379 \
  redis:7.0

4.4.2 持久化配置

配置文件挂载
mkdir -p /opt/mount/redis/{conf,data}

# redis.conf 核心配置
echo '
bind 0.0.0.0
protected-mode no
requirepass 123456
appendonly yes
' > /opt/mount/redis/conf/redis.conf

docker run -d \
  --name redis-prod \
  -p 6379:6379 \
  -v /opt/mount/redis/conf:/usr/local/etc/redis \
  -v /opt/mount/redis/data:/data \
  redis:7.0 redis-server /usr/local/etc/redis/redis.conf

性能调优参数:

maxmemory 2gb
maxmemory-policy allkeys-lru

4.5 ◆ Docker安装ElasticSearch

4.5.1 ElasticSearch部署

# 创建专用网络
docker network create es-net

# 单节点运行
docker run -d \
  --name es-node \
  --network es-net \
  -p 9200:9200 -p 9300:9300 \
  -e "discovery.type=single-node" \
  -e "ES_JAVA_OPTS=-Xms4g -Xmx4g" \
  -v es-data:/usr/share/elasticsearch/data \
  elasticsearch:8.6.0

4.5.2 Kibana可视化

docker run -d \
  --name kibana \
  --network es-net \
  -p 5601:5601 \
  -e ELASTICSEARCH_HOSTS=http://es-node:9200 \
  kibana:8.6.0

安全配置建议:

# elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

4.6 服务验证清单

服务验证方式预期结果
Nginxcurl -I http://localhostHTTP/1.1 200 OK
MySQLmysql -h 127.0.0.1 -P 3306 -u root -p成功登录
Redisredis-cli -h 127.0.0.1 -a 123456 pingPONG
ElasticSearchcurl http://localhost:9200JSON格式节点信息
Kibana浏览器访问 http://IP:5601Kibana欢迎界面


http://www.kler.cn/a/589276.html

相关文章:

  • Part2:基于国内源完成Kubernetes集群部署
  • k8s-dashboard
  • 【学习笔记】【C++】哪些函数不能是虚函数
  • Chart GPT、DeepSeek 辅助学习H3C网络工程师考试(一)
  • rsync 备份 clickhouse
  • 【AI论文】MM-Eureka:基于规则的大规模强化学习探索视觉“啊哈”时刻
  • P1591 阶乘数码
  • 12.16some pro about py model
  • 微软.NET框架下通信技术理解与实践
  • STM32U575RIT6单片机(二)
  • 机器学习扫盲系列(1) - 序
  • 【leetcode hot 100 114】二叉树展开为链表
  • uniapp-x 之useAttrs只读
  • C++ std::list超详细指南:基础实践(手搓list)
  • 【CSS】二、浏览器调试与文字样式
  • 计算机网络笔记再战——理解几个经典的协议HTTP章4
  • Excel(函数篇):COUNTIF与CONUTIFS函数、SUMIF与SUMIFS函数、ROUND函数、MATCH与INDEX函数、混合引用与条件格式
  • 使用 Theos 开发 iOS 应用(IPA)记事本
  • 【NLP】 6. 词向量的可变性及其影响
  • DeepSeek本地部署 (Windows+Ollama+Docker Desktop+ RAGFlow)