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"

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

4.部署镜像到linux

5.linux查看镜像

精彩链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。