目录
一、DockerCompose 容器编排
1.1、简介
1.2、Docker-Compose 安装
1.2.1、在线安装
1.2.2、离线安装
1.3、docker-compose.yml 中的模板命令
前置说明
模板命令
1.4、DockerCompse 命令
前置说明
up
down
exec
ps
restart
rm
top
pause暂停 和 unpause恢复
logs
二、Pottainer Docker 可视化界面
2.1、简介
2.2、使用
一、DockerCompose 容器编排
1.1、简介
a)为什么使用 DockerCompose?(纯 Docker 进行项目部署存在问题)
- 容器编排:例如,一个完整的微服务项目势必会用到多个容器进行配置,而这多个容器之间也会存在某种依赖,也就是说某些容器运行需要其他容器优先启动之后才能正常运行,这就需要使用 DockerCompose 进行容器编排.
- 方便部署:纯 Docker 部署,需要将一个项目涉及到的 N 多个容器进行一一部署,因此日后如果需要进行多个服务器部署就会显得相当麻烦. 而使用 DockerCompose 只需要一条命令即可解决.
b)什么是 DockerCompose?
Compose 的定位就是对多个 Docker 容器的管理,也就是说对 项目 所涉及到的所有容器整合到一起,对这组容器进行按照指定顺序启动.
c)如何使用 DockerCompose?
首先明白以下两个概念:
- 项目:由一组管理的服务(容器)组成的一个完整的业务单元,在 docker-compose.yml 文件中定义.
- 服务:一个项目中的某个容器就是一个服务.
因此,我们只需要在 docker-compose.yml 文件中编写容器编排,之后就可以通过 DockerCompose 提供的相关命令对此文件进行操作,进而实现容器编排.
1.2、Docker-Compose 安装
Tip:只有 Linux 平台上安装 Docker 时不会自动安装 DockerCompose。Windows、Macos 安装 Docker 时会自动安装 DockerCompose.
1.2.1、在线安装
a)在线安装 DockerCompose
# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
b)修改权限
# 修改权限
chmod +x /usr/local/bin/docker-compose
1.2.2、离线安装
a)下载 docker-compose 脚本
b)放入 /usr/local/bin 目录下.
c)修改权限:chmod +x /usr/local/bin/docker-compose
1.3、docker-compose.yml 中的模板命令
前置说明
docker-compose.yml 文件一般分成两个部分,一个部分使用来说明当前 DockerCompose 文件的版本(不同版本语言大同小异). 另一个部分就是进行容器编排的.
a)指定版本:docker-compose.yml 文件的第一个命令一般都是用于指定当前 DockerCompose 文件的版本。
可以先通过命令查看自己 DockerCompose 的版本.
可以对应下标找到自己的版本(官网也有)
Compose file format | Docker Engine release |
---|---|
Compose specification | 19.03.0+ |
3.8 | 19.03.0+ |
3.7 | 18.06.0+ |
3.6 | 18.02.0+ |
3.5 | 17.12.0+ |
3.4 | 17.09.0+ |
3.3 | 17.06.0+ |
3.2 | 17.04.0+ |
3.1 | 1.13.1+ |
3.0 | 1.13.0+ |
因此我这里就是用 3.5 就ok,那么对应的 docker-compose.yml 文件如下
version: "3.5"
b)容器编排:例如需要编排一个 tomcat:8.0 的镜像.
# 版本
version: "3.5"# 管理服务
services:tomcat: # 自定义服务名称(id)image: tomcat:8.0 # 基于哪个镜像ports: # 映射 宿主机:容器 端口- 8080:8080
以上只是给出一个小示例,下文中会具体讲到~
模板命令
以下 docker-compose.yml 文件中包含了所有常用的模板命令.
# 版本
version: "3.5"# 声明使用网桥
networks:cyk:# 声明别名数据卷
volumes:mysqlData:# 管理服务
services:apps: # 自定义服务id
# container_name: web_apps # a.指定 name(不推荐使用)build: # 1.根据 Dockerfile 构建镜像,并启动容器context: ./ # 用来指定 Dockerfile 上下文目录dockerfile: Dockerfile # 指定 Dockerfile 文件名称ports: # 2.映射端口- "8081:8081"
# expose: # b.暴露端口(不建议使用)
# - 8081depends_on: # 3.依赖服务- mysql #这里就是指在 mysql 启动之后再启动当前服务# command: ["test.jar"] # 4.覆盖启动容器后的命令(覆盖CMD)networks: # 5.指定网桥- cyk # 这个网桥需要声明才能使用mysql:image: mysql:5.7 # 6.指定启动镜像ports:- "3306:3306"# environment: # 7.配置环境变量(适用于保密性不高的参数)# 两种写法(推荐字符串形式)# MYSQL_ROOT_PASSWORD: root# - "MYSQL_ROOT_PASSWORD=root"env_file: # 8.配置环境变量(适用于保密性高的参数,例如 MySQL 数据库密码)- ./.envvolumes: # 9.数据卷映射- mysqlData:/var/lib/mysql # 别名数据卷需要声明(例如此处的 mysqlData)restart: always # 10.指定服务启动时机(always 表示 docker 启动就立即启动)
常用模板指令解释:
- build:指定需要根据哪个 Dockerfile 文件构建镜像(通过 context 参数指定上下文目录;通过 dockerfile 参数指定 Dockerfile 文件),并运行.
- ports:指定宿主机和容器端口的映射,相当于 docker run -p
- depends_on:指定当前容器依赖于哪个容器,被依赖的容器会先启动(解决服务的先后启动问题).
- command:覆盖 dockerfile 文件中的 CMD 指令.
- networks:指定启动容器使用的网桥(需要有声明).
- image:指定启动容器使用的镜像是谁,相当于 docker run image(镜像名).
- environment:指定容器启动时的环境变量,相当于 docker run -e 选项(适用于密保性不高的参数).
- env_file:指定容器启动时的环境变量,相比于 environment 参数,此命令指定的是一个文件(文件中包含环境变量值),并且建议文件名为 .env (适用于保密性高的参数,例如 MySQL 数据库密码).
- volumes:指定宿主机和容器数据卷的映射,相当于 docker run -v
- restart:指定当前服务的运行情况,例如 always 表示跟随 docker 引擎的启动而启动,相当于 docker run --restart=always
不推荐使用的模板指令解释:
a. container_name:指定 docker-compose 启动容器名称(不推荐原因:写死容器名后,不利于后期修改维护).
b.expose:指定暴露的端口号(不推荐原因:expose 一般都写在 Dockerfile 文件中,不需要再 docker-compose.yml 文件中重复声明).
1.4、DockerCompse 命令
前置说明
docker-compose 命令语法如下:
docker-compose 命令 项目|服务id
docker-compose 命令如果没有指定 服务id,默认是对整个项目的操作!
Ps:docker-compose 中只需要重点掌握 up 和 down 就可以,因为其他指令基本都可以通过 docker 原生命令解决~
up
此命令十分强大,它将禅师自动完成构建镜像、(重新)创建服务、启动服务,并关联服务相关容器的一系列操作(简单来说就是按照 docker-compose.yml 文件内容来启动项目).
# 启动整个项目
docker-compose up
# 启动 docker-compose.yml 文件中对应 服务id 的容器
docker-compose up 服务id
down
关闭所有容器,并移除网络.
# 关闭整个项目
docker-compose down
# 关闭指定服务
docker-compose down 服务id
exec
进入某个服务内部.
docker-compose exec 服务id bash
ps
列出所有运行的服务.
docker-compose ps
restart
重启整个项目或指定服务.
# 重启整个项目
docker-compose restart
# 重启指定服务
docker-compose restart 服务id
# 通过 -t 参数指定重启前停止容器的超时时间(默认是 10s),例如指定超时时间为 20s
docker-compose restart -t 20 服务id
rm
删除整个项目或者指定服务.
# 整个项目
docker-compose rm
# 删除指定服务
docker-compose rm 服务id
# 强制删除
docker-compose rm -f 服务id
# 删除容器所挂载的数据卷
docker-compose rm -v 服务id
top
查看整个项目中所有服务容器内运行进程,或者查看某个指定服务的容器的进程.
docker-compose top 服务id
pause暂停 和 unpause恢复
暂停或者恢复整个项目所有服务或者指定服务.
docker-compose pause|unpause 服务id
logs
查看整个项目中所有服务运行日志,或者指定服务的运行日志.
# 通过 -f 参数可以达到实时监控的效果
docker-compose logs -f 服务id
二、Pottainer Docker 可视化界面
2.1、简介
第三方公司开源 Portainer 项目,用来对 docker 引擎中运行所有容器进行可视化展示和管理.
2.2、使用
直接使用以下命令拉取并运行:
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:/dataportainer/portainer
8080 端口映射的是 docker 引擎,方便拉取 docker 镜像,容器的运行的数据.
9090 端口就是我们可以访问的可视化界面.