目录

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

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


一. 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用来保存镜像的地方,可以理解为代码仓库。 https://i-blog.csdnimg.cn/direct/d4c36290d99e40319ac6ff0399044f62.png

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
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:构建镜像 https://i-blog.csdnimg.cn/direct/757fd5d78f314c2493dcbb845887f781.png 案例:拉取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:进入容器 https://i-blog.csdnimg.cn/direct/99af63d25b874e588285f4edcc5c28e6.png 案例:运行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安装常用服务指南

4.1 ◆ Docker安装Nginx

4.1.1 普通安装方式

操作流程:

  1. 拉取镜像 docker pull nginx

或加载本地镜像

docker load -i nginx.tar 2. 运行容器 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
  2. 启动容器 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欢迎界面