接下来演示借助Docker Compose进行多容器部署。 前边的章节演示尽管可以实现需求功能,但是在生产环境当中,维护起来显然很麻烦,所以下边演示借助Docker Compose功能,实现一键部署! 一个完整的项目需要多个容器(比如Web、Nginx、SqlServer、Mysql、Redis等)协调运行相互支持,一个个的部署很显然会很麻烦,而且还要为各个容器之间的网络连接而苦恼。 还好,借助Docker Compose,我们可以编写一个 第一步:安装 Docker Compose 依次执行以下命令:截止目前最新版本是 1.27.4 sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version 第二步:编辑 在服务器上的web应用根目录下新建一个 然后编写如下内容: version: external: image: /myapidemo: - - /root/apilogs/logs:/app/ - - - - /root/nginx/www:/usr/share/nginx/ - /root/nginx/conf.d/.conf:/etc/nginx/conf.d/ - /root/nginx/logs://log/ - /root/nginx/certs:/etc/nginx/ - image: mysql: - TZ: Asia/ - - command: redis-server --requirepass - test_network 代码解释:一份标准配置文件应该包含 version、services、networks 三大部分,其中最关键的就是 services 和 networks 两个部分,这是它基本结构 version: '3.8' 表示版本,截止目前最新是 3.8,可以参考文档:https://docs./compose/compose-file/ services 节点下定义每个容器服务,其中:myapidemo、nginxapi、mysql、redistest等表示容器名称 image: 1312958948/myapidemo:1.1 指定镜像名称和tag版本,如果该镜像不存在,则会自动拉取或创建镜像;如果已经存在则会直接使用 container_name: myapidemo 指定容器名 restart: always 表示关机或者重启docker时,自动重启容器 build: . 指定 Dockerfile 所在文件夹的路径(点 . 表示当前目录)。Compose 将会利用它自动构建这个镜像,然后使用这个镜像启动服务容器 ports: - "9020:5000" 端口 volumes: - /root/apilogs/logs:/app/logs 挂载一个目录或者一个已存在的数据卷容器,(例如:将/root/apilogs/logs目录 映射到 容器内的 /app/logs目录) networks: - test_network 连接到自定义网桥 test_network 特别提醒:因为前边章节我已经提前创建好 test_network 网桥了,所以在这里直接使用,下边这段话表示使用已存在的网桥 networks: test_network: external: true environment: 为容器设置环境变量,等同于 docker run -e MYSQL_ROOT_PASSWORD=Aa123456 (注意前边没有横杠 -) environment: MYSQL_ROOT_PASSWORD: Aa123456 MYSQL_DATABASE: MyTest TZ: Asia/Shanghai command: redis-server --requirepass 123456 指定一个容器启动后执行的命令,例如:这里给 redis 设置密码 其他还有很多,不依依举栗了。 参考文档: https://blog.csdn.net/zhiaini06/article/details/45287663 https://blog.csdn.net/qq_35720307/article/details/87256684 第三步:一键部署容器 使用以下命令创建并运行容器, -d 表示后台运行 docker-compose up -d 如果镜像都已经存在,则会直接创建容器并运行 如果镜像不存在,则会尝试拉取或根据 build指定的路径寻找 Dockerfile文件自动创建 从提示可以看出,如果镜像不存在则自动创建,否则需要调用 Successfully tagged 1312958948/myapidemo:1.1WARNING: Image for service myapidemo was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`. 而提示 xxxx is up-to-date,则表示 Docker Compose 认为这些容器已经启动了,没必要再次启动 nginxapi is up-to-date mysql is up-to-date redistest is up-to-date 注意:在生产环境下,禁止使用该命令:docker-compose down xxx 扩展:如果要更新迭代应用版本,只需要按照下列步骤执行即可 1,将最新版本的应用上传更新到服务器,使用cd命令切到应用根目录 2,停止容器 docker-compose stop 容器名 3,自动更新镜像并启动容器 docker-compose up -d --build 4,没了,就3步 到此结束! 参考文档:https://www.bilibili.com/video/BV1ib411w7L7?p=13 |
|