一、docker-compose
docker-compose
容器一键化部署的工具,主要针对dockerfile,可以按照定制化的模式一键化部署dockerfile创建的容器。
定制:yaml文件。
1.1、docker-compose安装
拖程序包
[root@docker2 opt]# rz -E
rz waiting to receive.
[root@docker2 opt]# mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
[root@docker2 opt]# chmod 777 /usr/local/bin/docker-compose
[root@docker2 opt]# docker-compose --version
Docker Compose version v2.18.0
1.2、yaml格式
#yaml是一种标记语言,直观的展示数据序列化的格式。可读性高
#数据格式的结构通过缩进来进行表示的。
#注意事项:
#1、大小写是严格区分的,敏感。
#2、通过缩进表示层级关系
#3、不能用table缩进,必须要用空格缩进
#4、#可以注释
#5、符号之后必须缩进一格:, -
#6、特殊字符用单引号,字符串用双引号。
#数据结构:、
name: "chengqian"
age: 30
isStudent: true/false
#字符串,整数,布尔类型,也可以是小数点。
#列表结构,表示有序的元素的集合,使用-开头:
xy102:
- chengqian
- zhailiming
- haopengcheng
#Maps(映射)相当于字典或者对象。用键值对表示:
man:
name: chengqian
age: 20
#多行文本块: |
shuoming: |
this is xy102
chengqian is first
ta 20 le
1.3、docker-compose命令
docker-compose:
ps 基于docker-pose拉取的镜像生成的容器
up docker-compose创建和启动容器
scale创建容器的数量
top 显示容器的进程
logs 看容器的输出日志
stop start restart 停止,启动,重启。
down 删除容器,网络,数据卷,镜像。
docker-compose -f docker-compose.yml up -d
docker-compose:一键编排容器
-f:使用模板文件,必须是.yml结尾
up启动命令
1.4、docker-compose创建容器
[root@docker1 ~]# cd /opt/
[root@docker1 opt]# rz -E
rz waiting to receive.
[root@docker1 opt]# mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
[root@docker1 opt]# chmod 777 /usr/local/bin/docker-compose
[root@docker1 opt]# docker-compose --version
Docker Compose version v2.18.0
[root@docker1 opt]# cd nginx/
[root@docker1 nginx]# ls
Dockerfile nginx.conf wordpress-6.5.2-zh_CN.zip
nginx-1.22.0.tar.gz wordpress-6.4.2-zh_CN.tar.gz
[root@docker1 nginx]# cd ..
[root@docker1 opt]# cp -r nginx/ nginx1/
[root@docker1 opt]# ls
html mysql mysql1 nginx nginx1 php
[root@docker1 opt]# cd nginx1/
[root@docker1 nginx1]# ls
Dockerfile nginx.conf wordpress-6.5.2-zh_CN.zip
nginx-1.22.0.tar.gz wordpress-6.4.2-zh_CN.tar.gz
[root@docker1 nginx1]# cd ..
[root@docker1 opt]# vim docker-compose.yml
[root@docker1 opt]# ls
docker-compose.yml html mysql mysql1 nginx nginx1 php
[root@docker1 opt]# vim docker-compose.yml
version: '3'
services:
#定义镜像和容器的配置:
nginx:
container_name: web1
#定义容器的名字,web1
hostname: nginx
#定义创建好之后,容器的主机名
build:
#构建的是dockerfile。
context: /opt/nginx
dockerfile: Dockerfile
ports:
- 80:80
- 443:443
networks:
mynet:
ipv4_address: 172.18.0.10
volumes:
- /opt/nhtml:/usr/local/nginx/html/
networks:
mynet:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16
[root@docker1 opt]# docker-compose -f docker-compose.yml up -d
⠿ Container web1 Starting 0.2s
Error response from daemon: driver failed programming external connectivity on endpoint web1 (e062714b7b7a2037ab1f03f6e30f176105662efef5ff4f90b9fc50af0e62bbf9): Bind for 0.0.0.0:80 failed: port is already allocated
[root@docker1 opt]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b0028b9ac3df php:lnmp "/usr/local/php/sbin…" 2 days ago Up 2 days 9000/tcp php
aca49a030c7f mysql:lnmp "./mysqld" 2 days ago Up 2 days 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp mysql
dbdc336a4949 nginx:lnmp "/usr/local/nginx/sb…" 2 days ago Up 2 days 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
[root@docker1 opt]# docker rm -f nginx
nginx
[root@docker1 opt]# docker-compose -f docker-compose.yml up -d
[+] Building 0.0s (0/0)
[+] Running 1/1
✔ Container web1 Started 0.3s [root@docker1 opt]# cd nhtml/
[root@docker1 nhtml]# ls
[root@docker1 nhtml]# echo 123 > index.html
[root@docker1 nhtml]# curl 192.168.168.71
123
[root@docker1 opt]# vim docker-compose.yml
version: '3'
services:
#定义镜像和容器的配置:
nginx1:
container_name: web2
#定义容器的名字,web2
hostname: nginx2
#定义创建好之后,容器的主机名
build:
#构建的是dockerfile。
context: /opt/nginx1
dockerfile: Dockerfile
ports:
- 81:80
- 444:443
networks:
opt_mynet:
ipv4_address: 172.18.0.11
volumes:
- /opt/nhtml:/usr/local/nginx/html/
networks:
opt_mynet:
external: true
[root@docker1 opt]# curl 192.168.168.71:81
123
[root@docker1 opt]# cd nhtml/
[root@docker1 nhtml]# ls
index.html
[root@docker1 nhtml]# echo 1234 > index.html
[root@docker1 nhtml]# curl 192.168.168.71:81
1234
1.5、docker-compose构建lnmp
version: '3'
services:
#定义镜像和容器的配置:
nginx:
container_name: web1
#定义容器的名字,web1
hostname: nginx
#定义创建好之后,容器的主机名
build:
#构建的是dockerfile。
context: /opt/nginx
dockerfile: Dockerfile
ports:
- 80:80
- 443:443
networks:
opt_mynet:
ipv4_address: 172.111.0.10
volumes:
- /opt/nhtml:/opt/docker-nginx
#定义镜像和容器的配置:
mysql:
container_name: mysql
#定义容器的名字,mysql
hostname: mysql
#定义创建好之后,容器的主机名
build:
#构建的是dockerfile。
context: /opt/mysql
dockerfile: Dockerfile
ports:
- 3306:3306
networks:
opt_mynet:
ipv4_address: 172.111.0.20
privileged: true
volumes:
- /opt/mysql:/opt/docker-mysql
php:
container_name: php
#定义容器的名字,mysql
hostname: php
#定义创建好之后,容器的主机名
build:
#构建的是dockerfile。
context: /opt/php
dockerfile: Dockerfile
ports:
- 9000:9000
networks:
opt_mynet:
ipv4_address: 172.111.0.30
volumes_from:
- "nginx"
- "mysql"
networks:
opt_mynet:
driver: bridge
ipam:
config:
- subnet: 172.111.0.0/24
自定义网络已存在
[root@docker1 opt]# docker network rm -f mynetwrk ##删除自定义网络
[root@docker1 opt]# docker-compose -f docker-compose.yml up -d
[root@docker1 opt]# docker-compose build --no-cache ##清理缓存
2、课程笔记
[root@test1 opt]# cat docker-compose.yml
version: '3'
services:
nginx:
hostname: nginx
container_name: nginx_server
build:
context: /opt/nginx/
dockerfile: Dockerfile
ports:
- 80:80
networks:
lnmp:
ipv4_address: 172.111.0.10
#volumes:
#- /opt/nginx:/opt/docer-nginx
mysql:
hostname: mysql
container_name: mysql_server
build:
context: /opt/mysql/
dockerfile: Dockerfile
ports:
- 3306:3306
networks:
lnmp:
ipv4_address: 172.111.0.20
privileged: true
#volumes:
#- /opt/mysql:/opt/docker-mysql
php:
hostname: php
container_name: php_server
build:
context: /opt/php/
dockerfile: Dockerfile
ports:
- 9000:9000
networks:
lnmp:
ipv4_address: 172.111.0.30
volumes_from:
- nginx
- mysql
networks:
lnmp:
driver: bridge
ipam:
config:
- subnet: 172.111.0.0/24
docker-compose build --no-cache #清理缓存,必须是docker-compose.yml
tworks:
lnmp:
ipv4_address: 172.111.0.30
volumes_from:
- nginx
- mysql
networks:
lnmp:
driver: bridge
ipam:
config:
- subnet: 172.111.0.0/24
docker-compose build --no-cache #清理缓存,必须是docker-compose.yml
[外链图片转存中...(img-mcgxtEUH-1724053887304)]