Docker-Docker Compose的安装与使用
Docker Compose是什么
- Docker Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后使用一个命令,就可以从配置中创建并启动所有服务。
- 简单说就是,为虚拟化容器实现批处理提供了一种实现方式
- 使用Compose基本上是三步
- 编辑
Dockerfile
定义应用环境,以便可以在任何地方复制它 - 定义组成应用程序的服务,
docker-compose.yml
用于描述容器与容器之间的运行环境 - 执行
docker-compose up
,启动您的整个应用程序(你所描述的)
- 编辑
docker-compose.yml
看起来是version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redis volumes: logvolume01: {}
- 注意yaml的语法规则
- Docker Compose具有管理整个应用程序声明周期的命令
- 启动,停止和重建服务
- 查看正在运行的服务的状态
- 流运行服务的日志输出
- 对服务运行一次性命令
Docker Compose的安装
- 前置条件
- 已安装Docker Engine
- 下载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
Docker Compose的卸载
- 使用curl安装的docker compose的卸载
sudo rm /usr/local/bin/docker-compose
- 使用pip安装的docker compose的卸载
pip uninstall docker-compose
Compose File与Docker版本上的关系
Compose file format | Docker Engine release |
---|---|
3.7 | 18.06.0+ |
3.6 | 18.02.0+ |
3.5 | 17.12.0+ |
3.4 | 17.09.0+ |
3.3 | 17.06.0+ |
3.2 | 17.04.0+ |
3.1 | 1.13.1+ |
3.0 | 1.13.0+ |
2.4 | 17.12.0+ |
2.3 | 17.06.0+ |
2.2 | 1.13.0+ |
2.1 | 1.12.0+ |
2.0 | 1.10.0+ |
1.0 | 1.9.1.+ |
Docker Compose常用命令
命令 | 描述 | 命令 | 描述 |
---|---|---|---|
build Usage: build [options] [–build-arg key=val…] [SERVICE…] --no-cache 不使用缓存构建镜像 | 重新构建服务 | up Usage: up [options] [–scale SERVICE=NUM…] [SERVICE…] -d 在后台运行容器 -no-deps 不启动连接服务 --no-recreate 如果容器存在,不重建他们 --no-build 不构建镜像,即使它丢失 --build 启动容器下构建镜像 --scale SERVICE=NUM 指定一个服务(容器)的启动数量 | 创建和启动容器 |
config Usage: config [options] -q, --quiet 只验证不打印 --services 只打印服务名称,每行一个 --volumes 打印数据卷名称,每行一个 | 验证和查看Compose文件 | stop Usage: stop [SERVICE…] | 停止服务 |
exec Usage: exec [options] SERVICE COMMAND [ARGS…] -d 在后台运行命令 --privileged 给这个进程赋予特权权限 -u, --user USER 作为该用户运行该命令 -T 禁用分配伪终端,默认分配一个终端 --index=index 多个容器时的索引数字,默认1 | 在运行的容器里执行命令 | start Usage: start [SERVICE…] | 启动服务 |
port Usage: port [options] SERVICE PRIVATE_PORT --protocol=proto tcp或udp,默认tcp --index=index 多个容器时的索引数字,默认1 | 打印绑定的开放端口 | restart Usage: restart [options] [SERVICE…] | 重启服务 |
ps Usage: ps [options] [SERVICE…] -q 只显示ID | 列出容器 | top Usage: top [SERVICE…] | 显示容器运行进程 |
rm Usage: rm [options] [SERVICE…] -f, --force 强制删除 -s, --stop 删除容器时如果需要先停止容器 -v 删除与容器相关的任何匿名卷 | 删除停止的服务容器 | logs -f, --follow 实时输出日志 -t, --timestamps 显示时间戳 --tail=“all” 从日志末尾显示行数 | 显示容器的输出 |
scale Usage: scale [options] [SERVICE=NUM…] | 指定一个服务启动容器数量 | down | 停止容器和删除容器、网络、数 据卷和镜像 |
- 查看命令
docker-compose --help
试用Docker Compose(一)
- 选取合适的路径
- 创建与编辑
docker-compose.yml
文件touch docker-compose.yml
version: '3' services: web: build: . ports: - "8888:80"
- 创建与编辑Dockerfile
touch Dockerfile
FROM centos:7 MAINTAINER learn docker compose RUN yum install -y httpd php php-gd php-mysql RUN echo "<?php phpinfo()?>" > /var/www/html/index.php CMD ["/usr/sbin/httpd","-D","FOREGROUND"] EXPOSE 80
- 启动,该命令需要在docker-compose.yml所在路径下执行
docker-compose up
- 查看效果
- 浏览器访问 对应主机IP:8888
docker-compose ps
,该命令需要在docker-compose.yml所在路径下执行
试用Docker Compose(二)
- 模拟部署LNMP
- 创建demo2文件夹
- 准备nginx(创建nginx文件夹)
- 创建与编辑Dockerfile(/demo2/nginx/Dockerfile)
FROM centos:7 MAINTAINER learn docker compose RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel ADD nginx-1.16.1.tar.gz /tmp RUN cd /tmp/nginx-1.16.1 && ./configure --prefix=/usr/local/nginx && make -j 2 && make install RUN rm -f /usr/local/nginx/conf/nginx.conf COPY nginx.conf /usr/local/nginx/conf EXPOSE 80 CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
- 下载nginx
- 现在的稳定版
wget http://nginx.org/download/nginx-1.16.1.tar.gz
- 现在的稳定版
- nginx的配置文件
user root; worker_processes auto; error_log logs/error.log info; pid logs/nginx.pid; events { use epoll; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; root html; index index.html index.php; location ~ \.php$ { root html; fastcgi_pass php-cgi:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } }
- 创建与编辑Dockerfile(/demo2/nginx/Dockerfile)
- 准备MySQL
- 准备外部的MySQL配置文件(/demo2/mysql/conf/my.conf)
[mysqld] user=mysql port=3306 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock pid-file=/var/run/mysql/mysql.pid log_error=/var/log/mysql/error.log character_set_server = utf8 max_connections=3600
- 准备外部的MySQL配置文件(/demo2/mysql/conf/my.conf)
- 准备PHP
- 创建和编辑Dockerfile(/demo2/php/Dockerfile)
FROM centos:7 MAINTAINER learn docker compose RUN yum install -y gcc gcc-c++ gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel make automake ADD php-5.6.31.tar.gz /tmp/ RUN cd /tmp/php-5.6.31 && \ ./configure --prefix=/usr/local/php \ --with-config-file-path=/usr/local/php/etc \ --with-mysql --with-mysqli \ --with-openssl --with-zlib --with-curl --with-gd \ --with-jpeg-dir --with-png-dir --with-iconv \ --enable-fpm --enable-zip --enable-mbstring && \ make -j 2 && make install && \ cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \ sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && \ cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm && \ chmod +x /etc/init.d/php-fpm COPY php.ini /usr/local/php/etc EXPOSE 9000 CMD /etc/init.d/php-fpm start && tail -F /var/log/messages
- 下载php
wget https://www.php.net/distributions/php-7.3.11.tar.gz
PASS7.3.11的php有些麻烦(cmake3、libzip、library还有些错误)——暂时放弃- 妥协了,用了php5.6
- 创建与编辑php的配置文件(/demo2/php/php.ini)
- 暂不贴出来太长了,默认即可,暂无特殊配置
- 创建和编辑Dockerfile(/demo2/php/Dockerfile)
- 准备docker-compose.yml(/demo2/docker-compose.yml)
version: '3' services: nginx: hostname: nginx build: context: ./nginx dockerfile: Dockerfile ports: - 80:80 links: - php:php-cgi volumes: - ./wwwroot:/usr/local/nginx/html php: hostname: php build: ./php links: - mysql:mysql-db volumes: - ./wwwroot:/usr/local/nginx/html mysql: hostname: mysql image: mysql:5.6 ports: - 3306:3306 volumes: - ./mysql/conf:/etc/mysql/conf.d - ./mysql/data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: wordpress MYSQL_USER: user MYSQL_PASSWORD: user123
- 准备nginx(创建nginx文件夹)
- 准备构建
docker-compose up --build
- 访问对应地址
- 在wwwroot下,编写一个简单的php界面(info.php)
<?php phpinfo()?>
- 访问对应地址(查看效果)
- 地址/info.php
- 创建demo2文件夹