百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

docker安装与idea集成

nanshan 2025-01-16 20:20 10 浏览 0 评论

安装docker

centos下的docker安装

脚本安装docker

使用官方脚本安装(推荐):

shell复制代码curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以手动安装:

先卸载久的版本:

shell复制代码$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

安装需要的软件包:

shell复制代码sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

设置稳定仓库,从下面任意选一项:

shell复制代码-- 官方的(国内比较慢,国外节点选这个)
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
-- 阿里云(国内节点选这个)
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

手动安装docker

安装最新版的docker

shell复制代码sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Docker 安装完默认未启动。并且已经创建好 docker 用户组,但该用户组下没有用户。

启动 Docker。

sh复制代码sudo systemctl start docker

设置开机自启

sh复制代码sudo systemctl enable docker

运行hello-world:

sh复制代码sudo docker run hello-world

docker镜像加速

如果是在国内节点,因为一些客观因素,安装完成之后还不能直接使用。国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,比如:

  • 科大镜像:docker.mirrors.ustc.edu.cn/
  • 网易:hub-mirror.c.163.com/
  • 阿里云:https://<你的ID>.mirror.aliyuncs.com
  • 七牛云加速器:reg-mirror.qiniu.com

当配置某一个加速器地址之后,若发现拉取不到镜像,请切换到另一个加速器地址。国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务。

在 /etc/docker/daemon.json 中写入如下内容:

json复制代码{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}

然后重新启动服务:

sh复制代码$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

docker compose安装

windows/macos下的桌面版自带compose,无需安装。

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

github上下载docker-compose:

sh复制代码sudo curl -L "https://github.com/docker/compose/releases/download/v1.25.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

设置可执行权限

sh复制代码sudo chmod +x /usr/local/bin/docker-compose

创建软链

sh复制代码sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

查看是否安装成功

sh复制代码$ docker-compose version
docker-py version: 4.1.0
CPython version: 3.7.4
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

https链接

开放端口之后,最好使用https的方式远程连接docker,不然可能会被不怀好意的人扫到,当成肉鸡,或者矿机,说多了都是泪啊~

当然不介意安全的或者防火墙可以限制ip的,可以跳过https的方式。

下面介绍一下如何安装https证书,首先保存脚本:

sh复制代码#!/bin/bash

#相关配置信息
SERVER="输入你的服务器外网IP"
PASSWORD="输入你的密码"
COUNTRY="CN"
STATE="输入你的省份"
CITY="输入你的城市"
ORGANIZATION="输入你的组织"
ORGANIZATIONAL_UNIT="Dev"
EMAIL="输入你的邮箱"

###开始生成文件###
echo "开始生成文件"

#切换到生产密钥的目录
mkdir /opt/docker_ca
cd /opt/docker_ca 
#生成ca私钥(使用aes256加密)
openssl genrsa -aes256 -passout pass:$PASSWORD  -out ca-key.pem 4096
#生成ca证书,填写配置信息
openssl req -new -x509 -passin "pass:$PASSWORD" -days 365 -key ca-key.pem -sha256 -out ca.pem -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$SERVER/emailAddress=$EMAIL"

#生成server证书私钥文件
openssl genrsa -out server-key.pem 4096
#生成server证书请求文件
openssl req -subj "/CN=$SERVER" -sha256 -new -key server-key.pem -out server.csr
#配置白名单,多个用逗号隔开
sh -c 'echo subjectAltName = IP:'$SERVER',IP:0.0.0.0 >> extfile.cnf'
#把 extendedKeyUsage = serverAuth 键值设置到extfile.cnf文件里,限制扩展只能用在服务器认证
sh -c 'echo extendedKeyUsage = serverAuth >> extfile.cnf'
#使用CA证书及CA密钥以及上面的server证书请求文件进行签发,生成server自签证书
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$PASSWORD" -\CAcreateserial -out server-cert.pem -extfile extfile.cnf

#生成client证书RSA私钥文件
openssl genrsa -out key.pem 4096
#生成client证书请求文件
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
#继续设置证书扩展属性
sh -c 'echo extendedKeyUsage = clientAuth >> extfile.cnf'
#生成client自签证书(根据上面的client私钥文件、client证书请求文件生成)
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$PASSWORD" -\CAcreateserial -out cert.pem -extfile extfile.cnf

#更改密钥权限
chmod 0400 ca-key.pem key.pem server-key.pem
#更改密钥权限
chmod 0444 ca.pem server-cert.pem cert.pem
#删除无用文件
rm client.csr server.csr

echo "生成文件完成"
###生成结束###

修改docker配置:

sh复制代码vim /lib/systemd/system/docker.service

在ExecStart的/usr/bin/dockerd后面加\,然后添加配置:

sh复制代码ExecStart=/usr/bin/dockerd \
        --tlsverify \
        --tlscacert=/opt/docker_ca/ca.pem \
        --tlscert=/opt/docker_ca/server-cert.pem \
        --tlskey=/opt/docker_ca/server-key.pem \
        -H tcp://0.0.0.0:2376 \
        -H unix:///var/run/docker.sock \
        -H fd:// --containerd=/run/containerd/containerd.sock

