Docker-Docker Compose的安装与使用
Docker Compose是什么Docker Compose的安装Docker Compose的卸载Compose File与Docker版本上的关系Docker Compose常用命令试用Docker Compose(一)试用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 formatDocker Engine release
3.718.06.0+3.618.02.0+3.517.12.0+3.417.09.0+3.317.06.0+3.217.04.0+3.11.13.1+3.01.13.0+2.417.12.0+2.317.06.0+2.21.13.0+2.11.12.0+2.01.10.0+1.01.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:8888docker-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
;
}
}
}
准备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
准备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)
暂不贴出来太长了,默认即可,暂无特殊配置 准备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
准备构建
docker-compose up --build 访问对应地址
在wwwroot下,编写一个简单的php界面(info.php)
<?php phpinfo()?>
访问对应地址(查看效果)
地址/info.php