一. Docker介绍.

一帮年轻人,开了一家公司,从2010年的时候开始paas平台. 当时发现的及其好.
到了2013年的时候,像亚马逊,微软,谷歌都开始作paas平台.
同年2013年,将他们的核心技术开源, 这个核心技术就是Docker.
到了2014年,得到了C轮的融资.$4000W.
到了2015年,得到了D轮的融资.$9500W.
全神贯注的开始维护Docker.
Docker主要作者之一. 所罗门.
Docker的作者已经离开了维护Docker的团队,所罗门离开的主要原因,是朋友的公司,缺一个CEO

二. Docker的思想.

1、集装箱:
将所有需要运行的环境,或软件,全部的打包放在集装里,谁需要用的那些环境和软件,就直接拿到这个集装箱就可以.

2、标准化:
运输的标准化: Docker有一个码头,所有的集装箱都放在码头,谁需要直接去获取就可以了.
命令的标准化: Docker提供了一系列的命令,可以直接通过命令的方式指派封装集装箱,运输集装箱,集装箱内的内容运行.
提供了REST的API: Docker的标准API,也衍生出了很多的图形化界面. Rancher.

3、隔离性:
Docker运行的是集装箱内的内容,在Linux的内核中,开辟一片独立的空间,不会影响Linux其他内容.

注册中心. (中央仓库,超级码头).

4、镜像. (集装箱).

5、容器. (运行后的镜像. 镜像 -> 类. 容器 -> 对象.)

三. yum安装Docker

简单操作 这里不做太多介绍,有网的同学可以参照此博客进行操作

https://blog.csdn.net/weixin_46403305/article/details/108775096?spm=1001.2014.3001.5501

四. 内网安装Docker(tgz)

1、下载docker包

https://download.docker.com/linux/static/stable/x86_64/

2、选择一个 版本进行下载 下载后进行解压

 tar -zxvf docker-xxxxxxxxx.tgz

3、解压之后的文件移动到 /usr/bin/ 目录下

