Docker学习笔记(五):docker-compose

docker-compose是什么东西?
docker-compose是用来定义(配置)和运行多个镜像。通过Dockerfile与docker-compose.yaml组合多个镜像运行在一个容器中。使用docker-compose可以为多个项目启动多个容器,并且容器的各种配置一目了然,不至于混淆。其次,使用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
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
 指定启动的镜像
Docker学习笔记(五):docker-compose_第1张图片
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

Docker学习笔记(五):docker-compose_第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
 用于指定加入的网络。可不配置,使用默认网桥。

你可能感兴趣的:(DOCKER)