使用my-docker镜像启动一个容器
docker run -d -p 8888:8888 my-docker:1.0
不使用compose,需要单独启动三个容器,执行三遍docker run
使用 compose 部署项目
编写docker-compose.yml文件,并上传到服务器的/mydocker 路径下
version: "3"
# 多个服务
services:
# my-docker服务
myDockerService:
# 镜像名称和版本
image: my-docker:1.0
# 启动的容器名称
container_name: my-docker
ports:
- 8888:8888
# 容器数据卷
volumes:
- /app/myDocker:/data
# 网络模式 (最下方自定义的一个网络模式)
networks:
- my_net
# 依赖的服务(表示需要依赖的服务先启动)
depends_on:
- redis
- mysql
# redis 服务
redis:
image: redis
ports:
- 6666:6379
volumes:
- /app/redis/redis.conf:/etc/redis/redis.conf
- /app/redis/data:/data
networks:
- my_net
# 启动命令
command: redis-server /etc/redis/redis.conf
# mysql服务
mysql:
image: mysql:5.7
# mysql 相关配置
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'testdb'
MYSQL_USER: 'vhukze'
MYSQL_PASSWORD: 'vhukze'
ports:
- 3306:3306
volumes:
- /app/mysql/db:/var/lib/mysql
- /app/mysql/conf/my.cnf:/etc/my.cnf
- /app/mysql/init:/docker-entrypoint-initdb.d
networks:
- my_net
# 解决外部无法访问问题
command: --default-authentication-plugin=mysql_native_password
# 创建自定义网络模式
networks:
my_net:
使用同一个自定义网络模式,互相之间可以通过服务名称访问,修改项目配置文件,把redis和mysql的ip改为服务名称
(注意这里redis的端口要改成容器内使用的端口,因为是容器之间互相访问,不会走宿主机的端口)
再次打包项目上传到服务器,使用Dockerfile构建镜像
在docker-compose.yml所在目录执行下面命令,检查语法是否有误
执行之后没有任何输出,表示语法没有问题
docker compose config -q
使用docker-compose启动三个容器
在docker-compose.yml所在目录执行下面命令
docker compose up -d
可以看到网络模式和三个容器都创建完成了
使用浏览器访问my-docker项目的接口,访问成功
一键停止并删除
docker compose down
docker compose stop
docker compose start
docker compose restart
结论是 通过docker-compose可以一键创建和删除多个容器
建
docker-compose
文件volumes中挂载的目录当宿主机不存在时,会自动创建
vi
docker-compose
.ymlversion: "2" #
使用
Version 2services: # 包含需要操作的
容器
web1: #
容器
的名称image: nginx # 指定基于哪个镜像ports: # 指定映射的端口
"8080:80"networks: # 指定
使用
哪...
考虑到要将生产环境和开发环境保持一致,我决定
使用
docker
方式
部署
我得开发。最终的效果当然是支持自动化
部署
并且能够保持开发端的环境和运行
服务
器端保持高度一致;
我得运营
服务
器是阿里云,为了方便以后参考,我决定把阿里云
服务
器重装系统,重新来过;
安装
Docker
安装前最好先确认下你的Centos是否支持安装
docker
,因为
Docker
要求 CentOS 系统的内核版本高于 3.10;
$ uname -r
更新系统到最新(可选)
$ sudo yum update
卸载旧版本(如果以前
Docker
com
pose
用来对
容器
进行编排,
使用
它可以快速定义、启动一组相关的
容器
信息。
Docker
com
pose
的工作目录被称作
一个
工程,在
一个
工程对应
多个
服务
,每个
服务
由它所需运行的
容器
组成。它有一yml个配置文件,在这个配置文件里定义了
容器
的编排信息,通过co
pose
可以
一键
启动所有相关的
容器
。
使用
com
pose
部署
一个
springboot
服务
和redis
服务
,springboot中有
一个
helloword接口,该接口访问redis,返回helloword。
服务
信息如下:
packa
目前项目涉及到的基础设施有mysql, nginx, redis,
服务
模块有两个 python/fastapi 和 golang/gin。 如果本地
部署
的话需要配置的环境有点多,虚拟化(以
docker
容器
形式)是目前(最)流行的
部署
方法。加上众多编排工具可选择,非常适合Frodo目前多
服务
的形式。本文先介绍项目的
docker
部署
方法,再以此为例,谈谈
docker-compose
编排多
服务
应用的特点和需要注意的地方。希望本文对大家开始实践
部署
多
服务
的
容器
编排应用能有启发~
项目地址: python/fas.