前言

花了几天时间把两种方式做了一遍,把思路彻底理清,第二种docker需要你去学一下docker

准备

  • 准备一个服务器,我的是阿里云,记住是linux的
  • 准备xshell,xftp这两个工具,当然也不一定,你找其他有相同功能的软件代替也行
  • xshell成功连接上服务器,进入服务器终端,xftp成功连接上服务器实现本机与服务器的交互
  • 在你的服务器上配置go的环境变量,安装mysql并初始化,redis,git都可以搞进去

第一种:普通部署

  • 去goland打开自己想要部署的项目,并在控制台输入以下命令进行打包操作
go env -w GOOS=linux
go build -o main
  • 打包之后会在项目目录下出现一个main的文件,你需要把它和一些静态配置文件通过xftp传到你的服务器上(具体传到那看下一步操作),这些配置文件大多数纯的都是你的项目配置信息,比如mysql的相关信息
  • 在xshell连接上服务器后,我们就进入服务器的终端页面,如下操作:
#在root目录下新建一个文件夹project,把上面的main和配置文件传到这里,xftp连接上后,进入这个文件夹直接拖进来就行
cd /root
mkdir project
cd /root/project
#弄一下权限chomd以及挂载运行nohub
chmod +x main 
nohup ./main -c config.yaml > start.log 2>&1 & #菜鸟教程有解析
#写一个脚本例如:start.sh
kill -9 "$(pgrep -f main)" 
chmod +x main 
nohup ./main -c config.yaml > start.log 2>&1 &
echo "OK" #把这些内容写入脚本文件start.sh,运行这个脚本文件
#检查一下
ps -ef|grep main 查看进程号
tail -f start.log 查看start.log日志,看最后几行就行

第二种:docker部署

由于买的服务器是Alibaba Cloud Linux 3,咱们按照阿里云官方的来

  • 安装docker,可以去搜索,大多数都是yum安装的,yum安装的没有守护进程,阿里云官方是使用dnf
  • 以上docker安装参考阿里云文档阿里云docker安装

使用docker

  1. 拉取镜像,镜像来源:阿里云云效》开发者社区》镜像区
docker pull registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
  1. 上面的镜像链接太长,咱们给它换个简短的标签,latest是最新的意思
docker tag registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5:latest alibaba:v1
  1. 管理镜像
docker images #查看已有镜像
docker rmi -f registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5 #强制删除镜像
4.管理容器
  • 进入容器,镜像ID(ImageId)可以通过docker image命令获取,退出容器使用exit命令
docker run -it 镜像ID(ImageId) /bin/bash
  • run命令后面更上-d表示可以在后台运行容器,-name表示给容器命名
docker run -d --name apache 镜像ID(ImageId)
  • 进入后台管理的容器
docker exec -it apache /bin/bash
  • 把容器做成镜像,容器ID(containerID)可以通过docker ps获取,apachephp:v1可以自己命名
docker commit 容器ID或者容器名 apachephp:v1
  • 运行容器,并将服务器开放端口映射到容器上,端口自定,但要开放,参考添加安全组规则
docker run -d -p 80:80 apachephp:v1

制作docker镜像

  • 新建Dockerfile文件,并进入编辑
cd /root/project
mkdir Dockerfile
vim Dockerfile
  • 进入Dockerfile文件后,按[i]进入编辑,编写如下内容
# 基础镜像
FROM apachephp:v1
# 镜像拥有者
MAINTAINER ******
# docker build 时执行命令 - 创建目录
RUN mkdir -p "/root/project" \
&& ln -sf /dev/stdout /root/project/service.log
# 工作目录
WORKDIR "/root/project"

# docker run 时执行命令
ENTRYPOINT ["./hello"]

参考项目目录:

如何使用go语言进行ionic的后端开发 go语言做后端_golang

hello目录里是你的程序,例如输出hello world
注意:上面的目录全是window下的,你需要编译后上传到服务器上

  • 创建镜像
docker build -t webalinux3:v1 .          #使用Dockerfile创建镜像。命令末尾的.是Dockerfile文件的路径,不能忽略。
docker images                            #查看是否创建成功。
  • 运行容器并查看容器信息
docker run -d -p 9090:80 webalinux3:v1           #后台运行容器,映射端口,这步做完就可以直接运行了。
docker ps                             #查看当前运行中的容器。
docker ps -a                          #查看所有容器,包括未运行的容器。
docker logs CONTAINER ID/IMAGE        #如未查看到刚才运行的容器,则用容器id或者名称查看启动日志排错。
  • 然后就可以访问,淡当然Dockerfile文件下可以集成很多命令,比如mysql,nginx容器的创建和运行,如果命令过多,就不要写在Dockerfile里面(Dockerfile不能超过127行),写进脚本

容器管理工具docker compose

  • 创建一个docker-compose.yaml,文件内容如下
version: '3.8'
services:
  webapp:
    restart: always # Docker 重启时,容器也重启
    build: # 构建 Docker 镜像
      context: ./ # Dockerfile 文件的目录
      dockerfile: Dockerfile # Dockerfile 文件的名称
    image: webalinux3:v1 # 镜像名称和版本号
    container_name: apache # 容器名称
    ports: # 服务器和容器之间映射端口
      - "9090:80"
  • 在编写完 docker-compose.yml 文件之后,我们可以使用 docker-compose 命令行工具管理容器
# 启动容器
docker-compose up -d
# 查看容器列表
docker-compose ps
# 查看日志
docker-compose -f
# 关闭容器
docker-compose stop
# 启动容器
docker-compose start
# 重启容器
docker-compose restart
# 关闭并删除容器
docker-compose down

注意:使用 docker-compose 命令行工具,需要在 docker-compose.yml 文件当前目录执行。