Docker Compose安装及常用指令

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_43190579/article/details/102759459

一. Compose简介

Compose是一个定义和运行多容器的docker应用工具,负责实现对Docker容器集群的快速编排 .
组成 : 工程 服务 容器

二. Compose安装

  1. 下载二进制安装包
  2. 设置文件为可执行文件
#下载二进制安装包
curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#设置/usr/local/bin/docker-compose为可执行文件
chmod +x /usr/local/bin/docker-compose
#查看版本信息
docker-compose -version

三. 常用命令

Compose命令的基本使用格式:

_docker-compose [-f 参数...] [options] [COMMAND] [ARGS...]_

命令选项:

-f,-file FILE指定使用的Compose模板文件,默认为docker-compose.yml,可以多次指定
-p, -project-name NAME指定项目名称,默认将使用所在目录名称作为项目名
-x-network-driver 使用Docker的可拔插网络后端特性(需要Docker 9.0及其之后的版本)
-x-network-driver DRIVER指定网络后端的驱动,默认为bridge(需要Docker9.0及其之后的版本)
-verbose 输出更多的调试信息
-v, -version打印并退出

up :

尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作.

docker-compose up [options] [–scale SERVICE=NUM…] [SERVICE…]

选项包括:

-d 在后台运行服务容器
-no-color 不使用颜色来区分不同的服务的控制输出
-no-deps 不启动服务所链接的容器
-force-recreate 强制重新创建容器,不能与-no-recreate同时使用
-no-build 不自动构建缺失的服务镜像
-abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用
-t , --timeout TIMEOUT 停止容器的超时时间(默认为10s)
-remove-orphans 删除服务中没有在compose文件中定义的容器
-scale SERVICE=NUM 设置服务运行容器的个数,将覆盖在compose中通过scale指定的参数

ps :
列出项目中目前的所有容器.
格式为:

docker-compose ps [options] [SERVICE…]

选项包括:

-q 只打印容器的ID信息

stop :
停止已经处于运动状态的容器,但不删除.
格式为:

docker-compose stop [options] [SERVICE…]

选项包括:

-t ,–timeout TIMEOUT 停止容器的超时时间(默认10s)

down :
停止并删除容器 网络 卷 镜像等数据

选项包括:

-rmi type 删除镜像,类型必须是:‘all’ : 删除compose文件中定义的所有镜像; ‘local’ : 删除镜像名为空的镜像
-v , --volumes 删除已经在compose文件中定义的匿名的附在容器上的数据卷
-remove-orphans 删除服务中没有在compose中定义的容器

restart :
重启项目中的服务
格式为:

docker-compose restart [options] [SERVICE…]

选项包括:

-t ,–timeout TIMEOUT 指定重启前停止容器的超时时间(默认10s)

rm :
删除所有(停止状态的)服务容器
格式为:

docker-compose rm [options] [SERVICE…]

选项包括:

-f , --force 强制直接删除,包括非停止状态的容器
-v 删除容器所挂在的数据卷

start :
启动已经存在的服务
格式为:

docker-compose start [options] [SERVICE…]

exec :
通过service name登录到容器中,和docker exec命令功能相同
格式为:

docker-compose exec [options] [SERVICE…]

选项包括:

-d 分离模式 , 后台运行命令
-pricileged 获取特权
-user USER 指定运行的用户
-T 禁用分配TTY,By default docker-compose exec分配-a TTY
-index=index 当一个服务拥有多个容器时,可通过索引号登陆到该服务下的任何服务

四. Compose模板文件

1. 模板文件

#compose文件的版本号
version: "2"
#服务名称
services:
  web:
    #镜像启动容器
    images: nginx
      #映射端口
      ports:
        - "8080:80"
      #目录映射
      volumes:
        - /usr/local/abc:/usr/local/cba
#volumes:指定数据卷的名称

#networks: 指定应用的网络,下面可以定义应用的名字,使用的网络类型等

2. Docker Compose常用模板文件主要命令:

