docker-compose 单机容器编排
dockerfile:先配置好文件,然后build,镜像------->容器
docker-conpose既可以基于dockerfile,也可以基于镜像,一件事拉起镜像和容器。
docker-compose 核心就是yml文件,可以定义容器的一切,通过yml配置,直接运行容器。
docker:主要服务于单节点,docker没有统一对外提供服务的端口和配置 docker一般都是内部访问,无需使用https
如果对外以集群和分布式的方式提供统一访问的端口,k8s+ingress。
docker-compose的常用命令:
build:构建服务
ps:列出由docker-compose编排的容器
up:创建和启动容器
top:显示容器的进程
logs:查看容器的输出日志
down:删除容器,网络,数据卷
exec:在容器中执行命令
stop/start/retart:停止,启动,重启容器
scale:指定容器服务启动的数量(副本)
vim docker-compose.yml
version '3'
#指定docker-compose的文件版本
service:
#定义需要运行的服务nginx:container_name: web1
#指定创建容器的名字hostname: nginx
#容器的主机名build:
#指定构建nginx容器的上下文以及dockerfilecontext: /opt/compose-nginx/nginx
#指定dockerfile的位置,如果用镜像换成image: 镜像名称dockerfile: Dockerfileports:
#直接指定宿主机和容器的端口映射关系- 1213:80tworks:#声明给容器指定的ip地址mynet:#自定义网络ipv4_address: 172.18.0.10volumes:- /opt/compose-nginx/www:/usr/local/nginx/htmlnetworks:#创建自定义网桥配置接口mynet:driver: bridge#声明网段的类型ipam:#ip地址的管理和配置,声明网段config:#子网配置,指定ip地址范围- subnet: 172.18.0.0/16
docker-compose -f docker-compose.yml up -d
docker-compose:命令开头,使用docker-compose进行容器编排
-f:使用特定的compose的模板文件,一般都用docker-compose.yml
-p:project-name:指定项目名称,如果不加,会使用目录名称
-d:后台运行
privileged: true
虽然我们登录容器,显示的是root用户,伪管理员,一旦privileged: true,容器内的root用户和宿主机的root用户,拥有一样的权限,生产者能不给就不给
创建三个目录mysql nginx php
nginx
vim Dockerfile
vim nginx.conf
worker_processes 1;
events {worker_connections 1024;
}
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;charset utf-8;location / {root html;index index.php index.html;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;
}location ~ \.php$ {fastcgi_pass 172.111.0.30:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;include fastcgi_params;}}
}
cd /mysql
vim Dockerfile
php
cd /opt/lnmp
version: '3'
services:nginx:hostname: nginxbuild:context: /opt/lnmp/nginx/dockerfile: Dockerfileports:- 1314:80container_name: nginx_servernetworks:lnmp:ipv4_address: 172.111.0.10volumes:- "nginx-data:/usr/local/nginx/html"mysql:hostname: mysqlbuild:context: /opt/lnmp/mysql/dockerfile: Dockerfileports:- 3306:3306container_name: mysql_servernetworks:lnmp:ipv4_address: 172.111.0.20privileged: truevolumes:- "mysql-data:/usr/local/mysql/"php:hostname: phpbuild:context: /opt/lnmp/php/dockerfile: Dockerfileports:- 9000:9000container_name: php_servernetworks:lnmp:ipv4_address: 172.111.0.30volumes:- "nginx-data:/usr/local/nginx/html/"- "mysql-data:/usr/local/mysql/"networks:lnmp:driver: bridgeipam:config:- subnet: 172.111.0.0/16volumes:nginx-data:mysql-data:
docker-compose -f docker-compose.yml up -d