yml文件
是一种标记语言,以竖列的形式展示序列化的数据格式,可读性高类似json格式,语法简单 |
YAML通过缩进来表示数据结构,连续的项目用 - 减号来表示 |
Yml文件使用的注意事项
1 | 大小写绝对敏感 |
2 | 通过缩进表示层级关系 |
3 | 只能用空格缩进不能用tab缩进 |
4 | 可以使用#注释 |
5 | 符号字符后面都有一个空格 如 test: 2 有一个例外 挂载件不需要 |
6 | 单引号引起来的字符,会被认为是普通字符串处理,双引号里面如果是特殊字符就表示本意 如 '$':表示普通字符串 "$"表示就是$ |
YML文件 的基本数据结构
声明变量(标量,单个的,不可再分的值,字符串,整数,布尔类型)
name: wu
age: 20
tall: yes
handsan: yes
wan: true
list(列表)
表示有序的元素集合
class:
- wu
- wu1
- wu2
键值对映射
声明一个键值用键值对表示
声明一个大的值
student:
name: wu1
age: 20
student1;
name: wu2
age: 18
引用
studen: &id1
name: wu1
age:20
student1: *id1
用&来定义锚点,用*来进行引用
字符串引号:
name: 'wu'
name: "wu"
Docker-compose单机容器编排 只能在一台主机进行编排 Dockerfile:先配置好文件,然后build,镜像 ----容器 Docker-conpose既可以基于dockerfile也可以基于镜像,一键式拉起镜像和容器 |
Docker-compose为什么可以一键式拉起镜像和容器
Docker-compose 核心就是yml文件,可以定义容器的一切,通过yml配置,直接运行容器 Docker适合单节点,docker没有统一对外提供服务的端口和配置,docker一般都是内部访问,无需使用httpds,如果要对外以集群和分布式的方式提供统一访问的端口,k8s+ingress。 |
Docker-compose的常用命令(目录文件下要有docker-compose.yml文件才能运行)
build | 构建服务 |
ps | 列出由docker-compose编排出来的容器 |
up | 创建和启动容器 |
top | 显示容器的进程 |
logs | 查看容器的输出日志 |
down | 删除容器,网络,数据卷 |
exec | 在容器中执行命令(一般不用) |
stop/start/restart | 停止,启动,重启容器 |
scale | 指定启动的容器数量(副本) |
docker-compose编排nginx
安装docker-compose
[root@docker1 opt]# mv docker-compose-linux-x86_64 docker-compose
改个名字
[root@docker1 opt]# mv docker-compose /usr/local/bin/
移动到/usr/local/bin/方便识别
[root@docker1 opt]# chmod 777 /usr/local/bin/docker-compose
[root@docker1 opt]# docker-compose -v
Docker Compose version v2.18.0
[root@docker1 opt]# yum -y install tree
[root@docker1 compose-nginx]# vim docker-compose.yml
version: '3'
#指定docker-compose的文件版本
services:
#定义需要运行的服务
nginx:
container_name: web1
#指定创建容器的名字
hostname: nginx
#指定容器的主机名
build:
#指定构建nginx容器的上下文以及dockerfile
context: /opt/compose-nginx/nginx
#指定dockerfile的位置,如果用镜像则换成images:
dockerfile: Dockerfile
ports:
#直接指定宿主机和容器的端口映射关系
- 1213:80
networks:
#声明给容器指定的ip地址
mynet:
#自定义网络
ipv4_address:172.18.0.10
volumes:
- /opt/compose-nginx/www:/usr/local/nginx/html
#networks:/opt/compose-nginx/www: 这是主机上的一个目录路径。这个目录会被映射到容器中。
#:/usr/local/nginx/html: 这是容器内的目录路径。它是主机目录的映射目标。所有主机上的文件和目录都#会在容器内的 /usr/local/nginx/html 中可用。
#创建自定义网络
mynet:
driver: bridge
#声明网段的类型
ipam:
#声明网段,ip地址的管理和配置
config:
#子网配置,指定IP地址的范围:
- subnet: 172.18.0.0/16
[root@docker1 nginx]# docker-compose -f docker-compose.yml up -d
docker-compose编排lnmp
[root@docker1 opt]# mv docker-compose-linux-x86_64 docker-compose
[root@docker1 opt]# mv docker-compose /usr/local/bin/
[root@docker1 opt]# chmod 777 /usr/local/bin/docker-compose
[root@docker1 opt]# docker-compose -v
Docker Compose version v2.18.0
[root@docker1 opt]# yum -y install tree
[root@docker1 lnmp]# 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
#虽然我们登录容器,显示的root用户,他是一个伪管理员,一旦privileged:true,容器内的roo#t用户和宿主的root用户,拥有一样的权限,在生产中能不给就不给
volumes:
- "mysql-data:/usr/local/mysql/"
php:
hostname: php
build:
context: /opt/lnmp/php/
dockerfile: Dockerfile
ports:
- 9000:9000
container_name: php_server
networks:
lnmp:
ipv4_address: 172.111.0.30
volumes:
- "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:
[root@docker1 opt]# tree lnmp
lnmp
├── docker-compose.yml
├── mysql
│ ├── Dockerfile
│ ├── my.cnf
│ └── mysql-boost-5.7.20.tar.gz
├── nginx
│ ├── Dockerfile
│ ├── nginx-1.22.0.tar.gz
│ ├── nginx.conf
│ └── wordpress-6.4.2-zh_CN.tar.gz
└── php
├── Dockerfile
├── php-7.1.10.tar.bz2
├── php-fpm.conf
├── php.ini
└── www.conf
3 directories, 13 files
[root@docker1 lnmp]# docker-compose -f docker-compose.yml up -d
[+] Building 0.0s (0/0)
[+] Running 6/6
✔ Network lnmp_lnmp Created
✔ Volume "lnmp_nginx-data" Created
✔ Volume "lnmp_mysql-data" Created
✔ Container php_server Started
✔ Container nginx_server Started
✔ Container mysql_server Started
#如果报错 ✘ Network lnmp_lnmp Errorfailed to create network lnmp_lnmp: Error response #from daemon: Pool overlaps with o
#把之前的docker自定义网络mynetwork删除掉
[root@docker1 lnmp]# docker network ls
NETWORK ID NAME DRIVER SCOPE
170585d3c6cb bridge bridge local
d6a752897091 host host local
d550d1203c25 mynetwork bridge local
2f239f6b35e1 none null local
[root@docker1 lnmp]# docker network rm -f mynetwork
mynetwork
[root@docker1 lnmp]# docker-compose -f docker-compose.yml up -d
[root@docker1 lnmp]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lnmp-nginx latest bafad72ddf95 42 minutes ago 699MB
nginx1 lnmp a26e9e73ea8b 42 minutes ago 699MB
lnmp-php latest c30a82e48709 12 hours ago 1.37GB
lnmp-mysql latest b8a2a0e70a60 12 hours ago 10.1GB
centos 7 eeb6ee3f44bd 2 years ago 204MB
[root@docker1 lnmp]# docker exec -it nginx_server bash
[root@nginx html]# ls /usr/local/nginx
client_body_temp fastcgi_temp logs sbin uwsgi_temp
conf html proxy_temp scgi_temp
[root@nginx html]# ls /usr/local/nginx/html
50x.html index.html wordpress
[root@nginx html]# ls /usr/local/nginx/html/wordpress/
index.php wp-blog-header.php wp-includes wp-settings.php
license.txt wp-comments-post.php wp-links-opml.php wp-signup.php
readme.html wp-config-sample.php wp-load.php wp-trackback.php
wp-activate.php wp-content wp-login.php xmlrpc.php
wp-admin wp-cron.php wp-mail.php
#如果html有权限就表示nginx没问题
[root@docker1 lnmp]# docker exec -it mysql_server bash
[root@mysql bin]# ls /usr/local/mysql/
COPYING README-test docs man mysql.sock.lock support-files
COPYING-test bin include mysql-test mysqld.pid usr
README data lib mysql.sock share
#有mysql.sock文件表示mysql也无问题
[root@docker1 lnmp]# docker exec -it php_server bash
[root@php php]# ls /usr/local/nginx/
html
#看下权限
[root@php php]# ls /usr/local/mysql/
COPYING README-test docs man mysql.sock.lock support-files
COPYING-test bin include mysql-test mysqld.pid usr
README data lib mysql.sock share
[root@php php]# ls /usr/local/nginx/html/
50x.html index.html wordpress
[root@docker1 lnmp]# docker exec -it mysql_server bash
[root@mysql bin]# mysql -u root -p
mysql> create database wordpress;
mysql> grant all privileges on wordpress.* to 'wordpress'@'%'identified by '123456';
mysql> grant all privileges on *.* to 'root'@'%'identified by '123456';
mysql> flush privileges;