docker学习笔记(6):docker-compose介绍安装与实践

引言

在上一篇docker笔记中,已经成功构建了一个简单的LNMP环境以及启动维护,但我们发现,这样的构建方式是比较麻烦的,那如果还有数据库mysql、redis、mongodb等本地化服务,怎么加入进行并指定相应路径,这就是本篇需要探讨的docker-compose。

docker-compose安装

docker-compose的安装可以用原始安装方式或者是pip安装,不论哪种安装,都是几句命令,和下图类似,而由于我之前装过mysql,所以对于docker-compose中需要的mysqld相关的依赖都有,安装速度更快了很多。
docker学习笔记(6):docker-compose介绍安装与实践_第1张图片
在安装完docker-compose后,我们想通过docker-compose ps看是否安装成功,然后发现提示有错误:

pip AttributeError: ‘module’ object has no attribute 'SSL_ST_INIT’

出现这种原因是因为服务器的pyopenssl版本太低了,缺少很多的东西,而我这里用的阿里云的Ubuntu 16.04,因为阿里云一般都会预装python2.7,我也没有装3以上的版本了,所以需要输入如下命令去卸载并安装pyopenssl:

rm -rf /usr/lib/python2.7/dist-packages/OpenSSL
rm -rf /usr/lib/python2.7/dist-packages/pyOpenSSL-0.15.1.egg-info
pip install pyopenssl

即此,我们便可以用docker-compose看到相关的所有命令。

然后关于第二种安装方式要比第一种安装方式慢很多,即我们去镜像源站拉取的方式来完成docker-compose的使用,命令如下:

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

速度较慢,但都可以得到下面输入docker-compose提示全部基础命令参数的可视化。

docker-compose介绍

在之前几篇文章中,我都很少有提docker到底是一种什么样的技术,它和虚拟机到底有什么样的不同?其实从compose或者任何一个简单的镜像维护便能找到答案。

docker主打的是版本更新迅速,本地化部署方便,我们可以使用一台虚拟机或者云服务器预装好所有的环境,但如果中途里面有某个环节出现更新或者重大问题我们便不得不回炉重造,而docker便少了这个隐患。可能有人会说,我虚拟机开机就能使用,而docker还需要各种不同的容器启动,比如DNMP(Docker+nginx+MySQL+PHP),那么我最少也要docker run三个容器,然而docker-compose可以解决我们本地化部署的问题。

Compose 是一个用户定义和运行多个容器的 Docker 应用程序。在 Compose 中你可以使用 YAML 文件来配置你的应用服务。然后,只需要一个简单的命令,就可以创建并启动你配置的所有服务。

使用 Compose 基本会有如下三步流程:

  1. 在 Dockfile 中定义你的应用环境,使其可以在任何地方复制。
  2. 在 docker-compose.yml 中定义组成应用程序的服务,以便它们可以在隔离- 的环境中一起运行。
  3. 最后,运行dcoker-compose up,Compose 将启动并运行整个应用程序。

查看docker-compose的用法:

$ docker-compose

Define and run multi-container applications with Docker.

Usage:
  docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
  docker-compose -h|--help

Options:
  -f, --file FILE             Specify an alternate compose file (default: docker-compose.yml)
  -p, --project-name NAME     Specify an alternate project name (default: directory name)
  --verbose                   Show more output
  -v, --version               Print version and exit
  -H, --host HOST             Daemon socket to connect to

  --tls                       Use TLS; implied by --tlsverify
  --tlscacert CA_PATH         Trust certs signed only by this CA
  --tlscert CLIENT_CERT_PATH  Path to TLS certificate file
  --tlskey TLS_KEY_PATH       Path to TLS key file
  --tlsverify                 Use TLS and verify the remote
  --skip-hostname-check       Don't check the daemon's hostname against the name specified
                              in the client certificate (for example if your docker host
                              is an IP address)

Commands:
  build              Build or rebuild services
  bundle             Generate a Docker bundle from the Compose file
  config             Validate and view the compose file
  create             Create services
  down               Stop and remove containers, networks, images, and volumes
  events             Receive real time events from containers
  exec               Execute a command in a running container
  help               Get help on a command
  kill               Kill containers
  logs               View output from containers
  pause              Pause services
  port               Print the public port for a port binding
  ps                 List containers
  pull               Pulls service images
  push               Push service images
  restart            Restart services
  rm                 Remove stopped containers
  run                Run a one-off command
  scale              Set number of containers for a service
  start              Start services
  stop               Stop services
  unpause            Unpause services
  up                 Create and start containers
  version            Show the Docker-Compose version information

另外上一篇我是已经做好了mysql镜像,nginx和PHP的话我直接拉

docker-compose的简单实践

拿上一篇我们已经做好的docker镜像为例,我们可以写一个docker-

我们还是以上一篇中的docker + nginx + php + mysql为例,我们将上述三个容器全部打包到阿里云,然后撰写docker-compose.yml文件:
在这里插入图片描述
然后我们可以到阿里云的镜像中查看是否创建成功:
docker学习笔记(6):docker-compose介绍安装与实践_第2张图片

然后将他们所有的配置文件写在一起做成yml文件,docker-compose.yml为:

version: '3'
services:
 nginx:
  # 依赖php服务,意味着在启动nginx之前先启动php
  depends_on:
   - php
  # nginx镜像的路径
  image: registry.cn-shenzhen.aliyuncs.com/submarineas/test_1:1.0-nginx
  # 容器的/home/docker/nginx目录挂载主机中的/home/docker/nginx目录,
  # 这样使nginx容器把网站文件和目录存放到主机目录中,持久化和方便管理
  volumes:
   - /home/docker/nginx:/home/docker/nginx
  # nginx意外退出时自动重启
  restart: always
  
  # 映射80和443端口
  ports:
   - "80:80"
   - "443:443"
  
  # 容器名称
  container_name: nginx 
 php:
  depends_on:
   - mysql
  image: registry.cn-shenzhen.aliyuncs.com/submarineas/test_1:1.0-php
  restart: always
  volumes:
   - /home/docker/nginx/www:/home/docker/nginx/www
   - /home/docker/php:/home/docker/php
  container_name: php 
  
 mysql:
  image: registry.cn-shenzhen.aliyuncs.com/submarineas/test_1:1.0-mysql
  volumes:
   - /home/docker/mysql:/home/docker/mysql
  restart: always
  # 设置MYSQL_ROOT_PASSWORD环境变量,这里是设置mysql的root密码。这里为root。
  environment:
   MYSQL_ROOT_PASSWORD: root
  container_name: mysql

你可能感兴趣的:(Linux,虚拟化)