将2376端口添加到安全组然后重启docker:

sh复制代码systemctl daemon-reload && systemctl restart docker

将生成的密钥下载到本地电脑:

接下来就可以配置idea进行连接了。

使用idea连接docker进行远程部署

连接远程docker服务

首先需要安装docker插件,我这里已经安装好了。

然后在设置界面,Build,Execution,Deployment ----> Docker,增加一条docker server连接,在TCP socket的Engine API URL中填入ip地址,比如 https://127.0.0.1:2376,在Certificates folder中填写https证书存放的位置,注意是本地目录,而不是服务器上证书的位置。

如果提示Connection successful,说明连接成功。

创建SpringBoot应用

新建一个SpringBoot项目,项目maven如下:

xml复制代码<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.9</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.lin</groupId>
  <artifactId>docker</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>BootDocker</name>
  <description>Demo project for Spring Boot</description>
  <properties>
    <java.version>8</java.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

只添加了web依赖,能看见效果即可。Application的代码就不贴了。

接下来,在最外层创建DockerFile文件,和pom.xml文件平级:

dockerfile复制代码#基于哪个镜像制作,我跑的是java项目,所以基于java8
FROM java:8-jdk-alpine
MAINTAINER "lingxiao"<xxx@qq.com>
#系统编码
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
# 添加jar包,这里做了重命名
ADD target/docker-0.0.1-SNAPSHOT.jar demo.jar
#暴露8080端口
EXPOSE 8080
#启动容器时的进程
ENTRYPOINT ["java","-jar","/demo.jar"]

因为我最后通过mvn install生成的jar包文件叫
BootDocker-0.0.1-SNAPSHOT.jar,所以这里就直接填的这个名字。

添加docker部署配置

创建一个docker配置,如下,点击Edit Configurations:

选择Dockerfile:

然后按照如下配置:

需要注意的是,这个地方在启动docker配置之前,需要先做一个打包的动作,也就是在before launch下面,点击+号:

选择 run maven goal,然后输入:

完成后,点击倒三角,运行程序:

如下图所示,程序已经运行起来了。

访问服务器,发现正常运行:

至此,Idea下的docker插件配置使用就完成了。如果是非常简单的应用,就可以直接用这种方式运行,部署非常快。

docker compose编排服务部署

上面的情况适合只有单个java应用的情况,但是现实情况可能比较复杂,比如我的mysql、redis、nginx等都基于docker部署的,这种情况下怎么样才能方便部署呢。这个时候就可以使用docker compose了。

改造之前的项目:

这个地方我创建了两个项目,一个项目是core,一个项目是nginx。其中core为SpringBoot项目,nginx是一个文件夹。

分别在core文件夹和nginx文件夹根目录创建Dockerfile文件:

再创建一个nginx.conf文件,这个文件就是nginx的配置文件,待会会添加在Dockerfile文件中,创建nginx容器的时候就直接使用这个配置文件了:

nginx复制代码
#user  nobody;
worker_processes 1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
	worker_connections 1024;
}


http {
	include mime.types;
	default_type application/octet-stream;
	server_names_hash_bucket_size 64;

	#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
	#                  '$status $body_bytes_sent "$http_referer" '
	#                  '"$http_user_agent" "$http_x_forwarded_for"';

	#access_log  logs/access.log  main;
	client_max_body_size 10M;
	sendfile on;
	#tcp_nopush     on;

	#keepalive_timeout  0;
	keepalive_timeout 65;

	#gzip  on;
	server {
		listen 80;
		server_name api.lingxiao.cn;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-Host $host;
		proxy_set_header X-Forwarded-Server $host;
		proxy_set_header Host $host;
		location / {
			proxy_pass http://127.0.0.1:8080;
		}
	}

	server {
		listen 80;
		server_name localhost;

		#charset koi8-r;

		#access_log  logs/host.access.log  main;

		location / {
			root html;
			index index.html index.htm;
		}

		#error_page  404              /404.html;

		# redirect server error pages to the static page /50x.html
		#
		error_page 500 502 503 504 /50x.html;
		location = /50x.html {
			root html;
		}
	}
}

其中,core文件夹的Dockerfile文件直接沿用之前的文件,nginx中的文件内容为:

dockerfile复制代码FROM nginx:latest
COPY nginx.conf /etc/nginx/
# COPY fronted/ /www/wwwroot/
# 容器启动nginx后会立刻退出,所以需要使用nginx的前台运行模式
CMD [ "nginx", "-g", "daemon off;"]

两个项目都配置好了,接下来开始编写docker-compose文件:

yaml复制代码version: '3.4'   # compose文件版本格式和docker版本兼容
services:
  boot-docker:
    build: ./
    ports:
      - "8080:8080"
    depends_on:
      - db
      - nginx-web
  db:
    image: mysql:latest
    ports:
      - "3300:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456
  nginx-web:
    build:
      context: ../nginx
      dockerfile: Dockerfile
    # ports:
    #  - "80:80"
    volumes:
      - "/home/nginx/www:/usr/share/nginx/html"
      - "/home/nginx/logs:/var/log/nginx"
      - "/www/wwwroot:/www/wwwroot"
    network_mode: host

