目录
学习通道:【狂神说Java】Docker进阶篇超详细版教程通俗易懂
docker官网:Docker Documentation | Docker Documentation
docker hun:Docker Hub
Docker Compose yaml规则
官方规则配置参考:Compose file version 3 reference | Docker Documentation
编写文件结构和示例
# 一共有3层!
version: "3.9" # 版本
services: # 服务
# 服务1:redis
redis:
# 服务配置:image、posts、network、deploy
image: redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
# 服务2:db
db:
# 服务配置:image、network、deploy
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
max_replicas_per_node: 1
constraints:
- "node.role==manager"
# 服务3:vote
vote:
# 服务配置:image、posts、network、deploy、depends_on
image: dockersamples/examplevotingapp_vote:before
ports:
- "5000:80"
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure
# 服务4:result
result:
# 服务配置:image、posts、network、deploy、depends_on
image: dockersamples/examplevotingapp_result:before
ports:
- "5001:80"
networks:
- backend
depends_on:
- db
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
# 服务5:worker
worker:
# 服务配置:image、network、deploy
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 1
labels: [APP=VOTING]
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
placement:
constraints:
- "node.role==manager"
# 服务6:visualizer
visualizer:
# 服务配置:image、posts、volumes、deploy
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints:
- "node.role==manager"
# 其他配置 网络/卷、全局规则
networks:
frontend:
backend:
volumes:
db-data:
依赖于
表示服务之间的依赖关系。服务依赖会导致以下行为:
-
docker-compose up
按依赖顺序启动服务。在下面的例子中,db
和redis
在 之前启动web
。 -
docker-compose up SERVICE
自动包含SERVICE
的依赖项。在下面的示例中,docker-compose up web
还创建并启动db
和redis
。 -
docker-compose stop
按依赖顺序停止服务。在以下示例中,web
在db
和之前停止redis
。
简单的例子:
version: "3.9"
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
要想快速掌握yaml,就得多看多写yaml配置!
1、官方文档
Compose file version 3 reference | Docker Documentation
2、开源项目compose.yaml
redis、mysql、mq!
开源项目快速入门:撰写和 WordPress
定义项目
- 创建一个空的项目目录。例如,
my_wordpress
- 切换到新建的项目目录
cd my_wordpress/
- 创建一个
docker-compose.yml
文件来启动您的WordPress
博客和一个单独的MySQL
实例,该实例具有用于数据持久性的卷挂载:version: "3.5" services: db: #虚拟机安装mysql,nano安装mysql/mysql-server 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 volumes: - wordpress_data:/var/www/html ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data: {} wordpress_data: {}
注意事项:
docker将 WordPress 对数据库以及已安装的主题和插件进行的更新卷db_data和wordpress_data持久化。了解有关 docker 卷的更多信息
WordPress Multisite 仅适用于端口80和443.
构建项目
现在,docker-compose up -d
从您的项目目录运行。
它docker-compose up以分离模式运行,拉取所需的 Docker 镜像,并启动 wordpress 和数据库容器,如下面的示例所示。
docker-compose up -d
Pulling db (mysql/mysql-server:latest)...
latest: Pulling from mysql/mysql-server
78f907cdf4ab: Pull complete
035805736c03: Pull complete
<...>
Pulling wordpress (wordpress:latest)...
latest: Pulling from library/wordpress
789c1836f59f: Pull complete
c80326e90121: Pull complete
<...>
Status: Downloaded newer image for wordpress:latest
Creating mywordpress_db_1 ...
Creating mywordpress_db_1 ... done
Creating mywordpress_wordpress_1 ...
Creating mywordpress_wordpress_1 ... done
Attaching to mywordpress_db_1, mywordpress_wordpress_1
注意:WordPress Multisite 仅适用于端口
80
和/或443
. 如果您收到有关绑定0.0.0.0
到端口80
或443
(取决于您指定的端口)的错误消息,则您为 WordPress 配置的端口可能已被其他服务使用。
在网络浏览器中启动 WordPress
此时WordPress应该运行在8000
你的Docker Host的端口上,你可以以WordPress管理员的身份完成“著名的五分钟安装”。
注意: WordPress 站点不能立即在端口上使用,
8000
因为容器仍在初始化,在第一次加载之前可能需要几分钟。
如果您使用的是 Docker Desktop for Mac 或 Docker Desktop for Windows,您可以将其 http://localhost
用作 IP 地址,并http://localhost:8000
在 Web 浏览器中打开。
关闭和清理
该命令docker-compose down会删除容器和默认网络,但会保留您的 WordPress 数据库。
该命令docker-compose down --volumes
将删除容器、默认网络和 WordPress 数据库。
实战
- 编写项目微服务
新建工程
新建包和类文件
编写java代码package com.example.demo.Controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @Autowired StringRedisTemplate redisTemplate; @GetMapping("/hello") public String hello(){ Long views = redisTemplate.opsForValue().increment("views"); return "hello,Ajj,thank you,views"+views; } }
- Dockerfile构建镜像
#虚拟机安装java:8 FROM java:8 #nano安装jopenjdk FROM openjdk:11.0.10-jdk-oraclelinux7 COPY *.jar /app.jar CMD ["--server.port=8080"] EXPOSE 8080 ENTRYPOINT ["java","-jar","/app.jar"]
- docker-compose.yml编排项目
version: '3.5' services: ajjapp: build: . image: ajjapp depends_on: - redis ports: - "8080:8080" redis: image: "library/redis:alpine"
- 将jar包、Dockerfile、docker-compose.yml上传到服务器或者虚拟机上
- docker-compose up启动项目
搞定!
总结
简而言之:Compose项目会有多个工程,工程上会有多个服务,每个服务会运行成容器
Compose项目工程会有三层:
- 工程project
- 各种服务
- 容器运行示例
至此docker-compose了解到这,nice!