docker-compose

2023-12-13 16:37:14

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:
#创建自定义网络
  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;

文章来源:https://blog.csdn.net/2301_79410672/article/details/134970509
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。