docker学习04 - 使用docker-compose 管理 docker

docker-compose 管理docker 容器

1.1 docker-compose 的用处

Docker-compose 的作用

  1. 配置镜像运行的大量参数 比如 -d -p等,可以通过docker-compose配置这些参数,相对与记住这些参数更方便
  2. docker-compose可以帮助我们更好的管理docker容器,只需要使用docker-compose.yml去维护
1.2 下载安装docker-compose
  1. 登录github,搜索docker-compose,筛选条件中选择 most star

  2. 选择 star 最多的那个 docker/compose 项目

  3. 点进去,选择右侧的 releases 点击进去选择版本

  4. 我们选择使用1.24.1版本,在版本中的tag下,可以找到历史的版本

  5. 点进去之后,由于我们是要部署在linux环境下,所以选择下载 docker-compose-Linux-x86_64 这个版本

  6. 下载完成后,传送到服务器上,开始执行安装

1.3 设置权限
  1. 由于linx的限制,下载的文件并不是一个可执行文件,需要通过chmod命令给真个安装包设置安装权限

    # 首先给文件改革名
    [root@centOS download]# ll
    总用量 1305472
    -rw-r--r--. 1 root root  16168192 8月  29 08:28 docker-compose-Linux-x86_64
    [root@centOS download]# mv docker-compose-Linux-x86_64 docker-compose
    [root@centOS download]# ll
    总用量 1305472
    -rw-r--r--. 1 root root  16168192 8月  29 08:28 docker-compose
    
    # 给文件设置执行命令
    [root@centOS download]# chmod 777 docker-compose
    [root@centOS download]# ll
    总用量 1305472
    -rwxrwxrwx. 1 root root  16168192 8月  29 08:28 docker-compose
    
    # 复制文件到指定目录下
    [root@centOS compose01]# cp docker-compose /usr/local/bin/
    
1.4 配置环境变量
# 为了方便后期的操作,我们给compose文件配置一个环境变量
# 获取当前可执行文件所在目录
[root@centOS compose01]# pwd
/usr/local/bin/
# 在etc/profile文件中的java 环境变量后面添加该目录
[root@centOS compose01]# vim /etc/profile
# 在最下面看是否有配置 export PATH ,如果有,直接在后面追加compose 所在路径,如果没有,创建一个
export PATH=$/usr/local/bin:$PATH

# 加载配置文件
[root@centOS compose01]# source /etc/profile

# 这样,我们就可以在任何位置使用 compose 命令了

# 测试是否安装成功 出现下面就说明安装成功了

1.5 测试
# 测试在任意目录下输入 docker-compose 是否可以执行 输入的命令就是 放到 /usr/local/bin/ 下的docker-compose 文件的文件名,所以前面需要改名了

[root@centOS /]# docker-compose
Define and run multi-container applications with Docker.

Usage:
  docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
  docker-compose -h|--help
...
1.6 应用
1.6.1 编写docker-compose.yml文件指定配置信息
# yml 文件是一key:value的方式来指定配置信息的
# 多个配置信息已换行 + 缩进的方式来区分,另外需要注意的是在docker-compose.yml文件中不要使用制表符

version: '3.1'
services:
  mysql:           # 服务的名称 镜像的名称
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    image: daocloud.io/library/mysql:5.7.4  # 指定镜像路径
    container_name: mysql  # 指定容器名称
    ports:
      - 3306:3306   #  指定端口号的映射 
    # - 3307:3306   #  如果是多个,可以在后面换行追加 
    environment:		#  配置一些环境的参数
      MYSQL_ROOT_PASSWORD: root   # 指定MySQL的ROOT用户登录密码
      TZ: Asia/Shanghai        # 指定时区
    volumes:        # 配置数据卷
     - /usr/local/mysql/mysql_docker02/mysql_data:/var/lib/mysql   # 映射数据卷
  tomcat_001:  # 配置tomcat
    restart: always
    image: daocloud.io/library/tomcat:8.5.15-jre8
    container_name: tomcat
    ports:
      - 8080:8080
    environment:
      TZ: Asia/Shanghai
    volumes: # 配置容器里面的路径的时候要从镜像的来源确认一下,因为有的镜像是用户自己改了的,可能地址不同
      - /usr/local/tomcat/tomcat_docker_01/webapps:/usr/local/tomcat/webapps
      - /usr/local/tomcat/tomcat_docker_01/logs:/usr/local/tomcat/logs


1.6.2 运行doker-compose.yml文件
# 在使用docker-compose命令的时候,会默认在docker-compose.yml文件所在目录下找docker-compose.yml文件,如果没有,这个命令是不生效的。

# 运行 docker-compose.yml 的命令是  
docker-compose up -d 

# -d 的意思是后台运行

[root@centOS compose01]# docker-compose up -d
ERROR: yaml.scanner.ScannerError: while scanning for the next token
found character '\t' that cannot start any token
  in "./docker-compose.yml", line 10, column 17
# 执行的时候报错,第10行有误,使用vi命令修改后重试 

[root@centOS compose01]# vi docker-compose.yml

