docker-compose
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | 简介: 定义,运行多个容器, 使用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. |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2018-05-11 Calendar 获取年 月 日 时 分 秒