一, Docker-Compose 简介
Compose 是用于定义和运行容器 docker 应用程序的工具. 通过 Compose, 可以使用 YAML 文件来配合应用程序需要的所有的服务. 然后, 使用一个命令, 就可以从 YAML 文件配合中创建并启动所有服务. 那么就需要了解 YAML 文件的基本语法.
YAML 文件基本语法:
大小写敏感;
使用缩进表示层级关系;
缩进不允许使用 tab, 只允许空格;
缩进的空格数不重要, 只要相同等级的元素左对齐即可;
"#" 表示注释;
Docker-Compose 是一个容器编排工具. 通过一个. YAML 或. YAML 文件, 将所有的容器的部署方法, 文件映射, 容器端口映射等情况写在一个配置文件里, 执行 docker-compose up 命令就像执行脚本一样, 一个一个的安装并部署容器.
Dockerfile 可以让用户管理一个单独的应用容器; 而 Compose 则允许用户在一个模板 (YAML 格式) 中定义一组相关联的应用容器;
Docker Compose 将所管理的容器分为三层:
工程(project);
服务(service);
容器(container);
docker compose 运行目录下的所有 YAML 文件组成一个工程, 一个工程包含多个服务, 每个服务中定义了容器运行的镜像, 参数, 依赖. 一个服务可包括多个容器实例.
docker-compose 就是 docker 容器的编排工具, 主要就是解决相互有依赖关系的多个容器的管理.
二, docker-compose 工具的安装使用
若想使用 docker-comppose 这个容器编排工具, 那么宿主机必须是基于 docker 的环境, 可以参考 docker 详细安装教程 https://blog.51cto.com/14157628/2449652 .docker 的环境解决了之后, 就是下载 docker-compose 这个命令, 可以上 GitHub 官网 https://github.com/ 进行下载, 如图:
下载 compose 工具时, 需先查看本机的 docker 版本!
- [[email protected] ~]# docker -v // 查看 docker 的版本信息
- Docker version 18.09.0, build 4d60db4
- // 本次采用 18.9.0 版本
如果 docker 版本过低, 可以自行查找其他版本的 docker-compose 工具. 选择合适的版本之后, 执行在 GitHub 网站上找到的命令.
- [[email protected] ~]# curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
- [[email protected] ~]# chmod +x /usr/local/bin/docker-compose
如果网速不佳可以使用以下命令:
- [[email protected] ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m`> /usr/local/bin/docker-compose
- [[email protected] ~]# chmod +x /usr/local/bin/docker-compose
- // 使用道云的加速器进行下载
- [[email protected] ~]# docker-compose -v // 查看工具的版本信息
- docker-compose version 1.25.0, build 0a186604
三, 编写. YAML 文件
(1)构建简单的 Nginx 服务. YAML 文件
- [[email protected] ~]# VIM /root/.vimrc
- set tabstop=2
- [[email protected] ~]# source /root/.vimrc
- // 由于 tab 键使用的较多, 所以事先设置了一个 tab 键代表的空格数
- [[email protected] ~]# mkdir compose_test
- [[email protected] ~]# cd compose_test/
- // 创建一个测试目录, 用于存放 docker-compose.YAML 文件
- // 建议一个目录下只有一个 docker-compose.YAML 文件
- [[email protected] compose_test]# VIM docker-compose.YAML // 编写一个 docker-compose.YAML 文件
- version: "3" // 指定语法的版本
- services: // 定义服务
- nginx:
- container_name: web_nginx // 运行的容器名
- image: nginx // 使用的镜像
- restart: always // 随 docker 服务的启动而启动
- ports:
- - 90:80 // 映射的端口
- volumes:
- - /root/compose_test/webserver:/usr/share/nginx/html // 本地与容器挂载的目录
- // 编写文件注意缩进
- [[email protected] compose_test]# docker-compose up -d
- // 使用当前目录下的 docker-compose.YAML 文件生成相应的容器
- //"-d" 选项, 表示后台运行, 如果不指定, 默认则在前台运行, 会占用终端
- [[email protected] compose_test]# docker ps // 查看运行的容器
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- c674041cc65b nginx "nginx -g'daemon of..." 8 minutes ago Up 8 minutes 0.0.0.0:90->80/tcp web_nginx
- [[email protected] compose_test]# echo "hello world"> webserver/index.HTML
- // 创建测试网页
- [[email protected] compose_test]# curl 127.0.0.1:90
- hello world
- // 访问测试
- [[email protected] compose_test]# docker-compose stop
- // 通过. YAML 文件停止文件中指定的容器
- [[email protected] compose_test]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- // 查看效果
- [[email protected] ~]# docker-compose -f /root/compose_test/docker-compose.YAML up -d
- // 可以使用 "-f" 选项来指定 YAML 文件启动文件中定义的容器
(2)compose+dockerfile 构建镜像
- [[email protected] ~]# mkdir compose && cd compose // 创建一个测试目录并进入
- [[email protected] compose]# VIM Dockerfile // 创建 dockerfile
- FROM nginx:latest
- ADD HTML /usr/share/nginx/HTML
- [[email protected] compose]# VIM docker-compose.YAML // 编写 YAML 文件
- version: "3"
- services:
- nginx:
- build: . // 这里指定 dockerfile 的路径, 可以写相对路径或绝对路径
- container_name: mynginx // 生成的容器名称
- image: mynginx // 使用 dockerfile 生成的镜像名称
- restart: always
- ports:
- - 70:80
- [[email protected] compose]# mkdir HTML
- [[email protected] compose]# echo "hello world"> HTML/index.HTML // 创建网页目录
- [[email protected] compose]# docker-compose build // 就是将 dockerfile 文件生成镜像
- [[email protected] compose]# docker-compose up -d // 直接生成容器, 上一条命令可以忽略
- [[email protected] compose]# curl 127.0.0.1:70
- hello world
- // 测试效果
(3)使用. YAML 文件搭建博客平台
- [[email protected] ~]# mkdir WordPress && cd WordPress // 创建测试目录
- [[email protected] WordPress]# VIM docker-compose.YAML // 编写 YAML 文件
- version: "3.1"
- services:
- wordprss:
- image: WordPress // 指定使用的镜像
- restart: always
- ports:
- - 8080:80 // 指定映射的端口
- environment: // 修改容器内部的环境变量
- WORDPRESS_DB_HOST: db
- WORDPRESS_DB_USER: WordPress
- WORDPRESS_DB_PASSWORD: 123.com
- WORDPRESS_DB_NAME: WordPress
- db:
- image: MySQL:5.7
- restart: always
- environment:
- MYSQL_DATABASE: WordPress
- MYSQL_USER: WordPress
- MYSQL_PASSWORD: 123.com
- MYSQL_ROOT_PASSWORD: 123.com
- [[email protected] WordPress]# docker-compose up -d // 生成相应的容器, 并在后台运行
- [[email protected] WordPress]# netstat -anpt | grep 8080 // 确定端口在监听
- tcp6 0 0 :::8080 :::* LISTEN 5546/docker-proxy
- [[email protected] WordPress]# docker ps | grep Word // 确定容器在运行
- 81dd5fe032a6 WordPress "docker-entrypoint.s..." 7 minutes ago Up 7 minutes 0.0.0.0:8080->80/tcp wordpress_wordprss_1
- 702b530d7679 MySQL:5.7 "docker-entrypoint.s..." 7 minutes ago Up 7 minutes 3306/tcp, 33060/tcp wordpress_db_1
- [[email protected] WordPress]# echo "net.ipv4.ip_forward = 1">> /etc/sysctl.conf
- [[email protected] WordPress]# sysctl -p
- net.ipv4.ip_forward = 1
现在就可以访问测试页面了. 如图:
访问自己搭建的博客成功!
三, Docker 的监控
(1)docker 自带的监控命令
- [[email protected] ~]# docker top wordpress_wordprss_1 // 查看容器的使用状态
- UID PID PPID C STIME TTY TIME CMD
- root 5601 5569 0 20:53 ? 00:00:00 apache2 -DFOREGROUND
- 33 6073 5601 0 20:54 ? 00:00:00 apache2 -DFOREGROUND
- 33 6074 5601 0 20:54 ? 00:00:00 apache2 -DFOREGROUND
- 33 6075 5601 0 20:54 ? 00:00:00 apache2 -DFOREGROUND
- 33 6076 5601 0 20:54 ? 00:00:00 apache2 -DFOREGROUND
- 33 6077 5601 0 20:54 ? 00:00:00 apache2 -DFOREGROUND
- 33 6096 5601 0 20:54 ? 00:00:00 apache2 -DFOREGROUND
- 33 6098 5601 0 20:54 ? 00:00:00 apache2 -DFOREGROUND
- 33 6099 5601 0 20:54 ? 00:00:00 apache2 -DFOREGROUND
- 33 6100 5601 0 20:54 ? 00:00:00 apache2 -DFOREGROUND
- 33 6155 5601 0 20:57 ? 00:00:00 apache2 -DFOREGROUND
- [[email protected] ~]# docker stats wordpress_wordprss_1
- [[email protected] ~]# docker logs wordpress_wordprss_1
- // 这三条都是容器本身自带的监控命令
- (2)sysdig
- [[email protected] ~]# docker run -it --rm --name sysdig --privileged=true --volume=/var/run/docker.sock:/host/var/run/docker.sock --volume=/dev:/host/dev --volume=/proc:/host/proc:ro --volume=/boot:/host/boot:ro --volume=/lib/modules:/host/lib/modules:ro --volume=/usr:/host/usr:ro sysdig/sysdig
- // 创建一个容器并自动进入容器中
- //--rm: 随着退出容器而被删除;
- //--privileged=true: 赋予特殊权限;
- [email protected]:/# csysdig // 执行这条命令
如图:
图中可以使用键盘和鼠标进行操作!
- (3)scope
- [[email protected] ~]# curl -L Git.io/scope -o /usr/local/bin/scope
- [[email protected] ~]# chmod +x /usr/local/bin/scope // 下载安装脚本
- [[email protected] ~]# scope launch // 以容器方式启动
- ........................
- Weave Scope is listening at the following URL(s):
- * http://172.21.0.1:4040/
- * http://192.168.122.1:4040/
- * http://172.22.0.1:4040/
- * http://172.20.0.1:4040/
- * http://172.18.0.1:4040/
- * http://172.19.0.1:4040/
- * http://192.168.1.1:4040/
- // 根据末尾的提示信息进行访问
如图:
根据图中的提示, 自行可以点击进行测试!
如果要监控两台的话: 主机名必须进行区分方法如下:
- [[email protected] ~]# curl -L Git.io/scope -o /usr/local/bin/scope
- [[email protected] ~]# chmod +x /usr/local/bin/scope
- [[email protected] ~]# scope launch 192.168.1.1 192.168.1.2 // 首选指定本地的 IP, 再指定对方的 IP
- [[email protected] ~]# docker run -itd --name http httpd // 运行一个容器进行测试
- [[email protected] ~]# curl -L Git.io/scope -o /usr/local/bin/scope
- [[email protected] ~]# chmod +x /usr/local/bin/scope
- [[email protected] ~]# scope launch 192.168.1.2 192.168.1.1
- [[email protected] ~]# docker run -itd --name nginx nginx
访问 (dockerA,dockerB 任意一台即可) 测试:
---------- 本文到此结束, 感谢观看 ----------
来源: http://www.bubuko.com/infodetail-3347189.html