服务器调优
在服务器上安装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和一流的可靠性。总的来说,我很满意。
资源:
- 2016年有关CoreOS定制的文章
- 不加密的Docker远程API
- Docker站点以及本文本身链接的所有资源