后端 云原生 Docker基础 菠萝 2023-12-12 2024-05-19
记录Docker的一些应用
如何编写Dockerfile文件部署go项目
对于项目而言,我们要将所有项目编排在容器中,一般容器与容器之间的交互可以通过ip, 但是比较麻烦,所以,这里推荐使用docker的network,将所有容器都存放在一个网络中, 这样子容器之间的通信就相对比较容易。
如何创建网络,使用命令
docker network create networkName
使用docker network connect连接到创建的网络
docker network connect networkName dockerName
我们可以通过以下命令查看该网络下的连接
docker network inspect networkName
通过网络就可以使用容器命进行通信了
已经将我们要的容器添加至同一network中后,就可以开始编写我们的dockerfile了。
Dockerfile操作指令如下
指令 含义 FROM 镜像 指定新镜像所基于的镜像,第一条指令必须为FROM 指令,每创建一个镜像就需要一条FROM 指令MAINTAINER 名字 说明新镜像的维护人信息RUN 命令 在所基于的镜像上执行命令,并提交到新的镜像中 CMD [”要运行的程序”,”参数1,"参数2 " ] 指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令, 如果指定多条则只能最后一条被执行 EXPOSE 端口号 指定新镜像加载到Docker时要开启的端口ENV 环境变量 变量值 设置一个环境变量的值,会被后面的RUN 使用 ADD 源文件/目录目标文件/目录 将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL COPY 源文件/目录目标文件/目录 将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中 VOLUME [“目录"] 在容器中创建一个挂载点 USER 用户名/UID 指定运行容器时的用户WORKDIR 路径(类似cd) 为后续的RUN、CMD、ENTRYPOINT指定工作自录 ONBUILD 命令 指定所生成的镜像作为一个基础镜像时所要运行的命令HEALTHCHECK 健康检查
dockerfilke文件如下
FROM golang:1.21 as builderWORKDIR /App COPY . . RUN go env -w GO111MODULE=on \ && go env -w GOPROXY=https://goproxy.cn,direct \ && go env -w CGO_ENABLED=0 \ && go env \ && go mod tidy \ && go build -o server . FROM alpine:latestLABEL MAINTAINER="2493381254@qq.com" WORKDIR /App COPY --from=0 /App ./ COPY --from=0 /App/config.docker.yaml ./ EXPOSE 8888 ENTRYPOINT ./server -c config.docker.yaml
使用dockerfile文件构建我们的镜像
命令:
docker build -t qpp-demo -f ./Dockerfile ./
-t 指定镜像的名称,如果要指定版本,采用 image:tag 的写法。
-f 指定Dockerfile文件,默认当前文件夹下的Dockerfile。
启动镜像
docker run -d --net =app-demo-net -p 8888 :8888 --name my-app-docker app-demo
donfig.docker.yaml配置文件如下
# zap logger 的配置 zap: level: info format: console prefix: "[Chinese_Learning_App]" director: log show-line: true encode-level: LowercaseColorLevelEncoder stacktrace-key: stacktrace log-in-console: true # redis configuration #redis: # db: 0 # addr: 127.0.0.1:6379 # password: "" # system configuration system: env: public # Change to "develop" to skip authentication for development mode addr: 8888 db-type: mysql oss-type: local # 控制oss选择走本地还是 七牛等其他仓 自行增加其他oss仓可以在 server/utils/upload/upload.go 中 NewOss函数配置 use-redis: false # 使用redis use-multipoint: false # IP限制次数 一个小时15000次 iplimit-count: 15000 # IP限制一个小时 iplimit-time: 3600 # 路由全局前缀 router-prefix: "" # mysql connect configuration # 未初始化之前请勿手动修改数据库信息!!!如果一定要手动初始化请看(https://gin-vue-admin.com/docs/first_master) mysql: path: docker_mysql port: "3306" config: "charset=utf8mb4&parseTime=True&loc=Local" db-name: "Chinese_Learning_DB" username: "root" password: "123456" max-idle-conns: 10 max-open-conns: 100 log-mode: "" log-zap: false # MinIo的配置 minio: endpoint: my_minio:9001 # minio 的url accessKey: minio # userName secretKey: minio@123456 # password bucketName: "test" region: us-east-1 useSSL: false
docker compose的使用