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 安装文档,以获取详细的安装说明和建议。
关闭防火墙
- systemctl disable firewalld
-
- 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
实例:
- sudo mkdir -p /etc/docker
-
- sudo tee /etc/docker/daemon.json <<-'EOF'
- {
- "registry-mirrors": ["https://8sbrqqbm.mirror.aliyuncs.com"]
- }
- EOF
-
- sudo systemctl daemon-reload
-
- sudo systemctl restart docker
提醒:阿里云其实也很慢最好用如下推荐:
- Docker中国区官方镜像
- https://registry.docker-cn.com
-
- 网易
- http://hub-mirror.c.163.com
-
- ustc
- https://docker.mirrors.ustc.edu.cn
-
- 中国科技大学
- https://docker.mirrors.ustc.edu.cn
安装 docker-compose(redis、mysql 、项目)
安装插件
- yum update
- yum install docker-compose-plugin# 安装完成后查看版本号
- docker compose version
多个服务配置文件(过于专业,可以看下面的案例即可):
- # Compose 版本 Version 2支持更多的指令。Version 1将来会被弃用。
- version: "3"
-
- # 定义服务
- services:
- # 为project定义服务
- redis:
- # 服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像
- image: redis:5.0.8
- # 配置端口 - "宿主机端口:容器暴露端口"
- ports:
- - "6379:6379"
- # 配置容器连接的网络,引用顶级 networks 下的条目(就是最下面配置的networks(一级目录))
- networks:
- network_name:
- # 为单redis创建别名, REDIS_URL标记为redis服务的地址. (不配置aliases也可以, 这样就通过定义的服务名: redis链接)
- aliases:
- - REDIS_URL
- # 挂载
- volumes:
- - "/docker/redis/conf/redis.conf:/etc/redis/redis.conf"
- - "/docker/redis/data:/data"
- # 容器总是重新启动
- restart: always
- # 相当于执行一些命令
- command:
- redis-server /etc/redis/redis.conf --appendonly yes
- # 指定一个自定义容器名称,而不是生成的默认名称。
- container_name: redis
- # 使用该参数,container内的root拥有真正的root权限。
- privileged: true
-
- db:
- image: mysql:8.0.33
- ports:
- - "3306:3306"
- # 添加环境变量
- environment:
- MYSQL_ROOT_PASSWORD: "123456"
- volumes:
- - "/docker/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf"
- - "/docker/mysql/logs:/var/log/mysql"
- - "/docker/mysql/data:/var/lib/mysql"
- - "/docker/mysql/sql/init.sql:/docker-entrypoint-initdb.d/init.sql"
- - "/etc/localtime:/etc/localtime"
- networks:
- network_name:
- aliases:
- - MYSQL_URL
- restart: always
- command: --init-file /docker-entrypoint-initdb.d/init.sql
- container_name: mysql
- privileged: true
-
- project-name:
- # 服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像
- image: 9c7a54a9a43c
- # 构建镜像
- build:
- # 指定项目的地址
- context: /root/docker_mysql_redis
- # 指定Dockerfile
- dockerfile: Dockerfile
- ports:
- - 8080:8080
- # 从文件添加环境变量
- env_file:
- - /root/environment.env
- networks:
- network_name:
- aliases:
- - PROJECT_URL
- privileged: true
- restart: always
- container_name: hello-project
-
- # ........可以继续添加
-
-
- networks:
- # bridge:默认,需要单独配置ports映射主机port和服务的port,并且开启了容器间通信
- network_name:
- driver: bridge
- 注意:这些命令需要在 compose的文件目录下执行才可以
-
- # 创建容器并启动 docker compose up
- # 停止并删除容器 docker compose down
- # 创建容器并后台启动 docker compose up -d
- # 容器全部启动 docker compose start
- # 仅启动abbix-server服务对应的容器 docker-compose stop zabbix-server
- # 容器全部停止 docker compose stop
- # 仅停止zabbix-server服务对应的容器 docker compose stop zabbix-server
- # 容器全部重启 docker compose restart
- # 要注意端口冲突的问题,指定的services不应该有ports属性 docker compose scale zabbix-java-gateway=3
参考示例(重要):
- # Compose 版本 Version 2支持更多的指令。Version 1将来会被弃用。
- version: "3"
-
- # 定义服务
- services:
- # 为project定义服务
- redis:
- # 服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像
- image: redis:5.0.8
- # 配置端口 - "宿主机端口:容器暴露端口"
- ports:
- - "6379:6379"
- # 挂载
- volumes:
- - "/jcdata/redis5/conf/redis.conf:/etc/redis/redis.conf"
- - "/jcdata/redis5/data:/data"
- # 容器总是重新启动
- restart: always
- # 相当于执行一些命令
- command:
- redis-server /etc/redis/redis.conf --appendonly yes
- # 指定一个自定义容器名称,而不是生成的默认名称。
- container_name: redis
- # 使用该参数,container内的root拥有真正的root权限。
- privileged: true
-
- db:
- image: mysql:8.0.33
- container_name: mysql8
- privileged: true
- restart: always
- ports:
- - "3306:3306"
- environment:
- MYSQL_ROOT_PASSWORD: 123456
- MYSQL_USER: csh
- MYSQL_PASS: 123456
- TZ: Asia/Shanghai
- command:
- --wait_timeout=28800
- --interactive_timeout=28800
- --max_connections=1000
- --default-authentication-plugin=mysql_native_password
- volumes:
- - "/jcdata/mysql8/data:/var/lib/mysql"
- - "/jcdata/mysql8/config/my.cnf:/etc/mysql/my.cnf"
- # Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License, version 2.0,
- # as published by the Free Software Foundation.
- #
- # This program is also distributed with certain software (including
- # but not limited to OpenSSL) that is licensed under separate terms,
- # as designated in a particular file or component or in included license
- # documentation. The authors of MySQL hereby grant you an additional
- # permission to link the program and your derivative works with the
- # separately licensed software that they have included with MySQL.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License, version 2.0, for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- #
- # The MySQL Server configuration file.
- #
- # For explanations see
- # http://dev.mysql.com/doc/mysql/en/server-system-variables.html
-
- [mysqld]
- pid-file = /var/run/mysqld/mysqld.pid
- socket = /var/run/mysqld/mysqld.sock
- datadir = /var/lib/mysql
- #log-error = /var/log/mysql/error.log
- # By default we only accept connections from localhost
- #bind-address = 127.0.0.1
- # Disabling symbolic-links is recommended to prevent assorted security risks
- symbolic-links=0
- innodb_log_file_size=256M
- max_allowed_packet=64M
- max_connections=1024
- character-set-server=utf8mb4
- collation-server=utf8mb4_unicode_ci
- lower_case_table_names=1
- sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
- #sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
-
- [client]
- default-character-set=utf8mb4
项目参考案例:
- project-name:
- image: project-name-iamge
- container_name: project-name
- restart: always
- privileged: true
- volumes:
- - /data/app/logs/project-name/:/jcdata/logs/
- - /etc/localtime:/etc/localtime:ro
- environment:
- - CFG_NS=1bfa8e1d-6324-4469-8f6d-4ee7b12c13a4
- - CFG_ADDR=192.168.0.35
- - NACOS_REG=true
- ports:
- # 对外IP:容器内部ip
- - "8084:8080"
迁移 Docker 镜像到另一个 Linux 系统
- docker images
-
- docker save -o <文件名>.tar <镜像名称>:<标签> (镜像名称)
-
- docker load -i <文件名>.tar
开启Docker远程访问
- [root@docker]# vim /lib/systemd/system/docker.service
- #修改execstart这行
- execstart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
- # 重新加载配置文件
- [root@idocker]# systemctl daemon-reload
- # 重启服务
- [root@docker]# systemctl restart docker.service
- # 查看端口是否开启
- [root@docker]# netstat -nlpt
- # 直接curl看是否生效
- [root@docker]# curl http://127.0.0.1:2375/info
ideadocker插件
将springboot项目制作成镜像
1.参考文档:https://blog.csdn.net/linLearn/article/details/123426777
2.pom文件
-
${project.artifactId}-${project.version} -
-
-
org.springframework.boot -
spring-boot-maven-plugin -
-
-
-
repackage -
-
-
-
-
true -
com.example.TestDemoApplication -
-
-
-
com.spotify -
docker-maven-plugin -
1.0.0 -
-
-
-
build-image -
-
package -
-
build -
-
-
-
-
-
csh/${project.artifactId} -
-
-
latest -
-
-
${project.basedir} -
-
http://192.168.1.5:2375 -
-
-
-
/ -
-
${project.build.directory} -
-
${project.build.finalName}.war -
-
-
-
docker-hub -
https://index.docker.io/v1 -
-
-
3.根目录下文件 DockerFile
- # 指定基础镜像
- FROM java:8
- # 维护者信息
- MAINTAINER csh
- # 用于指定持久化目录
- VOLUME /tmp
- # 将本地文件添加到容器中(这时是打包到本地项目中的target目录下,因为jar有个前缀是target)
- ADD target/testdemo-0.0.1-SNAPSHOT.jar testdemo.jar
- #ADD target/config config
- #COPY target/lib
- #ADD target/conf
- # 指定于外界交互的端口
- EXPOSE 8081
- #设置时区 run后面
- RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
-
- # 配置容器,使其可执行化
- #ENTRYPOINT exec java -Xms512m -Xmx512m -jar /app.jar
- ENTRYPOINT exec java $JAVA_OPTS -jar -Duser.timezone=GMT+08 /testdemo.jar
-
- ENV LC_ALL en_US.UTF-8