Compose
支持 Linux、macOS、Windows 10 三大平台。
Compose
可以通过 Python 的包管理工具 pip
进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在 Docker 容器中运行。
前两种方式是传统方式,适合本地环境下安装使用;最后一种方式则不破坏系统环境,更适合云计算场景。
Docker for Mac
、Docker for Windows
自带 docker-compose
二进制文件,安装 Docker 之后可以直接使用。
一、Linux 系统两种安装方式
1、二进制包安装
在 Linux 上的也安装十分简单,从 官方 GitHub Release 处直接下载编译好的二进制文件即可。
例如,在 Linux 64 位系统上直接下载对应的二进制包。
# 下载安装
$ sudo curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
安装一个不同版本的Docker Compose替换
1.24.1
就行。
2、PIP 安装
注: x86_64
架构的 Linux 建议按照上边的方法下载二进制包进行安装,如果您计算机的架构是 ARM
(例如,树莓派),再使用 pip
安装。
这种方式是将 Compose 当作一个 Python 应用来从 pip 源中安装。
执行安装命令:
$ sudo pip install -U docker-compose
可以看到类似如下输出,说明安装成功。
Collecting docker-compose
Downloading docker-compose-1.24.1.tar.gz (149kB): 149kB downloaded
...
Successfully installed docker-compose cached-property requests texttable websocket-client docker-py dockerpty six enum34 backports.ssl-match-hostname ipaddress
二、bash 补全命令
$ curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
三、容器中执行
Compose 既然是一个 Python 应用,自然也可以直接用容器来执行它。
$ sudo chmod +x /usr/local/bin/docker-compose
实际上,查看下载的 run.sh
脚本内容,如下
set -e
VERSION="1.8.0"
IMAGE="docker/compose:$VERSION"
# Setup options for connecting to docker host
if [ -z "$DOCKER_HOST" ]; then
DOCKER_HOST="/var/run/docker.sock"
fi
if [ -S "$DOCKER_HOST" ]; then
DOCKER_ADDR="-v $DOCKER_HOST:$DOCKER_HOST -e DOCKER_HOST"
else
DOCKER_ADDR="-e DOCKER_HOST -e DOCKER_TLS_VERIFY -e DOCKER_CERT_PATH"
fi
# Setup volume mounts for compose config and context
if [ "$(pwd)" != '/' ]; then
VOLUMES="-v $(pwd):$(pwd)"
fi
if [ -n "$COMPOSE_FILE" ]; then
compose_dir=$(dirname $COMPOSE_FILE)
fi
# TODO: also check --file argument
if [ -n "$compose_dir" ]; then
VOLUMES="$VOLUMES -v $compose_dir:$compose_dir"
fi
if [ -n "$HOME" ]; then
VOLUMES="$VOLUMES -v $HOME:$HOME -v $HOME:/root" # mount $HOME in /root to share docker.config
fi
# Only allocate tty if we detect one
if [ -t 1 ]; then
DOCKER_RUN_OPTIONS="-t"
fi
if [ -t 0 ]; then
DOCKER_RUN_OPTIONS="$DOCKER_RUN_OPTIONS -i"
fi
exec docker run --rm $DOCKER_RUN_OPTIONS $DOCKER_ADDR $COMPOSE_OPTIONS $VOLUMES -w "$(pwd)" $IMAGE "$@"
可以看到,它其实是下载了 docker/compose
镜像并运行。
四、测试
$ docker-compose --version
五、卸载
如果是二进制包方式安装的,删除二进制文件即可。
$ sudo rm /usr/local/bin/docker-compose
如果是通过 pip
安装的,则执行如下命令即可删除。
$ sudo pip uninstall docker-compose
六、实战MySQL
docker-compose语法只能在有docker-compose.yml配置文件的文件夹内运行
1、创建MySQL安装路径
docker应用建议安装路径:/usr/local/docker/mysql
# /usr/local 本地管理员软件安装目录
$ cd /usr/local/
# 创建docker应用目录
$ mkdir docker
$ cd docker/
$ pwd
/usr/local/docker
$ mkdir mysql
$ cd mysql/
# 编写docker-compose.yml配置[配置文件名称固定不变]
$ vi docker-compose.yml
2、编写docker-compose.yml配置文件
MySQL5
version: '3.1'
services:
mysql:
# 开机启动
restart: always
# 镜像版本号
image: mysql:5.7.22
# 容器重命名
container_name: mysql
# 端口映射
ports:
- 3306:3306
environment:
# 指定时区的时间:上海
TZ: Asia/Shanghai
# 设置root用户密码
MYSQL_ROOT_PASSWORD: 123456
# 配置数据库默认参数
command:
# 默认密码
--default-authentication-plugin=mysql_native_password
# 字符编码
--character-set-server=utf8mb4
# 排序字符集
--collation-server=utf8mb4_general_ci
# SQL模式,详细参考:https://blog.csdn.net/Zereao/article/details/89178438
--explicit_defaults_for_timestamp=true
# 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
--lower_case_table_names=1
# 设置以字节发送给服务器的最大数据包大小. (默认: 1MB)
--max_allowed_packet=128M
# 支持的sql语法
--sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
# 配置数据存放路径
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
MySQL8
version: '3.1'
services:
db:
image: mysql
restart: always
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- 3306:3306
volumes:
- ./data:/var/lib/mysql
# 可视化Mysql数据库管理文件系统
adminer:
image: adminer
restart: always
ports:
- 8080:8080
3、创建启动MySQL容器
# 创建启动MySQL容器
$ docker-compose up
# 守护进程创建启动MySQL容器
$ docker-compose up -d
# 查看运行中的容器
$ docker ps
# 查看已下载的镜像
$ docker images
4、查控MySQL容器日志
# 查看MySQL容器日志
$ docker-compose logs mysql
# 监听查看MySQL容器日志
$ docker-compose logs -100f mysql
5、停止MySQL容器
# 停止MySQL容器
$ docker-compose stop
6、启动MySQL容器
# 不会加载新的docker-compose相关文件的新的改动
$ docker-compose restart
7、删除MySQL容器
# 删除MySQL容器
$ docker-compose down
8、进入MySQL容器
# 进入容器,使用容器ID或名称都进入容器
$ docker exec -it mysql /bin/bash
# 登陆mysql数据库
$ mysql -uroot -p123456
# 创建数据库用户
mysql> CREATE USER 'tangsm'@'%' IDENTIFIED BY '123456';
# 给用户授予所有权限
mysql> GRANT All privileges ON *.* TO 'tangsm'@'%';
# 显示mysql所有数据库
mysql> show database;
# 切换数据库
mysql> use mysql;
# 查询表数据
mysql> SELECT t.user, t.select_priv FROM USER t;
+------------------+-------------+
| user | select_priv |
+------------------+-------------+
| root | Y |
| tangsm | Y |
| mysql.infoschema | Y |
| mysql.session | N |
| mysql.sys | N |
| root | Y |
+------------------+-------------+
6 rows in set (0.00 sec)
# 退出数据库
mysql> exit;
# 退出容器
$ exit;
七、参考
李卫民-Docker Compose:https://www.funtl.com/zh/docker-compose/