Compose
官方编排工具。简单来说就是项目部署。详情可以参考之前的文章Docekr三剑客之 Docekr compose
一、安装和卸载
1.1 安装
在 Linux 上的也安装十分简单,从 GitHub Release 处直接下载编译好的二进制文件即可。
例如,在 Linux 64 位系统上直接下载对应的二进制包。
// 先把docker-compose文件dump到当前目录 wget https://github.com/docker/compose/releases/download/v2.12.2/docker-composelinux-x86_64 // 然后拷贝到/usr/bin/ $ sudo cp -arf docker-compose-linux-x86_64 /usr/bin/docker-compose $ sudo chmod +x /usr/bin/docker-compose
1.2 卸载
如果是二进制包方式安装的,删除二进制文件即可。
sudo rm /usr/bin/docker-compose
二、实战部署
2.1 下载代码
git clone https://gitee.com/nickdemo/helloworld.git
2.2 在同一级目录下创建Dockerfile.compose文件
vim Dockerfile.compose
FROM golang:1.18 ADD ./helloworld /go/src/helloworld/ WORKDIR /go/src/helloworld RUN go env -w GOPROXY=$http_proxy RUN CGO_ENABLE=0 GOOS=linux GOARCH=amd64 go build -o app . FROM ubuntu:latest COPY ./helloworld/curl-amd64 /usr/bin/curl RUN chmod +x /usr/bin/curl ENV env1=env1value ENV env2=env2value WORKDIR /app/ COPY --from=0 /go/src/helloworld/app ./ EXPOSE 80 ENTRYPOINT ["./app"] CMD ["--param1=p1","--param2=p2"]
2.3 在同一级目录下创建docker-compose.yaml文件
vim docker-compose.yaml
version: '3.7' # 定义项目中的服务 services: # 名为web的服务 web: # 根据配置构建镜像 build: # 构建镜像的上下文 context: . # 构建镜像的dockerfile dockerfile: Dockerfile.compose # 构建参数 args: http_proxy: https://proxy.golang.com.cn,https://goproxy.cn,direct # 设置labels元数据 labels: myhello: 1.0 com.example.description: "Accounting webapp" # 为构建的镜像指定tags tags: - "myhello:1.0.0" - "localhost:5000/myhello:1.0.0" # 指定容器名称 container_name: "myweb" # 设置容器依赖关系,表示web服务依赖于redis服务 depends_on: - redis # 运行容器的端口映射 ports: - "80:80" # 覆盖容器的cmd指令 command: ["--param1=1","--param2=2"] # 设置环境变量 environment: env1: "a" env2: "b" # 健康检查 healthcheck: # 检查命令 #test: ["CMD","curl","http://localhost/health"] test: ["CMD-SHELL","statuscode=`curl -o /dev/null -s -w %{http_code} http://localhost/health`; [ $$statuscode -le 400 ] || exit 1"] # 检查时间间隔 interval: 5s # 检查超时时间 timeout: 1s # 重试次数,即连续失败指定次数则判定为不健康 retries: 5 # 设置容器初始化时间,再次期间不报告健康检查状态 start_period: 5s # 使用定义的网络 networks: - mynetwork - net1 # 名为 redis的服务 redis: # 服务启动镜像 image: "redis:latest" container_name: "myredis" # 容器暴露端口 expose: - 6379 # 指定容器启动命令,即覆盖cmd指令 command: redis-server --requirepass 123456 # 数据卷设置 volumes: - /data networks: - mynetwork - net2 # 定义网络 networks: net1: {} net2: {} mynetwork: ipam: driver: default config: - subnet: "172.16.238.0/24"
2.4 验证docker-compose.yaml文件正确性
注意: 以下 docker-compose 命令都是在项目目录下,否则就需要指定相关配置文件。
docker-compose -f docker-compose.yaml config
如果config命令原样输出配置文件,就说明配置文件没有问题了。
2.5 启动应用程序
建议在项目文件夹下操作docker-compose,否则就需要显式指定项目名称和配置文件了。启动前确定配置文件中的端口没有被占用。
docker-compose up -d
2.6 查看容器名称和服务名称
myredis 和 myweb 是容器的名字,docker-compose 操作的对象是服务(redis、web)。
docker-compose ps
验证服务是否正常运行,返回ok即正常运行
curl http://localhost/health
查看日志 操作的对象就是服务了web 或 redis
验证redis服务,通过 key value 设置键值对,再通过key获取对应的值。
进入到redis容器,也能成功查看name的值。
2.7 重新编译
修改配置文件以及代码后需要重新编译,可以使用–no-cahe 指定不需要使用缓存。
docker-compose build --no-cache
2.8 重启项目
docker-compose restart
容器呢,不会因为你重新编译了新镜像,就去更换启动镜像。除非down掉,再up。
2.9 关闭项目
docker-compose down
2.10 停止及启动指定服务
docker-compose stop docker-compose start server_name
如果不指定服务名,默认停止/启动所有服务。