-----** 原创 **------
接上一篇: docker-compose + spring boot + mysql + redis + nginx 发布web应用: part 1
1. 上传文件
将图中的文件,使用ssh工具上传至云服务器(或是本地的vmware虚拟机)。目录就用/opt/compose-demo
从现在开始,所有的命令都是在 /opt/compose-demo这个目录下进行
2. 生成boot应用的docker镜像
# cd /opt/compose-demo
# docker build . -t compose-demo:1.0
3. 讲解一下 docker-compose.yml
这里的文件内容用于讲解,不要复制这里的内容,用 part 1 里的内容
这里有个连接: https://docs.docker.com/compose/compose-file/, 是docker-compose.yml文件的reference
version: '3' 这个是版本号,可以看下对应的docker版本 services: 要发布的服务, docker-compose.yml的关键字 nginx: nginx服务名称 image: nginx:1.15 使用的docker镜像 volumes: - ./:/etc/nginx/conf.d 把nginx.conf所在目录,这里用的是当前目录( ./ 就是/opt/compose-demo ), 映射到nginx docker容器的/etc/nginx/conf.d ports: 这样,/opt/compose-demo/里的nginx.conf, 就会被映射到 /etc/nginx/conf.d目录里。 - 80:80 这个配置对于nginx:alpine镜像不起作用。 要用nginx:1.13, nginx:1.15这样的镜像。 - 443:443 links: 有了links, depends_on, nginx.conf里 upstream 里的配置才会起作用 - spring-boot-1 因为boot应用要启动两个docker, 所以这里写了两个,如果三个,就写三个 - spring-boot-2 depends_on: - spring-boot-1 - spring-boot-2 mysql: mysql 服务名称 image: mysql:5.7 volumes: - db_data:/var/lib/mysql volume设置,这个db_data不是当前目录里,具体在哪,要用docker volume查找。这个在第三部分讲。 restart: always environment: MYSQL_ROOT_HOST: '%' MYSQL_ROOT_PASSWORD: root123 docker容器里运行的mysql的root密码 MYSQL_DATABASE: compose MYSQL_USER: boot boot应用使用的是这个用户名和密码 MYSQL_PASSWORD: boot123 redis: redis服务名称 image: redis container_name: my_redis command: redis-server --requirepass redis123 为redis设置密码,在boot应用的application-compose.yml里要设置这个密码才能访问 ports: - "6379:6379" spring-boot-1: boot应用的一个docker image: compose-demo:1.0 这个镜像是 docker build . -t compose-demo:1.0 这个命令,使用 Dockerfile生成的。 # build: . # ports: # - "10101:10101" expose: - "10101" 这样写,docker外部,不是这个docker-compose启动的docker,访问不了。在同一个docker-compose里启动的容器有相同的一个网络. restart: always depends_on: - mysql - redis spring-boot-2: boot应用的另一个docker, 还可以再加,复制粘贴。 image: compose-demo:1.0 # build: . expose: - "10101" restart: always depends_on: - mysql - redis volumes: db_data:
4. 下载镜像
因为要用到redis, mysql, nginx的docker镜像,所以现在可以
# docker-compose up -d
-d 是不显示运行时的日志输出, 可以使用 docker-compose logs 查看。
这样,nginx, mysql, redis的镜像就会就pull下来。但在执行这个命令前,最好在 /etc/docker/daemon.json里加上你的docker阿里云的加速器的配置。否则会很慢,还有可能半路挂掉。
可以看到,redis, mysql, spring boot 2个,nginx 的容器都启动了。
5. 初始化mysql数据库
1) 查看 msyql docker id
# docker ps
2) 把 compose.sql文件copy到docker容器里 /opt目录下
# docker cp compose.sql edabb0:/opt
这里 edabb0是上图中,红框内的字符串的前6位,至少要写6位,7位,8位。。。都行。要换成你自己的。
3)进入mysql的docker容器,使用 docker容器里 /opt/compose.sql 初始化数据库
# docker exec -it edabb0 /bin/bash 这个命令是进入docker 容器
# mysql -u root -p
输入docker-compose.yml里设置的root用户的密码
mysql > source /opt/compose.sql
数据库初始化后,输入 exit 退出 mysql 客户端,再输入 exit 退出docker
6. 打完收功,验证一下
因为nginx的端口是80, 所以不用端口号访问。两次 /redis的访问,返回的ip 不一样, 一个是172.22.0.5, 一个172.22.0.4,看来两个boot应用都可以访问了。
如果你的虚拟机或ecs对外开放80,可以用浏览器访问: (我用的是云主机,可以公网访问,不过你看到这篇文章时,应该就关掉了)。
其实看着挺多,就是运行docker-compose up -d,然后初始化mysql就可以访问了。本篇到些结束,第三篇扯点其它的。