Go(gin 框架)
Dockerfile
FROM golang:alpine AS builder
LABEL stage=gobuilder
ENV CGO_ENABLED 0
ENV GOPROXY https://goproxy.cn,direct
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk update --no-cache && apk add --no-cache tzdata
WORKDIR /build
ADD go.mod .
ADD go.sum .
RUN go mod download
COPY . .
COPY etc/env.yaml /app/etc/env.yaml
RUN go build -ldflags="-s -w" -o /app/myapp main.go
FROM scratch
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/Shanghai
ENV TZ Asia/Shanghai
WORKDIR /app
COPY --from=builder /app/myapp /app/myapp
COPY --from=builder /app/etc/env.yaml /app/etc/env.yaml
VOLUME /tmp
CMD ["./myapp"]
docker-compose.yml
version: '2'
services:
web:
image: myapp:latest
volumes:
- ./logs:/app/logs
ports:
- "8080:8080"
restart: unless-stopped
nginx
version: "2"
services:
web:
image: nginx:latest
ports:
- 80:80
volumes:
- ./html:/usr/share/nginx/html
- ./conf.d:/etc/nginx/conf.d
restart: unless-stopped
conf.d/default.conf
server {
listen 80;
server_name localhost;
location /v1/ {
proxy_pass http://localhost:8080/v1/;
}
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}
MySQL
version: '3.1'
services:
db:
image: mysql
restart: always
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--lower_case_table_names=1
ports:
- 3306:3306
volumes:
- ./data:/var/lib/mysql
- ./conf:/etc/mysql/conf.d
- ./logs:/logs
RabbitMQ
version: "3.7"
services:
rabbitmq:
image: rabbitmq:3.11-management-alpine
container_name: rabbitmq
ports:
- 5672:5672
- 15672:15672
volumes:
- rabbitmq_data:/var/lib/rabbitmq/
- rabbitmq_log:/var/log/rabbitmq/
volumes:
rabbitmq_data:
rabbitmq_log:
Redis
注意:需先创建
redis.conf文件,否则会生成同名目录。
touch redis.conf
version: '3.1'
services:
redis:
image: redis:7.0.10
container_name: redis
ports:
- 6379:6379
volumes:
- ./redis.conf:/etc/redis/redis.conf
command: redis-server /etc/redis/redis.conf
restart: always
PHP(Laravel + sendmail)
Dockerfile
FROM php:8.1.18-cli
RUN pecl install redis-5.3.7 && docker-php-ext-enable redis
COPY . /myapp
WORKDIR /mycomposer
RUN apt-get update && apt-get install -y zip
ENV COMPOSER_HOME /root/composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
ENV PATH $COMPOSER_HOME/vendor/bin:$PATH
WORKDIR /myapp
RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \
&& COMPOSER_ALLOW_SUPERUSER=1 composer install
CMD ["php", "/myapp/artisan", "serve", "--host=0.0.0.0", "--port=80"]
version: '2'
services:
web:
image: sendmail:1.1
volumes:
- ./storage/logs:/myapp/storage/logs
- ./.env:/myapp/.env
ports:
- "80:80"
restart: unless-stopped
Alist 网盘
version: '3.3'
services:
alist:
image: xhofe/alist:latest
container_name: alist
restart: always
ports:
- '5244:5244'
environment:
- PUID=0
- PGID=0
- UMASK=022
volumes:
- ./data:/opt/alist/data
Gitea 自建代码仓库
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.19.0
container_name: gitea
restart: always
networks:
- gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=db:3306
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea
volumes:
- /home/git/.ssh/:/data/git/.ssh
- ./gitea:/data
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "22:22"
depends_on:
- db
db:
image: mysql:8
restart: always
networks:
- gitea
environment:
- MYSQL_ROOT_PASSWORD=gitea
- MYSQL_USER=gitea
- MYSQL_PASSWORD=gitea
- MYSQL_DATABASE=gitea
volumes:
- ./mysql:/var/lib/mysql
ChatGPT Next Web
version: '3.3'
services:
chat:
image: yidadaa/chatgpt-next-web:latest
container_name: chat
restart: always
ports:
- '3000:3000'
environment:
- OPENAI_API_KEY=sk-XXXXXXXXXXXXXXXXXXXXXXXXX
- CODE=yourpassword
RustDesk 远程控制服务端
version: '3'
networks:
rustdesk-net:
external: false
services:
hbbs:
container_name: hbbs
image: rustdesk/rustdesk-server:latest
command: hbbs -r <你的域名>:21117
ports:
- 21115:21115
- 21116:21116
- 21116:21116/udp
volumes:
- ./data:/root
networks:
- rustdesk-net
depends_on:
- hbbr
restart: unless-stopped
hbbr:
container_name: hbbr
image: rustdesk/rustdesk-server:latest
command: hbbr
ports:
- 21117:21117
volumes:
- ./data:/root
networks:
- rustdesk-net
restart: unless-stopped