接下来再配置idea,创建一个新配置选择Docker-compose:

如下图这样的配置:

接下来点击运行即可:

由于我是本地运行的,可以在docker控制面板看,已经跑起来了:

相关推荐

Linux 的磁盘系统,和你了解的Windows差别很大

我的C盘去哪了?一个系统,如果没有存储,那么也就不能称之为系统。存储性是一个完整系统的重要组成部分。例如AWS最开始的服务就是S3(用来存储数据的云服务),足以见得存储对于一个应用平台是多么的重要。...

一文读懂 Linux 硬盘挂载:从问题到解决方案

各位互联网大厂的后端开发伙伴们!在咱们日常工作中,操作Linux系统是常有的事儿吧。你们有没有遇到过这样的场景:新添加了一块硬盘,满心欢喜准备用来存储重要数据或者部署新的应用服务,却突然发现不知道...

硬盘分区(硬盘分区格式)

 磁盘(硬盘)分区,可以分C、D、E等分区,大家可能都会用,会根据自已的需要确定所需的空间,但分区是如何工作的呢,内容如下。Windows中有3类:MBR分区:MasterBootRecord,也...

parted命令工具分区介绍(particle命令)

linux系统磁盘分区通常可以使用fdisk和parted命令,当分区大小小于2TB的时候,两种皆可以使用,当分区大于2TB的话,就需要用parted分区。以下介绍parted命令相关使用,以sdb为...

Linux 服务器上查看磁盘类型的方法

方法1:使用lsblk命令lsblk输出说明:TYPE列显示设备类型,如disk(物理磁盘)、part(分区)、rom(只读存储)等。NAME列显示设备名称(如sda、nvme0n1)。TR...

Linux分区命令fdisk和parted使用介绍

摘要:一般情况下,Linux分区都是选择fdisk工具,要求硬盘格式为MBR格式,能支持的最大分区空间为2T。但是目前在实际生产环境中使用的磁盘空间越来越大,呈TB级别增长;而常用的fdisk这个工具...

linux 分区原理与名词解释(linux操作系统中的分区类型)

分区的意义将磁盘分成几份,每份挂在到文件系统的那个目录在linux里的文件系统Ext2:早期的格式,不支持日志功能Ext3:ext2改良版,增加了日志功能,是最基本且最常用的使用格式了Ext4:针对e...

linux 分区合并(linux合理分区)

查看虚拟机当前磁盘挂载情况fdisk-l选择磁盘fdisk/dev/sda查看磁盘分区情况p重新选择分区n选择主分区p保存w创建物理卷pvcreate/dev/sda3查看物理卷信息pvdi...

如何在 Linux 系统中永久禁用交换分区 ?

Linux操作系统中的交换分区或交换文件充当硬盘上的临时存储区域,当物理内存(RAM)满时,系统使用该存储区域。它用于交换较少使用的内存页,这样系统就不会因为运行应用程序而耗尽物理内存。随着技术的发...

Linux 如何知道硬盘已用多少空间、未用多少空间

刚出社会时,去了一家公司上班,老板为了省钱,买的服务器是低配的,硬盘大小只有40G,有一次网站突然不能访问了,排查半天才知道原来服务器的硬盘空间已用完,已无可用空间。第一步是查看硬盘的使用情况,第二步...

用Linux系统管理磁盘空间 就该这么来

要想充分有效的管理使用Linux系统中的存储空间,用户必须要做的就是双管齐下,一边扩充空间一边限制空间。不得不说的就是很多时候磁盘空间就像水资源,需节制水流。说到要如何实现限制空间就离不开使用LVM技...

Windows 11 磁盘怎么分区?(windows11磁盘怎么分区)

Windows11磁盘分区技术解析与操作指南:构建高效存储体系一、磁盘分区的技术本质与系统价值磁盘分区作为存储系统的基础架构,通过逻辑划分实现数据隔离与管理优化。Windows11采用NTF...

linux上创建多个文件分区,格式化为 ext2、ext3、ext4、XFS 文件

以下是在Linux系统上创建多个20GB文件分区并格式化为不同文件系统的分步指南:步骤1:创建基础文件(4个20GB文件)bash#创建4个20GB稀疏文件(实际占用空间随写入量增长)ddif=/...

救命的U盘低格哪家最强?(低格优盘)

周二时有位童鞋留言说U盘之前做过引导盘,现在格式化不了,用各种工具都不行,而且因为U盘厂商的关系,查不到U盘主控,无法量产恢复,特来求助。小编花了点时间特意弄坏一个U盘分区,终于试出方法了,特来分享一...

Linux 查看硬件磁盘存储大小和磁盘阵列(RAID)的组合方式

一、查看硬件磁盘存储大小查看所有磁盘信息:#lsblk该命令会列出所有磁盘(如/dev/sda、/dev/nvme0n1)及其分区和挂载点。查看磁盘总容量:fdisk-l#或parted-...

取消回复欢迎 发表评论: