docker-compose是什么东西?
docker-compose是用来定义(配置)和运行多个镜像。通过Dockerfile与docker-compose.yaml组合多个镜像运行在一个容器中。使用docker-compose可以为多个项目启动多个容器,并且容器的各种配置一目了然,不至于混淆。其次,使用docker-compose可以将宿主机的目录更加方便的挂载到容器中,更新配置重启容器时不至于数据丢失。
#1.下载docker-compose二进制文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#给下载的文件赋予可执行权限
sudo chmod +x /usr/local/bin/docker-compose
#查看是否安装完成,输出版本号就表示成功安装
docker-compose --version
#卸载
sudo rm /usr/local/bin/docker-compose
注意:如果通过docker-compose(sudo docker-compose up -d 命令)启动时发生如下错误:
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?
If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
或
sudo: docker-compose: command not found
#解决方法
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
.yml和.yaml的配置文件都可以被正常使用。
.env文件是默认的环境变量文件,在.yml的配置文件可以直接使用。如果.env文件没有配置,那么在.yml文件中会获取一个空值。
注意:yaml文件中布尔值需要使用引号引起来
镜像的compose配置可以在docker hub中搜索并找到,如果使用docker-compose启动mysql镜像,command设置必须使用。否则environment下重置的密码不能使用。==
下面是mysql的配置:
#yaml解析版本
version: '3.1'
services:
#声明服务名称
db:
container_name: mycontainer
#指定镜像
image: mysql
restart: always
#指定容器启动时执行的命令
command:
--default-authentication-plugin=mysql_native_password
#端口号映射
ports:
- 3306:3306
#把数据挂载到容器外存储,挂载路径可从dockerhub中查找镜像的详细说明。
#宿主机路径:容器内路径
volumes:
- /var/mysql:/var/lib/mysql
#设置必要环境变量
environment:
#通过.env文件配置变量内容
#配置root用户的默认密码
MYSQL_ROOT_PASSWORD: test1234
#配置文件中设置变量内容
#配置启动时创建的数据库名称
MYSQL_DATABASE: mydb
1.image
指定启动的镜像
2.build
指定Dockerfile文件路径,通过Dockerfile文件来构建基础镜像。指定的位置是Dockerfile所在的目录路径,可以是绝对路径也可以是相对路径。
3.args
在build参数中使用,用于定义临时变量,启动成功后取消。允许空值。
定义方式:
build:
context: .
args:
- param1=2
- param2=3
#或者写成这样
build:
context: .
args:
param1: 2
param2: 3
4.command
用于覆盖容器启动后默认执行的命令。
5.container_name
指定启动后的容器名称。
6.ports
用于映射端口号。主机端口号:容器端口号。当只指定容器端口号时,宿主机会随机映射端口号。
7.links
用于解决容器间数据交互问题。
#镜像名为services下,指定的服务名称
links:
- 镜像名1
- 镜像名2
8.volumes
挂载目录。使容器内的数据保存到宿主机的目录下,防止容器被删除后,数据丢失。
volumes中还可以使用命名的数据卷来挂载
volumes:
#仅指定一个路径。容器内部创建该路径
- /var/test
#使用绝对路径挂载数据卷,还可以使用相对路径。宿主机:容器内
- /var/test:/vart/test
9.environment
同样是用于设置环境变量。args仅用于构建过程中。environment中设置的变量会一直存在于容器中。两种申明方式:
environment:
PARAM1: 1
PARAM2: 2
PARAM3:
#或者
environment:
- PARAM1=1
- PARAM2=2
- PARAM3
10.10. external_links
用于配置外部容器。并与外部容器进行通信。需要在同一个网络里。
11.networks
用于指定加入的网络。可不配置,使用默认网桥。