一帮年轻人,开了一家公司,从2010年的时候开始paas平台. 当时发现的及其好.
到了2013年的时候,像亚马逊,微软,谷歌都开始作paas平台.
同年2013年,将他们的核心技术开源, 这个核心技术就是Docker.
到了2014年,得到了C轮的融资.$4000W.
到了2015年,得到了D轮的融资.$9500W.
全神贯注的开始维护Docker.
Docker主要作者之一. 所罗门.
Docker的作者已经离开了维护Docker的团队,所罗门离开的主要原因,是朋友的公司,缺一个CEO
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.tgz3、解压之后的文件移动到 /usr/bin/ 目录下
mv docker/* /usr/bin/4、新增docker.service文件
vi /etc/systemd/system/docker.service
[Unit] Description=Docker Application Container Engine documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=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 docker ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock ExecReload=/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=infinity LimitNPROC=infinity LimitCORE=infinity # Uncomment TasksMax if your systemd version supports it. # only systemd 226 and above support this version. #TasksMax=infinity TimeoutStartSec=0 # set delegate yes so that systemd does not reset the cgroups of docker containers Delegate=yes # kill only the docker process, not all processes in the cgroup KillMode=process # restart the docker process if it exits prematurely Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target5、给docker.service文件添加执行权限
chmod +x /etc/systemd/system/docker.service6、重新加载配置文件(每次有修改docker.service文件时都要重新加载下)
systemctl daemon-reload7、启动docker
systemctl start docker8、设置开机启动
systemctl enable docker.service9、查看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-compose2、然后添加可执行权限
chmod +x /usr/local/bin/docker-compose3、测试安装结果
docker-compose --version4、docker-compose文件结构
version: "3.3"
networks:
net_app:
services:
fm:
image: leave:2.6.2
privileged: true
restart: always
networks:
- net_app
build: ./app
volumes:
- ./logs/fm:/var/log/leave
environment:
- TZ=Asia/Shanghai
env_file:
- ./conf/leave.env
container_name: app_0
ports:
- 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 -nlpt2、 端口开启后可以开发工具集成一下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
1.8 xxxx org.springframework.boot spring-boot-maven-plugincom.spotify docker-maven-plugin1.0.0 ${docker.image.prefix}/${project.artifactId} / ${project.build.directory} ${project.build.finalName}.jar
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.sock4、重启服务
systemctl daemon-reload systemctl restart docker.service systemctl status docker5、查看端口是否启动
netstat -nltp6、将客户端所需的ca.pem、cert.pem、key.pem3个密钥文件从服务器下载到本地
剩下的就是跟上面一样了。苟富贵 勿相忘 ,作者也在努力学习 ,共同进步!



