前言
使用Docker compose,我们可以获得 Docker 的所有好处,甚至更多(最起码单机多实例,我们可以使用同一个端口,这样便于我们管理实例)。Docker通过创建一个虚拟环境(或容器)来运行代码。Docker Compose添加的是多个容器的编排和组织。虽然本教程只会为MySQL实例创建一个容器,但是当您的项目开始增长时,Docker Compose也可以同时运行您所有的各种服务。
我们这次使用ubuntu来做个实验 。
安装docker
sudo apt-get update 安装依赖包 sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common curl -fsSL | sudo apt-key add - sudo apt-key fingerprint 0EBFCD88
如下输出:
pub 4096R/0EBFCD88 2017-02-22Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88uid Docker Release (CE deb) <docker@docker.com>sub 4096R/F273FCD8 2017-02-22
安装
sudo apt-get update && sudo apt-get install docker-ce
下载docker compose
sudo curl -L " -s)-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose
查看版本
docker-compose version 1.22.0, build 1719ceb
确认完成后,我们创建一个叫做docker-compose.yml的文件。然后编写如下内容:
version: '3.3'services: db: image: mysql:5.7 restart : always environment: MYSQL_DATABASE: 'db' # So you don't have to use root, but you can if you like MYSQL_USER: 'user' # You can use whatever password you like MYSQL_PASSWORD: 'password' # Password for root access MYSQL_ROOT_PASSWORD: 'password' ports: # <Port exposed> : < MySQL Port running inside container> - '3306:3306' expose: # Opens port 3306 on the container - '3306' # Where our data will be persisted volumes: - my-db:/ var /lib/mysql # Names our volume volumes: my-db:
保存文件,我们在compose.yml相同目录下,运行docker-compose up。可能时间比较慢,因为需要pull容器。完成后,我们可以看到端口3306启动了。
OK,一个mysql实例就启动了。如果我们想定义其他的值,只需要修改docker-compose.yml就可以了。
我们也可以使用几行配置来在docker中运行 postgresql
下面是最简单的配置文件
version: '3.3'services: db: image: postgres restart: always environment: POSTGRES_PASSWORD: password
我们可以看到docker compose 提供了一个灵活的和可配置的数据库运行环境。
清理
清理容器很简单,只需要运行如下命令
docker-compose down docker system prune -a docker volume prune
使用Docker composition,我们可以在安全、隔离的环境中运行一个容器化数据库,同时仍然能够立即更改数据库的类型。除此之外,在大型项目中,我们可以充分利用Docker一次组合和编排所有不同的服务。正如您所看到的,我们只需要复制/粘贴一个 YAML 文件并运行docker- up,以便拥有一个完全可操作的开发数据库。
当然,简单的运行一个mysql服务是容易的。但是,如果要运行到生产环境还需要大量的有针对的测试。我在项目中就遇到过mysql 总是omm的情况。但是在 物理机 环境就没有,然后我调优了大量的参数,才解决了这个问题。