如何省钱购买笔记本电脑:通过TLS的Docker远程API

最近,我决定购买一台个人笔记本电脑。开源项目的开发(用于Flipper的应用程序)和工作地点的变更迫使我不再将我的笔记本电脑用于个人目的。而在这里给笔记本电脑提供支持的Hyndai Solaris成本已经很可惜了(在工作中,我配置了16台“ MacBooks”作为高端配置。 因此,决定减低热情并以8万卢布的价格购买流氓最便宜的MacBook Air 13”。但是,在Mac上,Docker占用了大量资源,因此在购买后,我不得不考虑如何解决此问题。这个想法马上就出现了,将Docker引擎带到了某个地方。说到做到。











服务器调优



在服务器上安装Docker Engine



Linux上docker的开销很小。 Mac上的Docker在Linux虚拟机中运行,而在Linux上,它直接使用主机的内核。您可以在此处了解更多信息



由于小ping对我们很重要,因此在莫斯科购买主机托管是有意义的,但没有太大区别。



总计:Linux,莫斯科,特性取决于您的需求。ruvds.com

只有便宜的现成价格。同样在ruvds.com上,可以立即使用板载Docker CE来订购设置。有点琐事,但是很好。 查找密码,然后在主机的Web界面中登录并连接。











接下来,安装Docker。有一位优秀的指令在这里,下面我就简单的给它的命令(如果你突然没有它sudo,不要忘了安装它apt-get install sudo从下su):



sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io


让我们检查一下docker的工作:



docker run hello-world




产生金钥



首先,您需要生成SSL密钥。您可以遵循简单和困难的道路。有关硬路径(规范)的说明,请参阅Docker文档但是好人把这一切塞进了一个不到10mb的容器中。



让我们为开始创建一个文件夹,在其中存储所有内容。文件夹可以是任何东西。第一个(/etc/docker/ssl)存储秘密密钥,第二个)存储~/.docker密钥以进行访问。



sudo mkdir -p /etc/docker/ssl
mkdir -p ~/.docker


首先,让我们在本地文件夹中创建客户端和CA证书



docker run --rm -v ~/.docker:/certs \
    paulczar/omgwtfssl


让我们使用上面生成的CA创建服务器证书。在此指定您将用来访问服务器的IP(以逗号分隔)。在我们的情况下,请不要忘记在此处指定服务器的IP!



sudo cp ~/.docker/ca.pem /etc/docker/ssl/ca.pem
chown -R $USER ~/.docker
docker run --rm -v /etc/docker/ssl:/server \
    -v ~/.docker:/certs \
    -e SSL_IP=127.0.0.1,172.17.8.101,YOUR_IP \
    -e SSL_DNS=docker.local -e SSL_KEY=/server/key.pem \
    -e SSL_CERT=/server/cert.pem paulczar/omgwtfssl


配置Docker守护程序



此阶段的主要任务是在启动docker时使用我们需要的参数推送命令行参数。您的操作方式并不重要,在Ubuntu上,您可以这样操作:



1.使用/etc/default/docker您喜欢的编辑器编辑文件



nano /etc/default/docker


然后在末尾添加变量“ DOCKER_OPTS”。不要忘记在此处插入外部IP




DOCKER_OPTS="-H=YOUR_IP:2376 -H unix:///var/run/docker.sock --tlsverify --tlscacert=/etc/docker/ssl/ca.pem --tlscert=/etc/docker/ssl/cert.pem --tlskey=/etc/docker/ssl/key.pem"


2.添加参数以启动服务。在Ubuntu上,启动参数文件为/lib/systemd/system/docker.service在小节中添加一行[Service]



EnvironmentFile=/etc/default/docker


然后我们并排更改启动命令:



ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS


是的,第1点是可选的,命令参数也可以在此处插入,但是参数很多,在服务文件中运行大型命令很不方便。



3.重新启动守护程序



sudo systemctl daemon-reload
sudo systemctl restart docker


4.在守护程序日志中检查一切正常:



journalctl -u docker.service -f




5.让我们尝试通过tls连接:



export DOCKER_HOST=tcp://YOUR_IP:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=~/.docker
docker info




加工!



在客户端上配置