# 再次执行
[root@centOS compose01]# docker-compose up -d  
Creating network "compose01_default" with the default driver
Creating tomcat ... done
Creating mysql  ... done
[root@centOS compose01]# docker ps
CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS              PORTS                    NAMES
f1e58c172fb7        daocloud.io/library/mysql:5.7.4          "/entrypoint.sh mysq…"   2 minutes ago       Up 2 minutes        0.0.0.0:3306->3306/tcp   mysql
95a7020807c6        daocloud.io/library/tomcat:8.5.15-jre8   "catalina.sh run"        2 minutes ago       Up 2 minutes        0.0.0.0:8080->8080/tcp   tomcat
1.6.3 关闭并删除容器
[root@centOS compose01]# docker-compose down
Stopping mysql  ... done
Stopping tomcat ... done
Removing mysql  ... done
Removing tomcat ... done
Removing network compose01_default
1.6.4 开启/关闭/重启/已经存在的docker-compose维护的容器
1.6.4.1 关闭
[root@centOS compose01]# docker-compose stop
Stopping mysql  ... done
Stopping tomcat ... done
1.6.4.2 开启
[root@centOS compose01]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@centOS compose01]# docker-compose start
Starting mysql      ... done
Starting tomcat_001 ... done
[root@centOS compose01]# docker ps
CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS              PORTS                    NAMES
f1e58c172fb7        daocloud.io/library/mysql:5.7.4          "/entrypoint.sh mysq…"   14 minutes ago      Up 6 seconds        0.0.0.0:3306->3306/tcp   mysql
95a7020807c6        daocloud.io/library/tomcat:8.5.15-jre8   "catalina.sh run"        14 minutes ago      Up 6 seconds        0.0.0.0:8080->8080/tcp   tomcat
1.6.4.3 重启
[root@centOS compose01]# docker-compose restart
Restarting mysql  ... done
Restarting tomcat ... done
[root@centOS compose01]# docker ps
CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS              PORTS                    NAMES
f1e58c172fb7        daocloud.io/library/mysql:5.7.4          "/entrypoint.sh mysq…"   15 minutes ago      Up 6 seconds        0.0.0.0:3306->3306/tcp   mysql
95a7020807c6        daocloud.io/library/tomcat:8.5.15-jre8   "catalina.sh run"        15 minutes ago      Up 8 seconds        0.0.0.0:8080->8080/tcp   tomcat
[root@centOS compose01]#
1.6.5 查看docker-compose管理的容器
[root@centOS compose01]# docker-compose ps
 Name               Command               State           Ports
------------------------------------------------------------------------
mysql    /entrypoint.sh mysqld --da ...   Up      0.0.0.0:3306->3306/tcp
tomcat   catalina.sh run                  Up      0.0.0.0:8080->8080/tcp
1.6.6 查看日志
# 如果想要查看所有的容器的日志,直接下面这个, -f 后面不用添加参数
[root@centOS compose01]# docker-compose logs -f
Attaching to mysql, tomcat

# 如果先要看置顶某个容器的日志,需要在 -f 后面添加对应容器名
# 查看 mysql
[root@centOS compose01]# docker-compose logs -f mysql
Attaching to mysql
mysql         | Installing MySQL system tables...OK
mysql         |
mysql         | Filling help tables...OK
...

# 查看 tomcat
[root@centOS compose01]# docker-compose logs -f tomcat_001
Attaching to tomcat
tomcat        | 29-Aug-2020 09:48:49.126 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.15
tomcat        | 29-Aug-2020 09:48:

1.6.7 Docker-compose配合Dockerfile文件使用

虽然我们可以使用docker-compose.yml文件简化docker的使用,但是我们还是感觉有点繁琐,有没有更简单的方式使用 ?

答案是有的:

可以使用docker-compose配合 dockerfile文件一起使用,dockerfile创建镜像,docker-compose管理容器

1.6.7.1 创建docker-compose.yml文件
# yml文件
version: '3.1'
services:
  mytomcat002:
    restart: always
    build:            # 构建自定义镜像
      context: ../      # 指定dockerfile文件的所在路径,因为dockerfile文件在这个yml文件上一级,所以需要 ../ 
      dockerfile: Dockerfile   # 指定Dockerfile文件名称
    image: mytomcat002:1.0.1
    container_name: mytomcat002
    ports:
      - 8081:8080
    environment:
      TZ: Asia/Shanghai

文件所在目录

compose02
|
compose_file  Dockerfile  index.html
						|
						docker-compose.yml
1.6.7.2 创建dockerfile文件
from daocloud.io/library/tomcat:8.5.15-jre8
copy index.html /usr/local/tomcat/webapps
1.6.7.3 运行
1.6.7.4 运行 docker-compose
# 使用这个命令,如果自定义镜像不存在,则构建,如果已经存在,则运行
docker-compose up -d

# 例子
[root@centOS compose_file]# docker-compose up -d
Creating mytomcat002 ... done

[root@centOS compose_file]# docker ps
CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS              PORTS                    NAMES
36a4fe8f2c19        mytomcat002:1.0.1                        "catalina.sh run"        46 seconds ago      Up 45 seconds       0.0.0.0:8081->8080/tcp   mytomcat002
1.6.7.5 重新构建docker自定义镜像
# 如果我们需要重新构建镜像
docker-compose build

[root@centOS compose_file]# docker-compose build
Building mytomcat002
Step 1/2 : from daocloud.io/library/tomcat:8.5.15-jre8
 ---> b8dfe9ade316
Step 2/2 : copy index.html /usr/local/tomcat/webapps
 ---> Using cache
 ---> 4c0a6cab7d03
Successfully built 4c0a6cab7d03
Successfully tagged mytomcat002:1.0.1
[root@centOS compose_file]#
1.6.7.6 运行前重新构建
docker-compose up -d --build

# 例子
[root@centOS compose_file]# docker-compose up -d --build
Creating network "compose_file_default" with the default driver
Building mytomcat002
Step 1/2 : from daocloud.io/library/tomcat:8.5.15-jre8
 ---> b8dfe9ade316
Step 2/2 : copy index.html /usr/local/tomcat/webapps
 ---> Using cache
 ---> 4c0a6cab7d03
Successfully built 4c0a6cab7d03
Successfully tagged mytomcat002:1.0.1
Creating mytomcat002 ... done

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值