docker安装与idea集成
安装docker
centos下的docker安装
脚本安装docker
使用官方脚本安装(推荐):
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以手动安装:
先卸载久的版本:
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装需要的软件包:
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
设置稳定仓库,从下面任意选一项:
-- 官方的(国内比较慢,国外节点选这个)
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
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Docker 安装完默认未启动。并且已经创建好 docker 用户组,但该用户组下没有用户。
启动 Docker。
sudo systemctl start docker
设置开机自启
sudo systemctl enable docker
运行hello-world:
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 中写入如下内容:
{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}
然后重新启动服务:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
docker compose安装
windows/macos下的桌面版自带compose,无需安装。
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
github上下载docker-compose:
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
设置可执行权限
sudo chmod +x /usr/local/bin/docker-compose
创建软链
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
查看是否安装成功
$ 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证书,首先保存脚本:
#!/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配置:
vim /lib/systemd/system/docker.service
在ExecStart的/usr/bin/dockerd后面加\,然后添加配置:
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:
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 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文件平级:
#基于哪个镜像制作,我跑的是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容器的时候就直接使用这个配置文件了:
#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中的文件内容为:
FROM nginx:latest
COPY nginx.conf /etc/nginx/
# COPY fronted/ /www/wwwroot/
# 容器启动nginx后会立刻退出,所以需要使用nginx的前台运行模式
CMD [ "nginx", "-g", "daemon off;"]
两个项目都配置好了,接下来开始编写docker-compose文件:
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控制面板看,已经跑起来了:
参考:
转载自:https://juejin.cn/post/7231746152903213114