简介: 定义,运行多个容器, 使用yaml配置文件,command 命令有哪些? 1. dockerFile 2. 定义service docker-compose.yml 3. docker-compose up docker-compose up --build # 启动会重新构建 docker-compose yaml 文件规则(分为3层): # 第一层: version: '3.9' # docker-compose 的版本向下兼容的 # 第二层: services: 服务1web: # 服务1的具体配置 image build network... 服务2redis: # 第三层: 其他配置项(可以没有,上面两个是核心) # 网络/卷/全局规则... network: volumes: configs: 查看所有卷: docker volume ls 筛选定义的卷: docker volume ls | grep db_data 查看卷的详细信息(挂载在主机那个目录): docker volume inspect db_data *** systemctl stop firewalld # 关闭防火墙 docker swarm 学习: 注意: - worker 节点就是工作节点不能使用manager命令 - manager 集群需要大于1台才能使用 (灰度发布,金丝雀发布...) 1. 创建一个swarm 集群 docker swarm init # 初始化一个节点 docker swarm init --advertise-addr ip地址 # 会显示创建manager节点成功 docker swarm join-token worker # 生成令牌 worker节点 docker swarm join-token manager # 生成令牌manager 节点 docker swarm leave # 离开当前节点 docker service 学习: docker service create -p 8080:80 --name my-nginx nginx # 创建一个service ,命令类似docker run *** docker service 和 docker run 区别,service 可以动态扩容, docker run 是单机 1.创建的service 也是只能在manager节点可以查看. 2.创建的容器会随机分配在swarm集群上 docker service ls # 查看创建的service ID NAME MODE REPLICAS IMAGE PORTS sspln65vl8i5 my-nginx replicated 1/1 nginx:latest *:8080->80/tcp -动态扩容 docker service update --replicas 3 my-nginx # 执行后会在集群中创建3个容器 docker service scale my-nginx=3 # 这个命令也可以实现, 一样的效果 docker service inspect my-nginx # 查看详细信息 移除service docker service rm my-nginx service 重启: docker service update --force wordpress_wordpress # wordpress_wordpress service名字 docker stack 学习: docker stack deploy -c docker-compose.yml wordpress # 创建一个stack(部署docker-compose.yml) version: "3.9" services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest ports: - "80:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data: {} docker stack services wordpress # 查看wordpress 下的service docker service ps wordpress_db # 查看wordpress_db service 下的详细任务 ********************** docker stack deploy -c docker-compose.yml wordpress #启动后 docker service ls 发现 REPLICAS 0/1 不知道什么原因: 解决方法: docker service update --force wordpress_wordpress # 重启service 好了 docker-compose: 多容器依赖构建工具 docker-compose -f docker-compose.yml up # -f 指定一个文件 docker-compose build # 构建镜像 docker-compose up -d # 不显示log docker-compose up # 默认构建docker-compose.yml docker-compose images docker-compose exec service(mysql) bash # 进入容器 docker-compose ps # 类似docker ps docker-compose stop # 停止不删除容器 docker-compose start # 启动 docker-compose down # 停止并删除 docker-compose rm redis # 删除指定容器 docker network ls 查看容器网络 #验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。 docker-compose config -q docker-compose logs nginx #查看nginx的日志 docker-compose logs -f nginx #查看nginx的实时日志 # 水平扩展 web增加为3个 docker-compose up --scale web=3 -d services:主要用来定义各个容器。 web: # 自定义的名字 # 服务的镜像名称或镜像 ID,如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。 image: hello-world # 基于一份 Dockerfile,在使用 up 启动之时执行构建任务,这个构建标签就是 build,它可以指定 Dockerfile 所在文件夹的路径 build: context: . dockerfile: Dockerfile # 使用 command 可以覆盖容器启动后默认执行的命令。 command: bundle exec thin -p 3000 # 如果你想完全控制容器的命名,可以使用这个标签指定: container_name: appxxx # depends_on这个标签解决了容器的依赖、启动先后的问题: # 注意的是,默认情况下使用 docker-compose up web 这样的方式启动 web 服务时,也会启动 redis 和 db 两个服务,因为在配置文件中定义了依赖关系。 depends_on: - db - redis # 与Docker client的--link一样效果,会连接到其它服务中的容器。 links: - db - redis # 将PID模式设置为主机PID模式,跟主机系统共享进程命名空间。容器使用这个标签将能够访问和操纵其他容器和宿主机的名称空间。 pid: "host" #映射端口的标签,使用HOST:CONTAINER格式或者只是指定容器的端口,宿主机会随机映射端口。 ports: - "3000" - "8000:8000" #挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER] 这样的格式,或者使用 [HOST:CONTAINER:ro] 这样的格式,后者对于容器来说,数据卷是只读的,这样可以有效保护宿主机的文件系统。 # Compose的数据卷指定路径可以是相对路径,使用 . 或者 .. 来指定相对目录。 # 数据卷的格式可以是下面多种形式: volumes: #只是指定一个路径(容器挂载路径),Docker 会自动在创建一个数据卷(这个路径是容器内部的)。 - /var/lib/mysql #使用绝对路径挂载数据卷(主机opt容器var) - /opt/data:/var/lib/mysql # 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。 - ./cache:/tmp/cache # 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。 - ~/configs:/etc/configs/:ro # 已经存在的命名的数据卷。 - datavolume:/var/lib/mysql # 加入指定网络,格式如下: networks: - front-tier - back-tier redis: image: redis db: image: postgres 其他: #还有这些标签:cpu_shares, cpu_quota, cpuset, domainname, hostname, ipc, mac_address, mem_limit, memswap_limit, privileged, read_only, restart, shm_size, stdin_open, tty, user, working_dir #上面这些都是一个单值的标签,类似于使用docker run的效果。 cpu_shares: 73 cpu_quota: 50000 cpuset: 0,1 user: postgresql working_dir: /code domainname: foo.com hostname: foo ipc: host mac_address: 02:42:ac:11:65:43 mem_limit: 1000000000 memswap_limit: 2000000000 privileged: true restart: always read_only: true shm_size: 64M stdin_open: true tty: true volumes:定义services使用到的volume networks:定义需要使用到的network.