docker-compose 单机容器编排
Dockerfile:先配置好的文件,然后bulid,镜像容器。
docker-compose 既可以基于dockerfile,也可以基于镜像,一键式拉起镜像和容器。
docker-compose 核心就是yml文件,可以定义容器的一切。通过yml配置,直接运行容器。
什么场景下我们用到docker
docker:单节点。docker没有同一对外提供的端口和配置。docker一般都是内部访问。无需使用https。如果要对外和分布式的方式提供统一访问的端口,k8s+ingress。
docker-compose的常用命令:
build:构建服务
ps:列出由docker-compose编排出来的容器
up:创建和启动容器
top:显示容器的进程
logs:查看容器的输出日志
down:删除容器,网络,数据卷。
exec:在容器当中执行命令。
stop/start/restart
scale:指定容器启动的副本(一模一样的容器)nginx3
安装docker-compose
mv docker-compose-linux-x86_64 docker-compose
mv docker-compose /usr/local/bin/
chmod 777 /usr/local/bin/docker-compose
docker-compose -v
查看结构:
yum -y install tree
创建简单nginx
mkdir compose-nginx
cd compose-nginx/
mkdir nginx
vim Dockerfile
FROM centos:7
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make && useradd -M -s /sbin/nologin nginx
ADD nginx-1.22.0.tar.gz /usr/local/src/
WORKDIR /usr/local/src/nginx-1.22.0
RUN ./configure
--prefix=/usr/local/nginx
--user=nginx
--group=nginx
--with-http_stub_status_module && make -j 4 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
配置访问页面
mkdir www
echo "this is nginx1" > index.html
在nginx和www目录下创建docker-compose.yml
vim docker-compose.yml
version: '3'
#指定docker-compose的文件版本
services :
#定义需要运行的服务
nginx:
container_name: web1
#指定创建容器的名字。
hostname: nginx
#指定容器的主机名
build:
#指定构建nginx容器的.上”下文以及dockerfile
context: /opt/compose-nginx/nginx
#指定dockerfile的位置,如果用镜像换成image:
dockerfile: Dockerfile
ports:
#直接指定宿主机和容器的端口映射关系
- 1213:80
networks:
#声明给容器指定的IP地址
mynet:
#自定义网络
ipv4_address: 172.18.0.10
volumes:
- /opt/compose-nginx/www:/usr/local/nginx/html
networks:
#创建自定义网桥接口配置
mynet:
driver: bridge
#声明网段的类型
ipam:
#声明网段,ip地址的管理和配置
config:
#子网配置,指定IP地址的范围:
- subnet: 172.18.0.0/16
启动:
docker-compose -f docker-compose.yml up -d
查看结构:
先拉镜像 docker pull centos:7
docker-compose -f docker-compose.yml up -d
docker-compose:命令的开头,使用docker-compose进行容器编排
-f:使用特定的compose的模版文件, -般都用docker-compose.yml
-p:project-name:指定项目名称,如果不加,会使用目录名称
-d:后台运行
只能要在 docker-compose.yml文件下才能用命令
进入直接 docker exec -it web1 bash
docker-compose最直接的 作用就是一键拉起镜像容器。不需要docker run
实验:直接拉起lnmp
mkdir lnmp
nginx:
mysql:
php:
vim docker-compose.yml
version: '3'
services:
nginx:
hostname: nginx
build:
context: /opt/lnmp/nginx/
dockerfile: Dockerfile
ports:
- 1314:80
container_name: nginx_server
networks:
lnmp:
ipv4_address: 172.111.0.10
volumes:
- "nginx-data:/usr/local/nginx/html"
mysql:
hostname: mysql
build:
context: /opt/lnmp/mysql/
dockerfile: Dockerfile
ports:
- 3306:3306
container_name: mysql_server
networks:
lnmp:
ipv4_address: 172.111.0.20
privileged: true
volumes:
- "mysql-data:/usr/local/mysql/"
php:
hostname: php
build:
context: /opt/lnmp/php/
dockerfile: Dockerfile
ports:
- 9000:9000
- "nginx-data:/usr/local/nginx/html/"
- "mysql-data:/usr/local/mysql/"
networks:
lnmp:
driver: bridge
ipam:
config:
- subnet: 172.111.0.0/16
volumes :
nginx-data:
mysql-data:
privileged: true
#虽然我们登录容器,显示的是root用户,伪管理员,一旦privileged: true,容内的root用户和宿主机的root用户,拥有一-样的权限,在生产中能不给就不给。
设置网络:
启动
docker-compose -f docker-compose.yml up -d
进入数据库,打开远程连接权限
create database wordpress;
grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
grant all privileges on *.* to 'root'@'%' identified by '123456';
flush privileges;
docker-compose 特点:
单机容器编排构建,可以实现以及是的拉起镜像和创建容器。
yml文件的格式:
version: '3'
解析代码的版本,声明解释器
services:
声明服务,可以由多个services
networks:
写在服务配置,赋予容器ip当中
写在定格,大的模块,创建网段!
volumes:
nginx nginx-data: /usr/local/nginx
volumes:
nginx-data:
mysql-data:
docker-compose核心就是yml文件, yml就是把docker run的命令写成代码。