• windows安装linux部署docker服务全过程


    windows安装linux

    https://blog.csdn.net/laterstage/article/details/131460688

    如果不能查看linux ip信息,需要安装:yum install net-tools.x86_64 -y

    linux安装Docker

    随着容器技术的兴起,Docker 已经成为了最为流行的容器引擎。它可以快速构建、部署、运行应用程序,并且具有高度的灵活性和可移植性。在 Linux 环境下安装 Docker 非常容易,本文将向您介绍如何在 Linux 上安装 Docker。

    步骤1:检查系统是否满足要求

    在安装 Docker 之前,我们需要检查当前的 Linux 系统版本是否满足要求。Docker 仅支持 64 位的操作系统,而且内核版本需要在 3.10 或以上。可以通过运行以下命令来检查内核版本:

    uname -r

    如果您的系统内核版本低于3.10,那么您需要升级到较新的版本。

    步骤2:卸载旧版本的 Docker

    如果您之前安装过旧版本的 Docker,您需要卸载它们。可以运行以下命令卸载:

    sudo apt-get remove docker docker-engine docker.io containerd runc

    步骤3:安装 Docker CE

    可以使用官方安装脚本来安装 Docker CE。您可以使用以下命令将该脚本下载到您的系统:

    curl -fsSL https:``//get.docker.com -o get-docker.sh

    运行以下命令以启动 Docker 安装:

    sudo sh get-docker.sh

    该命令将下载并安装 Docker CE,以及必要的依赖项和工具。安装程序应该自动将 Docker 服务设置为 Linux 系统引导项之一,并启动 Docker 服务。

    步骤4:验证 Docker 安装

    完成安装后,需要验证 Docker 是否正确安装。可以运行以下命令来验证安装:

    sudo docker run hello-world

    如果 Docker 正确安装,您将看到以下输出:

    Hello from Docker!``This message shows that your installation appears to be working correctly.

    步骤5:使用非 root 用户运行 Docker

    为了更加安全地使用 Docker,我们建议您不要在 root 用户下运行 Docker。可以创建一个名为 docker 的组,并将非 root 用户添加到该组中,以允许该用户管理 Docker。此外,还可以设置 Docker 守护进程,以仅接受通过 Unix 套接字访问 Docker API的请求。可以运行以下命令来完成操作:

    sudo groupadd docker``sudo usermod -aG docker ``$USER``sudo systemctl restart docker

    步骤6:使用 Docker

    现在,您已经成功将 Docker 安装在 Linux 系统上,并为非 root 用户设置了访问权限。您可以在 Docker Hub 上查找和下载任何容器镜像,并使用以下命令运行容器:

    sudo docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

    例如,如果您想运行 ubuntu 镜像并在其中运行 bash 终端,则可以使用以下命令:

    sudo docker run -it ubuntu /bin/bash

    以上命令将启动一个名为 ubuntu 的容器,并在其中启动一个交互式 shell。此时,您可以在其中执行任何命令。

    可以使用以下命令列出当前正在运行的容器:

    sudo docker ps

    如果要停止运行的容器,请使用以下命令:

    sudo docker stop [CONTAINER ID]

    注意事项

    • 在安装 Docker 过程中,安装脚本将添加 Docker apt 仓库,并使用 apt 包管理器安装 Docker。
    • Docker 依赖于 cgroups 和 namespace 功能,因此需要启用 Linux 内核中的这些功能才能正常运行。
    • 如果您使用的是 Ubuntu 系统,则可以访问 Canonical 的 Docker 安装文档,以获取详细的安装说明和建议。
    • 如果您正在使用 Red Hat Enterprise Linux 或 CentOS 等基于 RPM 包管理器的系统,则可以访问 Docker 的 RHEL 安装文档,以获取详细的安装说明和建议。

    关闭防火墙

    1. systemctl disable firewalld
    2. systemctl stop firewalld

    Docker部署Mysql8.0

    1.可能会出现报错:网络不通或者拉取镜像失败

    解决方案
    (1)查看DNS客户机的配置文件

    cat /etc/resolv.conf

    出现了报错信息中的ip
    猜测应该是这个DNS服务器出现了问题

    (2)修改文件

    vim /etc/resolv.conf

    注释掉:nameserver 192.168.100.2
    新增DNS:nameserver 114.114.114.114 nameserver 8.8.8.8请添加图片描述

    2.拉取镜像

    docker pull mysql:8.0.20

    3.拉取镜像加速:

    使用docker的时候,总是需要去search镜像,使用国外的源下载太慢,还有诸多的限制,无意中发现可以使用阿里云进行加速,实测有用,废话少说,操作如下:

    1.打开阿里云控制台,没有的可以用淘宝账号或者支付宝账号直接登录

    https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

    实例:

    1. sudo mkdir -p /etc/docker
    2. sudo tee /etc/docker/daemon.json <<-'EOF'
    3. {
    4. "registry-mirrors": ["https://8sbrqqbm.mirror.aliyuncs.com"]
    5. }
    6. EOF
    7. sudo systemctl daemon-reload
    8. sudo systemctl restart docker

    提醒:阿里云其实也很慢最好用如下推荐:

    1. Docker中国区官方镜像
    2. https://registry.docker-cn.com
    3. 网易
    4. http://hub-mirror.c.163.com
    5. ustc
    6. https://docker.mirrors.ustc.edu.cn
    7. 中国科技大学
    8. https://docker.mirrors.ustc.edu.cn

    安装 docker-compose(redis、mysql 、项目)

    安装插件

    1. yum update
    2. yum install docker-compose-plugin# 安装完成后查看版本号
    3. docker compose version

    多个服务配置文件(过于专业,可以看下面的案例即可):

    1. # Compose 版本 Version 2支持更多的指令。Version 1将来会被弃用。
    2. version: "3"
    3. # 定义服务
    4. services:
    5. # 为project定义服务
    6. redis:
    7. # 服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像
    8. image: redis:5.0.8
    9. # 配置端口 - "宿主机端口:容器暴露端口"
    10. ports:
    11. - "6379:6379"
    12. # 配置容器连接的网络,引用顶级 networks 下的条目(就是最下面配置的networks(一级目录))
    13. networks:
    14. network_name:
    15. # 为单redis创建别名, REDIS_URL标记为redis服务的地址. (不配置aliases也可以, 这样就通过定义的服务名: redis链接)
    16. aliases:
    17. - REDIS_URL
    18. # 挂载
    19. volumes:
    20. - "/docker/redis/conf/redis.conf:/etc/redis/redis.conf"
    21. - "/docker/redis/data:/data"
    22. # 容器总是重新启动
    23. restart: always
    24. # 相当于执行一些命令
    25. command:
    26. redis-server /etc/redis/redis.conf --appendonly yes
    27. # 指定一个自定义容器名称,而不是生成的默认名称。
    28. container_name: redis
    29. # 使用该参数,container内的root拥有真正的root权限。
    30. privileged: true
    31. db:
    32. image: mysql:8.0.33
    33. ports:
    34. - "3306:3306"
    35. # 添加环境变量
    36. environment:
    37. MYSQL_ROOT_PASSWORD: "123456"
    38. volumes:
    39. - "/docker/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf"
    40. - "/docker/mysql/logs:/var/log/mysql"
    41. - "/docker/mysql/data:/var/lib/mysql"
    42. - "/docker/mysql/sql/init.sql:/docker-entrypoint-initdb.d/init.sql"
    43. - "/etc/localtime:/etc/localtime"
    44. networks:
    45. network_name:
    46. aliases:
    47. - MYSQL_URL
    48. restart: always
    49. command: --init-file /docker-entrypoint-initdb.d/init.sql
    50. container_name: mysql
    51. privileged: true
    52. project-name:
    53. # 服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像
    54. image: 9c7a54a9a43c
    55. # 构建镜像
    56. build:
    57. # 指定项目的地址
    58. context: /root/docker_mysql_redis
    59. # 指定Dockerfile
    60. dockerfile: Dockerfile
    61. ports:
    62. - 8080:8080
    63. # 从文件添加环境变量
    64. env_file:
    65. - /root/environment.env
    66. networks:
    67. network_name:
    68. aliases:
    69. - PROJECT_URL
    70. privileged: true
    71. restart: always
    72. container_name: hello-project
    73. # ........可以继续添加
    74. networks:
    75. # bridge:默认,需要单独配置ports映射主机port和服务的port,并且开启了容器间通信
    76. network_name:
    77. driver: bridge
    1. 注意:这些命令需要在 compose的文件目录下执行才可以
    2. # 创建容器并启动 docker compose up
    3. # 停止并删除容器 docker compose down
    4. # 创建容器并后台启动 docker compose up -d
    5. # 容器全部启动 docker compose start
    6. # 仅启动abbix-server服务对应的容器 docker-compose stop zabbix-server
    7. # 容器全部停止 docker compose stop
    8. # 仅停止zabbix-server服务对应的容器 docker compose stop zabbix-server
    9. # 容器全部重启 docker compose restart
    10. # 要注意端口冲突的问题,指定的services不应该有ports属性 docker compose scale zabbix-java-gateway=3

    参考示例(重要):

    1. # Compose 版本 Version 2支持更多的指令。Version 1将来会被弃用。
    2. version: "3"
    3. # 定义服务
    4. services:
    5. # 为project定义服务
    6. redis:
    7. # 服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像
    8. image: redis:5.0.8
    9. # 配置端口 - "宿主机端口:容器暴露端口"
    10. ports:
    11. - "6379:6379"
    12. # 挂载
    13. volumes:
    14. - "/jcdata/redis5/conf/redis.conf:/etc/redis/redis.conf"
    15. - "/jcdata/redis5/data:/data"
    16. # 容器总是重新启动
    17. restart: always
    18. # 相当于执行一些命令
    19. command:
    20. redis-server /etc/redis/redis.conf --appendonly yes
    21. # 指定一个自定义容器名称,而不是生成的默认名称。
    22. container_name: redis
    23. # 使用该参数,container内的root拥有真正的root权限。
    24. privileged: true
    25. db:
    26. image: mysql:8.0.33
    27. container_name: mysql8
    28. privileged: true
    29. restart: always
    30. ports:
    31. - "3306:3306"
    32. environment:
    33. MYSQL_ROOT_PASSWORD: 123456
    34. MYSQL_USER: csh
    35. MYSQL_PASS: 123456
    36. TZ: Asia/Shanghai
    37. command:
    38. --wait_timeout=28800
    39. --interactive_timeout=28800
    40. --max_connections=1000
    41. --default-authentication-plugin=mysql_native_password
    42. volumes:
    43. - "/jcdata/mysql8/data:/var/lib/mysql"
    44. - "/jcdata/mysql8/config/my.cnf:/etc/mysql/my.cnf"

    my.cnf

    1. # Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
    2. #
    3. # This program is free software; you can redistribute it and/or modify
    4. # it under the terms of the GNU General Public License, version 2.0,
    5. # as published by the Free Software Foundation.
    6. #
    7. # This program is also distributed with certain software (including
    8. # but not limited to OpenSSL) that is licensed under separate terms,
    9. # as designated in a particular file or component or in included license
    10. # documentation. The authors of MySQL hereby grant you an additional
    11. # permission to link the program and your derivative works with the
    12. # separately licensed software that they have included with MySQL.
    13. #
    14. # This program is distributed in the hope that it will be useful,
    15. # but WITHOUT ANY WARRANTY; without even the implied warranty of
    16. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    17. # GNU General Public License, version 2.0, for more details.
    18. #
    19. # You should have received a copy of the GNU General Public License
    20. # along with this program; if not, write to the Free Software
    21. # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
    22. #
    23. # The MySQL Server configuration file.
    24. #
    25. # For explanations see
    26. # http://dev.mysql.com/doc/mysql/en/server-system-variables.html
    27. [mysqld]
    28. pid-file = /var/run/mysqld/mysqld.pid
    29. socket = /var/run/mysqld/mysqld.sock
    30. datadir = /var/lib/mysql
    31. #log-error = /var/log/mysql/error.log
    32. # By default we only accept connections from localhost
    33. #bind-address = 127.0.0.1
    34. # Disabling symbolic-links is recommended to prevent assorted security risks
    35. symbolic-links=0
    36. innodb_log_file_size=256M
    37. max_allowed_packet=64M
    38. max_connections=1024
    39. character-set-server=utf8mb4
    40. collation-server=utf8mb4_unicode_ci
    41. lower_case_table_names=1
    42. sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    43. #sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    44. [client]
    45. default-character-set=utf8mb4

    项目参考案例:

    1. project-name:
    2. image: project-name-iamge
    3. container_name: project-name
    4. restart: always
    5. privileged: true
    6. volumes:
    7. - /data/app/logs/project-name/:/jcdata/logs/
    8. - /etc/localtime:/etc/localtime:ro
    9. environment:
    10. - CFG_NS=1bfa8e1d-6324-4469-8f6d-4ee7b12c13a4
    11. - CFG_ADDR=192.168.0.35
    12. - NACOS_REG=true
    13. ports:
    14. # 对外IP:容器内部ip
    15. - "8084:8080"

    迁移 Docker 镜像到另一个 Linux 系统

    1. docker images
    2. docker save -o <文件名>.tar <镜像名称>:<标签> (镜像名称)
    3. docker load -i <文件名>.tar

    开启Docker远程访问

    1. [root@docker]# vim /lib/systemd/system/docker.service
    2. #修改execstart这行
    3. execstart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
    1. # 重新加载配置文件
    2. [root@idocker]# systemctl daemon-reload
    3. # 重启服务
    4. [root@docker]# systemctl restart docker.service
    5. # 查看端口是否开启
    6. [root@docker]# netstat -nlpt
    7. # 直接curl看是否生效
    8. [root@docker]# curl http://127.0.0.1:2375/info

    ideadocker插件

    image

    将springboot项目制作成镜像

    1.参考文档:https://blog.csdn.net/linLearn/article/details/123426777
    2.pom文件
    1. ${project.artifactId}-${project.version}
    2. org.springframework.boot
    3. spring-boot-maven-plugin
    4. repackage
    5. true
    6. com.example.TestDemoApplication
    7. com.spotify
    8. docker-maven-plugin
    9. 1.0.0
    10. build-image
    11. package
    12. build
    13. csh/${project.artifactId}
    14. latest
    15. ${project.basedir}
    16. http://192.168.1.5:2375
    17. /
    18. ${project.build.directory}
    19. ${project.build.finalName}.war
    20. docker-hub
    21. https://index.docker.io/v1
    3.根目录下文件 DockerFile
    1. # 指定基础镜像
    2. FROM java:8
    3. # 维护者信息
    4. MAINTAINER csh
    5. # 用于指定持久化目录
    6. VOLUME /tmp
    7. # 将本地文件添加到容器中(这时是打包到本地项目中的target目录下,因为jar有个前缀是target)
    8. ADD target/testdemo-0.0.1-SNAPSHOT.jar testdemo.jar
    9. #ADD target/config config
    10. #COPY target/lib
    11. #ADD target/conf
    12. # 指定于外界交互的端口
    13. EXPOSE 8081
    14. #设置时区 run后面
    15. RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
    16. # 配置容器,使其可执行化
    17. #ENTRYPOINT exec java -Xms512m -Xmx512m -jar /app.jar
    18. ENTRYPOINT exec java $JAVA_OPTS -jar -Duser.timezone=GMT+08 /testdemo.jar
    19. ENV LC_ALL en_US.UTF-8
    4.部署镜像到linux

    image

    5.linux查看镜像

    image

  • 相关阅读:
    数据库上云实践:使用Ora2pg进行数据库迁移
    js 实现删除数组指定元素
    通过共享网络使树莓派4联网
    python如何爬取手机app的数据
    WPF中的Binding的常见知识点与技巧
    Windows编程技术之资源释放
    iOS开发-Lottie实现下拉刷新动画效果
    Codeforces Round #828 (Div. 3) A-F
    字符串相加
    一文带你了解CSRF、Cookie、Session和token,JWT之间的关系
  • 原文地址:https://blog.csdn.net/qq_32594285/article/details/132984537