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.

  

posted @   qukaige  阅读(73)  评论(0编辑  收藏  举报
编辑推荐:
· .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 获取年 月 日 时 分 秒
点击右上角即可分享
微信分享提示