在开始配置客户端之前,需要将certificate文件夹下载到您的计算机。您可以通过任何方便的方式来执行此操作。例如,通过`scp`:



在远程计算机上:



mkdir /tmp/cert-for-docker && cp -v ~/.docker/{ca,cert,key}.pem /tmp/cert-for-docker


在本地计算机上:



scp -r root@YOUR_IP:/tmp/cert-for-docker ~/.docker


接下来,使用此文件夹配置您的Docker客户端。



Mac OS CLI



在这里,设置归结为您需要在您的环境中注册变量,并且一切正常的事实。但是,出现了一个问题:“我在哪里可以得到一个裸体客户?我们不需要Docker Engine随附的官方2GB重量级客户端,对吗?”



有解决办法!长期以来,现代Docker已分为客户端和服务器部分。您可以下载为macOS编译的单独的客户端二进制文件。官方的说明是在这里,但我会给出一个简要的位置:



1。下载最新的二进制文件或对应于您的服务器的人(你可以拉出来用命令docker info从)链接并解压

2.复制二进制文件的文件夹/usr/local/bin/来工作全局:

sudo cp docker/docker /usr/local/bin/


3.我们注册~/.bashrc注册~/.zshrc必要的环境变量。不要忘记使用证书将IP和路径插入文件夹

export DOCKER_HOST=tcp://YOUR_IP:2376
export DOCKER_CERT_PATH=PATH_TO_CERT
export DOCKER_TLS_VERIFY=1


4.重新启动计算机(确定为Schaub),检查:



docker info
docker run hello-world




美女!



Jetbrains IDE(PyCharm,IDEA,Android Studio等)



Jetbrains工作室开箱即用地通过tls支持docker。此设置位于中Preference->Build, Execution, Deployment->Docker->+您需要在TCP socket此处选择并输入您的详细信息。但是,有一个陷阱。





如果一切都按预期完成,则会出现错误:

来自守护程序的错误响应:客户端向HTTPS服务器发送了HTTP请求。

错误漂亮的打印信息
要么

无法连接:状态400:客户端向HTTPS服务器发送了HTTP请求
有必要向我们的工作室明确规定我们使用的协议https

您的IP:2376
之后一切都应该正常工作。



红利(Portainer)



为了有效地跟踪正在运行和已经使用过的容器,我在此服务器上安装了Portainer。它应该放在两行中:



docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce


之后,一个YOUR_IP:9000漂亮的Web界面将挂起,您可以看到正在运行和已终止的容器。还记得我们是如何开始的hello-world吗?它在这里,您可以直接从界面中清理它。





Portainer本身可以连接到任何Docker机器,并可以从一处管理所有机器的Docker容器。度量标准(Grafana + Prometheus + Alerts)可以通过两个命令(不要忘记安装gi docker-compose轻松设置



git clone https://github.com/stefanprodan/dockprom && cd dockprom
ADMIN_USER=admin ADMIN_PASSWORD=admin docker-compose up -d








仅对于存储,您需要更改sum(node_filesystem_free_bytes{fstype="aufs"})sum(node_filesystem_free_bytes{fstype="ext4"})







结论



当我买一台笔记本电脑时,我并不希望自己对任何任务都足够,特别是因为对于我的Java / Android开发来说足够了。但是令我感到惊讶的是,到目前为止,我所有的项目(个人的和只是开源的)都在IDE中运行。但是,我意识到,尽管我对这款打字机一无所爱,但它并不会淘汰Docker。我很高兴在远程docker服务器上配置了它一次。在开发过程中,绝对不是服务器不是本地服务器。我没有任何限制,没有意义的情况下在没有Internet的情况下运行Docker都是一样的。总的来说,我很满意。 -1购买强大而笨重的笔记本电脑的原因。



另外,Linux的Docker开销很小,因此您可以每月从俄罗斯的RuVDS租用240卢布的汽车(并使用HABR促销代码享受折扣)-10%甚至更少),并且不必担心ping以及服务器应用程序对UI的影响。此外,还有一个外部IP(可以显示客户端并保留开发人员的资料),一个专用VPN和一流的可靠性。总的来说,我很满意。



资源:












All Articles