MacOS上通过docker部署
docker环境准备
1.访问这里安装好docker,需要注册账号才能下载dmg安装包:https://hub.docker.com/editions/community/docker-ce-desktop-mac
2.设置docker desktop for mac
2.1 设置docker占用资源
点击mac顶部的docker图标,在下拉菜单中选择preference项,打开docker配置页面,选中Advanced标签如下:
如上,整个dxxx除了数据部分跑起来,需要5G资源,sonar和nexus用公司公共的情况下。所以设置10G比较保险。实际起来用不了这么多。而且后面dxxx会针对单机版做精简,尽量减少不必要内存占用。cpu同样设置4核,会比较流畅。
2.2 设置文件共享,方便宿主机和容器间的目录挂载与共享:
2.3 设置docker daemon参数
如上在Daemon配置中,选Advanced标签,显示json配置,贴入如下配置:
{
"debug" : true,
"insecure-registries" : [
"reg.docker.alibaba-inc.com",
"registry.cn-hangzhou.aliyuncs.com",
"registry.aliyuncs.com",
"host.docker.internal:5000"
],
"experimental" : true,
"log-driver":"json-file",
"log-opts": {"max-size":"50m", "max-file":"2"}
}
点击"Apply & Restart"按钮应用并重启整个docker daemon;
不像linux,Mac上因为中间隔了一层vm的缘故,重启mac docker后之前的所有容器都会退出到stop状态
参数解释:
1.host.docker.internal:5000
其中的host.docker.internal是docker for mac特有的一个域名,在容器内部会被解析为容器所在的host的ip,就是docker for mac自动为docker环境启动的一个轻量级vm的ip地址,在mac上是访问不到的。我们会用这个域名在vm内部不同的容器间做通信。5000端口是为dxxx依赖的registry组件准备的,一键安装dxxx时内部registry容器会暴露这个端口
2."experimental" : true
这个参数是为了解决一个报错的问题,具体忘记了。。。
3.log-driver和log-opts
设置docker的日志引擎为json-file,每个容器的日志文件大小为50m,超过大小时2个文件循环滚动
3.检查docker环境是否正常
➜ docker git:(master) ✗ docker version
Client: Docker Engine - Community
Version: 18.09.1
API version: 1.39
Go version: go1.10.6
Git commit: 4c52b90
Built: Wed Jan 9 19:33:12 2019
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.1
API version: 1.39 (minimum version 1.12)
Go version: go1.10.6
Git commit: 4c52b90
Built: Wed Jan 9 19:41:49 2019
OS/Arch: linux/amd64
Experimental: true
➜ docker git:(master) ✗ docker-compose version
docker-compose version 1.23.2, build 1110ad01
docker-py version: 3.6.0
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.1.0h 27 Mar 2018
➜ docker run --rm -it registry.aliyuncs.com/tmns/tmns-centos:base bash
[root@4465f103a4bb /]# uname -r
4.9.125-linuxkit
[root@4465f103a4bb /]# exit
exit
如上说明docker for mac环境正常。docker desktop for mac版本自带docker-compose工具
1.清理docker容器和镜像
删除所有已经停止的容器:docker rm $(docker ps -a -q)
删除所有未打 dangling 标签的镜像(即未被任何镜像引用的空悬镜像):
删除已经停止的容器,和未被任何镜像引用的空悬(dangling)镜像:docker system prune
删除所有已停止容器,和未被任何容器引用的镜像:docker system prune -a -f
➜ docker system prune
WARNING! This will remove:
- all stoppeds
- all networks not used by at least one
- all dangling images
- all dangling build cache
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
➜ docker system prune -a -f
...
untagged: registry.aliyuncs.com/dxxx/dxxxhub-action@sha256:09f9a0df826d7974ed3a8194aa180d6308b7396dfa31c0b4539f642c3a68233e
deleted: sha256:1a60b505dca2281c3c1a75b2442cd9d7d7842152988c8856b9f314669a0e99c0
...
Total reclaimed space: 6.322GB
2.收缩docker for mac占用磁盘
➜ docker git:(master) ✗ ls -lh ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
-rw-r--r-- 1 xlxk staff 11G 2 23 19:36 /Users/xlxk/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
在mac下 docker system prune -a -f 之后,上面这个qcow2文件会显著变小。看来mac下qcow2已经优化得很好,不需要再做额外彻底的清理了。否则的话可以停止docker,删除这个qcow2文件,再启动docker; 所有的容器、镜像和volumes会彻底消失
3.查看容器日志
查看一个容器的全部日志:➜ docker logs dxxx-orchestrator
跟踪一个容器的全部日志: ➜ docker logs -f dxxx-orchestrator
将容器日志导出到文件中:➜ docker logs dxxx-orchestrator &> dxxx-orchestrator.log
4.查看容器配置
➜ docker git:(master) ✗ docker inspect xxx
[
xxx
]
注意:以上输出删除了不常关注的部分,留下了常用的部分
5.查看容器资源使用情况
➜ docker git:(master) ✗ docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
8f60c461fbdd dxxx-ui 0.00% 37.24MiB / 9.744GiB 0.37% 830kB / 721kB 0B / 16.4kB 4
b36b4d88b7bf dxxx-pipeline 0.00% 16.52MiB / 9.744GiB 0.17% 34.2MB / 11.5MB 0B / 0B 15
8f54559ad0f9 dxxx-dxxxhub 0.43% 4.484MiB / 9.744GiB 0.04% 667kB / 378kB 0B / 0B 15
可以看到,只要java写的组件,内存占用轻松上1G,没1G也有大几百兆; golang写的组件只有10M左右