自己Docker部署的过程以及遇到的问题

  • Docker配置
  • 安装Docker
  • 配置镜像加速(可忽略)
  • Linux下部署
  • 本地编写代码以及DockerFile文件
  • 拉取所需要的镜像
  • 将文件上传至服务器
  • 编译执行
  • 创建关联容器(mysql,redis等)
  • 运行容器
  • 常见错误
  • 链接数据库失败
  • 运行时报错
  • 启动服务却访问超时
  • 端口被占用


Docker配置

安装Docker

官方文档 安装

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io

启动

systemctl start docker

配置镜像加速(可忽略)

三个国内源:
	阿里(收费)
	网易(免费)
	中国科学技术大学源(免费)

进入编辑模式

vi /etc/docker/daemon.json

粘贴以下代码并保存退出

{
	"registry-mirrors":["http://hubmirror.c.163.com","https://docker.mirrors.ustc.educn"]
}

重新加载配置并重启Docker

sudo systemctl daemon-reload
systemctl restart docker

Linux下部署

参考Qimi李文周博客文献

本地编写代码以及DockerFile文件

Dockerfile

#拉取哪个镜像
FROM golang:alpine AS builder

# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOPROXY=https://goproxy.cn,direct \
    GOARCH=amd64

# 移动到工作目录:/build
WORKDIR /build

# 复制项目中的 go.mod 和 go.sum文件并下载依赖信息
COPY go.mod .
COPY go.sum .
RUN go mod download

# 将代码复制到容器中
COPY . .

# 将我们的代码编译成二进制可执行文件 bubble
RUN go build -o bulebell_app .

###################
# 接下来创建一个小镜像
###################
FROM scratch

COPY ./templates /templates
COPY ./static /static
COPY ./conf /conf

# 从builder镜像中把/dist/app 拷贝到当前目录
COPY --from=builder /build/bulebell_app /

# 需要运行的命令
ENTRYPOINT ["/bulebell_app", "conf/config.yaml"]

拉取所需要的镜像

准备可能用到的镜像,比如Mysql,Redis

docker pull mysql
docker pull redis

将文件上传至服务器

可通过编译器长传至服务器(goland)或者(xshell)等

docker login 公共仓库 docker gosu_golang

编译执行

在项目目录下,执行下面的命令创建镜像,并指定镜像名称
docker build . -t bulebell_app

创建关联容器(mysql,redis等)

docker run --name mysql3306 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /Users/yao/docker/mysql:/var/lib/mysql -d mysql
docker run --name redis6379 -p 6379:6379  -v /Users/yao/docker/redis:/var/lib/redis -d redis

运行容器

docker run --link=mysql3306:mysql3306 --link=redis6379:redis6379  -p 8080:8080 bulebell_app

docker login 公共仓库 docker gosu_docker login 公共仓库_02

常见错误

链接数据库失败

检查是否可以用Navicat软件连接上数据库:

如果可以:那么检查项目中config配置以及Dockerfile文件中的(端口,用户,密码)是否和容器一致。

如果不可以:检查数据库容器是否在运行,启动容器即可

运行时报错

重启Docker

docker: Error response from daemon:......

启动服务却访问超时

检查安全组是否有这个端口
防火墙没有允许这个端口的访问

# 防火墙设置
systemctl status firewalld		查看firewalld状态 (防火墙)
systemctl start firewalld	开启防火墙
systemctl stop firewalld	关闭防火墙

# 端口设置
sudo firewall-cmd --list-all	查看防火墙中允许访问的端口
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent	使其开启8080端口
sudo firewall-cmd --reload	重启防火墙

端口被占用

netstat -tln  查找所有端口信息
netstat -tln | grep 8080  	仅查找8080端口的占用信息

lsof -i :8080 	查看端口属于哪个程序?端口被哪个进程占用

kill -9 进程id  杀掉占用端口的进程

.