指令 功能
build 指定服务镜像Dockerfile所在路径
cap_add,cap_drop 指定容器的内核能力(capacity)分配
command 覆盖容器启动后默认执行的命令
cgroup_parent 指定父cgroup组,意味着将基础该组的资源限制
container_name 指定容器名称,默认将会使用项目名称,服务名称,序号
devices 指定设置映射关系
dns 自定义DNS服务器
dns_search 配置DNS搜索域
dockerfile 指定额外编译镜像的Dockerfile文件
env_file 从文件中获取环境变量
environment 设置环境变量
expose 暴露端口
external_links 链接到docker-compose.yml外部的容器,甚至可以是非Compose管理的外部容器
extra_hosts 指定额外的host名称映射信息
image 指定为镜像名称或镜像ID.如果镜像在本地不存在,Compose将尝试拉取这个镜像
labels 指定服务镜像Dockerfile所在路径
links 链接到其他服务中的容器
log_driver 指定日志驱动类型,类似于Docker中的-log-driver参数.目前支持三种日志驱动类型:log_driver:“json-file” log_driver:“syslog” log_driver:“none”
log_opt 日志驱动的相关参数
net 设置网络模式.参数类似于docker client的-net参数一样
pid 跟主机系统共享进程命名空间.打开该选项的容器之间,以及容器和宿主机系统之间可以通过进程ID来相互访问和操作
ports 暴露端口信息
sercurity_opt 指定容器模板标签(label)机制的默认属性(如用户 角色 类型 级别等)
ulimits 指定容器的ulimits限制值
volumes 数据卷所挂载路径设置.可以设置宿主机路径(HOST:CONRAINER)或者加上访问模式(HOST:CONTAINER:ro.)

五.Docker-Compose应用
通过配置docker-compose模板文件(docker-compose.yml),在此配置文件中配置各个容器及其相关的依赖,实现一次启动多个容器.

  • 步骤 :
  1. 编写容器
  2. 编写模板文件
  3. 创建并启动docker-compose项目(模板文件所在的目录,docker-compose.yml)
  • 代码实现 :
#查看镜像文件
[root@muxin ~]# docker images
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
docker.io/rancher/server            latest              85b3b338d0be        17 months ago       1.084 GB
docker.io/centos/mysql-57-centos7   latest              26d536c931ea        17 months ago       445.9 MB
docker.io/mongo                     latest              f93ff881751f        17 months ago       367.6 MB
docker.io/rabbitmq                  management          c51d1c73d028        17 months ago       148.7 MB
docker.io/elasticsearch             5.6.8               6c0bdf761f3b        19 months ago       569.8 MB
docker.io/registry                  latest              d1fd7d86a825        21 months ago       33.26 MB
docker.io/tomcat                    7-jre7              e1ac7618b15d        2 years ago         454.3 MB
docker.io/redis                     latest              1fb7b6c8c0d0        2 years ago         106.6 MB
docker.io/nginx                     latest              1e5ab59102ce        2 years ago         108.3 MB
docker.io/centos                    7                   196e0ce0c9fb        2 years ago         196.6 MB
docker.io/mobz/elasticsearch-head   5                   b19a5c98e43b        2 years ago         823.9 MB

#redis容器 redis镜像为redis latest(最新版) 
#参数1: -p : 端口映射
[root@muxin mycompose]# docker run -id --name=redis1 -p 6379:6379 redis
a477be6b21ae9d580567c9d1469f20750b4e9ffa12adda78a0e7e2523f9a6125

#mysql mysql镜像为centos/mysql-57-centos7
#参数2: -e : 环境变量 设置mysql登录密码为'root'
[root@muxin ~]# docker run -id --name=mysql1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7
0c2b191b5a0a655e0c37db41dae706496119b49361f9866570599ade03c30302

#Tomcat Tomcat镜像为tomcat , 版本号为:7-jre7 不写默认拉取最新版
#参数3: -v : 路径映射 宿主机中的webapps和VM中的webapps映射	
[root@muxin ~]# docker run -id --name=tomcat1 -p 8080:8080 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
4d8914c86060dd6d3f3a927355f90063a72ee98f046e9860b515f4a1e1145e78


#编写模板文件:
#  创建文件夹
[root@muxin ~]# mkdir /usr/local/mycompose
#  进入文件夹
[root@muxin ~]# cd /usr/local/mycompose/
#  创建docker-compose.yml文件,文件内容如下:
[root@muxin mycompose]# vi docker-compose.yml

version: '3'
services:
  redis1:
    image: redis
    ports:
      - "6379:6379"
    container_name: "redis1"
    networks:
      - dev
  mysql1:
    image: centos/mysql-57-centos7
    environment:
      MYSQL_ROOT_PASSWORD: "root"
    ports:
      - "3306:3306"
    container_name: "mysql1"
    networks:
      - dev
  web1:
    image: tomcat:7-jre7
    ports:
      - "8080:8080"
    container_name: "tomcat1"
    networks:
      - dev
      - pro
networks:
  dev:
    driver: bridge
  pro:
    driver: bridge

#  重启docker,保证端口唯一
[root@muxin mycompose]# systemctl restart docker
#  docker-compose后台启动
[root@muxin mycompose]# docker-compose up -d
#注意docker-compose和docker的版本问题

猜你喜欢

转载自blog.csdn.net/qq_43190579/article/details/102759459