docker-compose 管理docker 容器
1.1 docker-compose 的用处
Docker-compose 的作用
- 配置镜像运行的大量参数 比如 -d -p等,可以通过docker-compose配置这些参数,相对与记住这些参数更方便
- docker-compose可以帮助我们更好的管理docker容器,只需要使用docker-compose.yml去维护
1.2 下载安装docker-compose
-
登录github,搜索docker-compose,筛选条件中选择 most star
-
选择 star 最多的那个 docker/compose 项目
-
点进去,选择右侧的 releases 点击进去选择版本
-
我们选择使用1.24.1版本,在版本中的tag下,可以找到历史的版本
-
点进去之后,由于我们是要部署在linux环境下,所以选择下载 docker-compose-Linux-x86_64 这个版本
-
下载完成后,传送到服务器上,开始执行安装
1.3 设置权限
-
由于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