使用docker-compose提升团队开发效率
使用docker-compose提升团队开发效率
docker-compose能解决那个团队开发合配中的痛点。
- 和生产环境保持一致,防止环境问题引发的bug。
- 减少开发时成员的依赖。
- 快速创建项目所需运行环境,隔离多个项目间的环境干扰。
- 快速复位。
docker是什么
Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。
Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。Docker容器与虚拟机类似,但二者在原理上不同。
容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。
容器更多的用于表示 软件的一个标准化单元。
由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。
另外,Docker也为容器提供更强的业界的隔离兼容。Docker 利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心名字空间(namespaces),来创建独立的容器(containers)。
这可以在单一Linux实体下运作,避免启动一个虚拟机造成的额外负担。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括行程树、网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、存储器、block I/O与网络。
从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的LXC与systemd - nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施,
docker与docker-compose安装
请参阅官方安装文档
mac与windowns安装包同时包含docker与docker-compose。(ps: windowns 系统需要依赖 WSL 2 或 Hyper-V)
linux 则需分别安装
# 安装依赖
$ sudo apt-get update && apt-get install ca-certificates curl gnupg lsb-release
# 添加docker 官方源
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 安装docker
$ sudo apt-get update && apt-get install docker-ce docker-ce-cli containerd.io
# 安装docker-compose
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
验证安装
在终端或cmd命令行执行docker -v 和 docker-compose -v
$ docker -v
Docker version 20.10.11, build dea9396
$ docker-compose -v
docker-compose version 1.29.2, build 5becea4c
docker基础
name | ||
---|---|---|
image | 镜像 | 可通dockerfile生成 |
container | 容器 | 运行单一任务或服务,容器内文件在(可简单理解为image的运行时) |
volume | 数据卷 | 用来存储持久数据 |
network | 虚拟网络 | 组成容器间的虚拟网络 |
运行一个简单的docker镜像
$ docker run hello-world
$ docker run --name "demo" hello-world
使用 Docker Compose
由于程序环境往往需要多个服务(容器)支撑,而直接使用docker cli,难于管理多个的容器启停以及容器间的网络,依赖,端口等等。 所以我们需要一个工具 docker-compose。
Docker Compose 是一种工具,用于帮助定义和共享多容器应用程序。 通过 Compose,你可以创建 YAML 文件来定义服务,并且只需一个命令,就可以启动或清理所有内容。
使用 Compose 的巨大优点是,你可以在文件中定义应用程序堆栈,使其位于项目存储库的根目录下(它现在受版本控制),并方便其他人参与你的项目。 其他人只需克隆你的存储库即可开始撰写应用。 事实上,你可能会看到 GitHub/GitLab 上的很多项目现在都是这样做的。 引用于docs.microsoft.com
docker-compose可通过 yml文件来定义要管理的容器及其各种参数
#docker-compose.yml 常用字段/属性
version: '3' docker-compose.yml文件版本
services: # 服务(容器)节点
db: # 容器名
platform: linux/x86_64 # 平台
# image 与 build 只能同时存在一个
image: php-fpm:7.3 # 镜像
build: # 自定义镜像打包配置,
context: ./server-conf # 打包时上下文,默认./(简单理解为dockerfile位置)
dockerfile: dockerfile # dockerfile文件名
args: # 打包时变量
PHP_VERSION: 7.3
links: dd
- db
depends_on:
- db
ports: # 端口映射(ps:docker会绕过部分右本机防火墙限制)
- "9160:3306" #将本机9160端口映射到容器内的3360
environment: # 传递给容器的环境变量
MYSQL_ROOT_PASSWORD # 从.env文件或系统环境变量读取
MYSQL_DATABASE: devdb
volumes: # 文件映射
- "./db:/var/lib/mysql" # 将本机当前目录db的文件夹映射到容器内的/var/lib/mysql文件夹
#- dbdata:/var/lib/mysql
#- "./develop/devdb.sql:/docker-entrypoint-initdb.d/devdb.sql"
# command 容器启动参数(具体从对应image的说明文档获取)
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --general_log=on
networks: # 虚拟网络
- webnet
networks:
webnet:
docker-compose 常用命令
$ #docker-compose up|stop|restart|rm|build
docker-compose up -d
docker-compose build --no-cache
dockerfile
FROM ubuntu # 基于ubuntu镜像构建
RUN apt-get clean
RUN apt-get update
RUN apt-get install -y software-properties-common
RUN add-apt-repository ppa:ondrej/php
ARG PHP_VERSION # 声明构建环境变量,仅下一行可用。
RUN apt-get update \
&& apt-get install -y wget curl nano \
php${PHP_VERSION} \
php${PHP_VERSION}-fpm \
&& apt-get clean
# 从网络下载文件
RUN wget https://mirrors.aliyun.com/composer/composer.phar
RUN mv composer.phar /usr/local/bin/composer
RUN chmod +x /usr/local/bin/composer
RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
RUN composer global require "laravel/lumen-installer"
RUN mkdir /var/log/php-fpm/
RUN chmod -R 775 /var/log/php-fpm/
# 从本机复制文件到镜像
RUN mkdir /demo
COPY ./src /demo
EXPOSE 9000 #声明容器可用端口
ARG PHP_VERSION # 声明构建环境变量,仅下一行可用。
ENV PHP_VERSION ${PHP_VERSION} # ENV 设置镜像运行时环境变量
CMD /etc/init.d/php${PHP_VERSION}-fpm start && tail -F /var/log/php-fpm/access.log
WORKDIR /var/www/html
总结
在团队中推行使用docker作为开发环境,核心开发人员配置好docker-compose.yml中各自负责的服务后。
其它成员只须安装好docker,然后记住一个命令 docker-compose up -d.
文章作者:xianqin@qrmbl.com
文章链接:https://xianqin.site/detail/4/使用docker-compose提升团队开发效率
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 闲勤记
上一篇您好,世界!