mv  docker/*   /usr/bin/

4、新增docker.service文件

 vi /etc/systemd/system/docker.service
[Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comAfter=network-online.target firewalld.serviceWants=network-online.target[Service]Type=notify# the default is not to use systemd for cgroups because the delegate issues still# exists and systemd currently does not support the cgroup feature set required# for containers run by dockerExecStart=/usr/bin/dockerdExecReload=/bin/kill -s HUP $MAINPID# Having non-zero Limit*s causes performance problems due to accounting overhead# in the kernel. We recommend using cgroups to do container-local accounting.LimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinity# Uncomment TasksMax if your systemd version supports it.# Only systemd 226 and above support this version.#TasksMax=infinityTimeoutStartSec=0# set delegate yes so that systemd does not reset the cgroups of docker containersDelegate=yes# kill only the docker process, not all processes in the cgroupKillMode=process# restart the docker process if it exits prematurelyRestart=on-failureStartLimitBurst=3StartLimitInterval=60s[Install]WantedBy=multi-user.target

5、给docker.service文件添加执行权限

chmod +x /etc/systemd/system/docker.service

6、重新加载配置文件(每次有修改docker.service文件时都要重新加载下)

systemctl daemon-reload   

7、启动docker

systemctl start docker

8、设置开机启动

systemctl enable docker.service

9、查看docker服务状态

systemctl status docker

五. 内网安装Docker(rpm)

1、安装 rpm 不需要手动添加service文件

https://download.docker.com/linux/static/stable/x86_64/

下载六个文件分别是

1 container-selinux

2 containerd.io

3 docker-scan-plugin

4 docker-ce-cli

5 docker-ce-rootless-extras

6 docker-ce

安装顺序有顺序可言

rpm -ivh container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm containerd.io-1.4.9-3.1.el7.x86_64.rpm  docker-scan-plugin-0.9.0-3.el7.x86_64.rpm docker-ce-cli-20.10.9-3.el7.x86_64.rpm docker-ce-rootless-extras-20.10.9-3.el7.x86_64.rpm docker-ce-20.10.9-3.el7.x86_64.rpm 

执行这一段 即可 如果有问题 看报错信息可能需要依赖别的rpm文件 提前安装即可

五. Docker-compose

1、介绍

Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。 
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

Docker版本变化说明:Docker从1.13.x版本开始,版本分为企业版EE和社区版CE,版本号也改为按照时间线来发布,比如17.03就是2017年3月。Docker的linux发行版的软件仓库从以前的https://apt.dockerproject.org和https://yum.dockerproject.org变更为目前的https://download.docker.com, 软件包名字改为docker-ce和docker-ee。

2、安装

1 、两种安装方式

sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

2、然后添加可执行权限

chmod +x /usr/local/bin/docker-compose  

3、测试安装结果

docker-compose --version

4、docker-compose文件结构

version: "3.3"
networks:net_app:
services:fm:image: leave:2.6.2privileged: truerestart: alwaysnetworks:- net_appbuild: ./appvolumes:- ./logs/fm:/var/log/leaveenvironment:- TZ=Asia/Shanghaienv_file:- ./conf/leave.envcontainer_name: app_0ports:- 9999:9999

六、集成项目

有了Docker+Docker-compose 我们应该把项目集成到Docker中。

1、修改docker.service文件

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@izwz9eftauv7x69f5jvi96z docker]# systemctl daemon-reload
#重启服务
[root@izwz9eftauv7x69f5jvi96z docker]# systemctl restart docker.service
#查看端口是否开启
[root@izwz9eftauv7x69f5jvi96z docker]# netstat -nlpt

2、 端口开启后可以开发工具集成一下IDEA

2.1 打开Idea,从File->Settings->Plugins->Install JetBrains plugin进入插件安装界面,在搜索框中输入docker,可以看到Docker integration,点击右边的Install按钮进行安装。安装后重启Idea。

2.2  重启后配置docker,连接到远程docker服务。从File->Settings->Build,Execution,Deployment->Docker打开配置界面。

2.3 修改pom文件,添加properties,添加plugin

<properties><java.version>1.8</java.version><docker.image.prefix>xxxx</docker.image.prefix></properties><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><imageName>${docker.image.prefix}/${project.artifactId}</imageName><dockerDirectory></dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin></plugins></build>

2.4 配置Dockerfile文件:在工程根目录下新建Dockerfile文件

# 镜像基于java:8
FROM java:8
# 作者
#MAINTAINER xxxxx
#创建项目日志存放的文件夹
RUN mkdir -p /app
# 匿名挂载目录
VOLUME /app
# 项目暴露的端口号
EXPOSE 9999
# 添加环境变量
ENV JAVA_OPTS="-Xms512m -Xmx512m"
# 将jar包添加到容器中 /app/目录并更名为xxx.jar
ADD ./target/你的jar包名字 /app/jar包名字
# 运行jar包命令 "nohup" "&" 可省略
# -Djava.security.egd=file:/dev/./urandom 加速tomcat启动
ENTRYPOINT ["/app/jar包名字","--server.port=9999"]

2.5 创建Docker镜像

将工程打包,在idea 右边有maven 点击clean , 在install,打包后会在target目录下生成jar包。生成jar包后,可以在本地启动服务,进行测试。

点击Docker,再点击+号,添加一个docker命令,输入Name,选择Server,选择Dockerfile文件,输入镜像tag,完成配置。

2.6 完成后 点击 运行 run

执行成功后,可以远程docker上看到这个镜像:

2.7  再用docker-compose up 去执行此镜像

最关键的是 可以再IDEA中可以看到日志  比起docker logs 方便了很多

(故意搞个错试试)

比起看日志 我觉得这个更方便些 ,那么有屌大的同学就要杠我了  如果暴露了2375端口 被挖矿的攻击怎么办,当然屌veryBig 的我 ,自然有方法解决,查看官网文档对应生成TLS证书

七、对应生成TLS证书

1、创建 sh 脚本

创建脚本
$  touch /目录/cert.sh
编辑
$  vim /目录/cert.sh
#创建 Docker TLS 证书
#!/bin/bash
#相关配置信息
SERVER=你的服务器ip"
PASSWORD="生成密钥的密码"
COUNTRY="生成密钥的国家"
STATE="生成密钥的省"
CITY="生成密钥的市"
ORGANIZATION="生成密钥的组织"
ORGANIZATIONAL_UNIT="生成密钥的部门"
EMAIL="生成密钥的email"
###开始生成文件###echo "已在/work/dockers创建文件"
#切换到生产密钥的目录
mkdir -p /work/dockers
cd /work/dockers
echo "开始生成文件"
#生成ca私钥(使用aes256加密)
openssl genrsa -aes256 -passout pass:$PASSWORD  -out ca-key.pem 4096
#生成ca证书,填写配置信息
openssl req -new -x509 -passin "pass:$PASSWORD" -days 3650 -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" -new -key server-key.pem -out server.csr
#配置白名单  你使用的是服务器Ip的话,请将前面的DNS换成IP  echo subjectAltName = IP:$SERVER,IP:0.0.0.0 >> extfile.cnf
sh -c  'echo "subjectAltName = IP:'$SERVER',IP:0.0.0.0" >> extfile.cnf'
sh -c  'echo "extendedKeyUsage = serverAuth" >> extfile.cnf'
#使用CA证书及CA密钥以及上面的server证书请求文件进行签发,生成server自签证书
openssl x509 -req -days 3650 -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-client.cnf'
#生成client自签证书(根据上面的client私钥文件、client证书请求文件生成)
openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem  -passin "pass:$PASSWORD" -CAcreateserial -out cert.pem  -extfile extfile-client.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
#复制需要的文件到docker目录 在同一目录下 不需要复制!!
#cp server-*.pem  /work/dockers
#cp ca.pem /work/dockers
echo "生成文件完成"
###生成结束###

2、作者 把生成后的密钥放到了 /work/dockers 如果不改的话就去这里找就好

3、然后修改docker.service文件

vim /usr/lib/systemd/system/docker.service

ExecStart属性后追加

--tlsverify --tlscacert=/密钥存放地方/ca.pem  \
--tlscert=/密钥存放地方/server-cert.pem \
--tlskey=/密钥存放地方/server-key.pem \
-H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock 

4、重启服务

systemctl daemon-reload
systemctl restart docker.service
systemctl status docker 

5、查看端口是否启动

netstat -nltp 

6、将客户端所需的ca.pem、cert.pem、key.pem3个密钥文件从服务器下载到本地

剩下的就是跟上面一样了。苟富贵 勿相忘 ,作者也在努力学习 ,共同进步!

Docker构建harbor+IDEA,一篇文章就够了相关推荐

  1. 什么是Docker?看这一篇文章就够了

    作者 | 码农的荒岛求生 来源 | 程序员小灰(ID: chengxuyuanxiaohui) 程序员,应该怎样理解docker? 容器技术的起源 假设你们公司正在秘密研发下一个"今日头条& ...

  2. 关于VR产品的前世今生,看这一篇文章就够了

    关于VR产品的前世今生,看这一篇文章就够了(转) 文/胡勇 即使最富质疑精神最冷静的人也无法漠视现在的 VR/AR 掀起的狂潮,这个从科技圈蔓延到实业界最后席卷大众的想象力的狂欢正以前所未有的态势改变 ...

  3. MySQL优化-一篇文章就够了(转发加收藏吧)

    关注我,一个仍存梦想的屌丝程序员,每天为你分享高质量编程博客. 回复 "代金券"  免费获取腾讯云和阿里云代金券 前言 说起MySQL的查询优化,相信大家收藏了一堆:不能使用SEL ...

  4. 如何使用 Maven 来创建项目(一篇文章就够了)

    如何使用 Maven 来创建项目(一篇文章就够了) 1. Maven 简介 1. 简介 2. 项目构建 3. 项目构建工具 2. Maven 的四大特性 1. 依赖管理系统 版本号规范 2. 多模块构 ...

  5. 学习 MongoDB 一篇文章就够了(珍藏版)

    文章目录 一.学习目录 二.扩展目录 一.学习目录 认识 MongoDB 一篇文章就够了 Windows平台安装MongoDB教程 Linux 上安装 MongoDB windows 安装 Mongo ...

  6. Android:学习AIDL,这一篇文章就够了(下)

    前言 上一篇博文介绍了关于AIDL是什么,为什么我们需要AIDL,AIDL的语法以及如何使用AIDL等方面的知识,这一篇博文将顺着上一篇的思路往下走,接着介绍关于AIDL的一些更加深入的知识.强烈建议 ...

  7. 架构师必须搞懂DNS,一篇文章就够了。

    转载自 架构师必须搞懂DNS,一篇文章就够了. 概念 DNS,全称Domain Name System,即域名系统,搞清楚,它不是DNF地下城与勇士. DNS是怎么来的,我们知道要访问一个服务器的资源 ...

  8. 集成Android免费语音合成功能(在线、离线、离在线融合),有这一篇文章就够了(离线)

    原址 集成Android免费语音合成功能(在线.离线.离在线融合),有这一篇文章就够了(在线) 集成Android免费语音合成功能(在线.离线.离在线融合),有这一篇文章就够了(离在线融合)     ...

  9. 全面认识MOS管,一篇文章就够了

    基础知识中 MOS 部分迟迟未整理,实际分享的电路中大部分常用电路都用到了MOS管, 今天势必要来一篇文章,彻底掌握mos管! ...更新:为什么常在MOS管GS并联电阻? ...更新:为什么要在MO ...

  10. 全面认识二极管,一篇文章就够了

    电子设计基础元器件 二极管,小小二极管,大大用途. ... 矜辰所致 目录 前言 一.二极管基础知识 1.1 什么是二极管 1.2 二极管的组成 1.3 二极管的原理 二.二极管特性 2.1 伏安特性 ...

最新文章

  1. 前端代码(移动端app, vue 源代码)打包方法
  2. 25 WM配置-策略-入库策略5-定义托盘策略P(Pallet Strategy)
  3. 华为s8600手机驱动_华为自研驱动IC已流片,最快今年量产
  4. Windows Server 2003成员服务器基准用户权限分配策略
  5. nit计算机应用基础考试系统,NIT考试计算机应用基础试题
  6. 基础概念 | 公约数、公倍数、互质数
  7. 【数理逻辑三】命题逻辑及形式系统【上】
  8. vue 统计中英文字符串长度_Ant Design Vue实现区分中英文分全角/半角字符长度校验功能...
  9. FPGA SDRAM接口设计(一)初窥门径
  10. 雅利安人有多强悍?灭掉三个文明古国,为何败在殷商的脚下
  11. 宁德时代与戴姆勒卡车股份公司扩大全球合作伙伴关系
  12. 大数据新算法在个人信用风险评估模型中使用效果的评估
  13. java.Net.UnknownHostException异常处理的方法
  14. KCL缓释剂以及金钙尔奇钙片有什么作用?怎样作用?//2021-2-7
  15. Python pandas把多个DataFrame对象写入Excel文件中同一个工作表
  16. HTML中的转义字符
  17. 算法学习之Trie树
  18. python爬空气污染实时数据_python数据分析综合项目--空气质量指数分析
  19. 深大uooc大学生心理健康章节答案第八章
  20. Joan Ganz Cooney将接受IBC2018卓越国际荣誉奖

热门文章

  1. Word无法找到宏或宏被禁用如何解决
  2. 【C#本质论 十一】合式类型(二)程序集引用、XML注释、垃圾回收和资源清理
  3. chrome浏览器谷歌浏览器打开是hao123
  4. iSCSI Initiator命名规范
  5. web app 第三方登录-微博登录(二)
  6. 路由器wifi热点丢包率高_使用笔记本电脑和虚拟路由器创建自己的Wifi热点
  7. css改变hr的默认样式
  8. 笔试题:计算机网络 (1)
  9. 51单片机模拟串口发送接收数据(不使用SBUF)
  10. java 确认邮箱地址的可达性