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

docker安装与idea集成

nanshan 2025-01-16 20:20 8 浏览 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控制面板看,已经跑起来了:

相关推荐

Let’s Encrypt免费搭建HTTPS网站

HTTPS(全称:HyperTextTransferProtocoloverSecureSocketLayer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入...

使用Nginx配置TCP负载均衡(nginx tcp负载)

假设Kubernetes集群已经配置好,我们将基于CentOS为Nginx创建一个虚拟机。以下是实验种设置的详细信息:Nginx(CenOS8Minimal)-192.168.1.50Kube...

Nginx负载均衡及支持HTTPS与申请免费SSL证书

背景有两台minio文件服务器已做好集群配置,一台是192.168.56.41:9000;另一台是192.168.56.42:9000。应用程序通过Nginx负载均衡调用这两台minio服务,减轻单点...

HTTPS配置实战(https配置文件)

原因现在网站使用HTTPS是规范操作之一,前些日子买了腾讯云服务,同时申请了域名http://www.asap2me.top/,目前该域名只支持HTTP,想升级为HTTPS。关于HTTPS的链接过程大...

只有IP地址没有域名实现HTTPS访问方法

一般来说,要实现HTTPS,得有个注册好的域名才行。但有时候呢,咱只有服务器的IP地址,没注册域名,这种特殊情况下,也能照样实现HTTPS安全访问,按下面这些步骤来就行:第一步,先确认公网...

超详解:HTTPS及配置Django+HTTPS开发环境

众所周知HTTP协议是以TCP协议为基石诞生的一个用于传输Web内容的一个网络协议,在“网络分层模型”中属于“应用层协议”的一种。在这里我们并不研究该协议标准本身,而是从安全角度去探究使用该协议传输数...

Godaddy购买SSL之后Nginx配置流程以及各种错误的解决

完整流程:参考地址:https://sg.godaddy.com/zh/help/nginx-generate-csrs-certificate-signing-requests-3601生成NGI...

Nginx从安装到高可用,一篇搞定(nginx安装与配置详解)

一、Nginx安装1、去官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本2、上传nginx到linux系统3、安装依赖环境(1)安装gcc环境yuminstallgc...

阿里云免费证书申请,配置安装,使用tomcat,支持http/https访问

参数说明商品类型默认已选择云盾证书服务(无需修改)。云盾证书服务类型SSL证书服务的类型。默认已选择云盾SSL证书(无需修改),表示付费版SSL证书。如果您需要免费领取或付费扩容DV单域名证书【免费试...

你试过两步实现Nginx的规范配置吗?极速生成Nginx配置小工具

NGINX是一款轻量级的Web服务器,最强大的功能之一是能够有效地提供HTML和媒体文件等静态内容。NGINX使用异步事件驱动模型,在负载下提供可预测的性能。是当下最受欢迎的高性能的Web...

从零开始搭建HTTPS服务(搭建https网站)

搭建HTTPS服务的最初目的是为了开发微信小程序,因为wx.request只允许发起HTTPS请求,并且还必须和指定的域名进行网络通信。要从零开始搭建一个HTTPS的服务需要下面4...

群晖NAS使用官网域名和自己的域名配置SSL实现HTTPS访问

安全第一步,群晖NAS使用官网域名和自己的域名配置SSL实现HTTPS访问【新手导向】NAS本质还是一个可以随时随地访问的个人数据存储中心,我们在外网访问的时候,特别是在公网IP下,其实会面临着很多安...

让网站快速升级HTTPS协议提高安全性

为什么用HTTPS网络安全越来越受到重视,很多互联网服务网站,都已经升级改造为https协议。https协议下数据包是ssl/tcl加密的,而http包是明文传输。如果请求一旦被拦截,数据就会泄露产生...

用Https方式访问Harbor-1.9版本(https访问流程)

我上周在头条号写过一篇原创文章《Docker-Harbor&Docker-kitematic史上最详细双系统配置手册》,这篇算是它的姊妹篇吧。这篇文章也将用到我在头条写的另一篇原创文章的...

如何启用 HTTPS 并配置免费的 SSL 证书

在Linux服务器上启用HTTPS并配置免费的SSL证书(以Let'sEncrypt为例)可以通过以下步骤完成:---###**一、准备工作**1.**确保域名已解析**...

取消回复欢迎 发表评论: