使用docker-compose 进行项目部署
一,前言项目为Go Web编程/ (新加坡)郑兆雄著 , 黄健宏译》中的一个发帖网站,通过学习了和实践,在本地完成了该项目,想在服务器上面进行部署。二,云服务器申请和配置2.1 申请服务器首先,申请云服务器。google,AWS,阿里云,腾讯云等申请都比较麻烦,最后在华为云上面申请到了免费7天的服务。想尝试的同学可以自己百度,如果有过经验,可以直接跳过,我申请的系统是debian,个人...
一,前言
项目为《Go Web编程(新加坡)郑兆雄著 , 黄健宏译》中的一个发帖网站,
通过学习了和实践,在本地完成了该项目,想在服务器上面进行部署。
二,云服务器申请和配置
2.1 申请服务器
首先,申请云服务器。google,AWS,阿里云,腾讯云等申请都比较麻烦,最后在华为云上面申请到了免费7天的服务。
想尝试的同学可以自己百度,如果有过经验,可以直接跳过,我申请的系统是debian,个人觉得比centos在安装docker时方便一些。修改安全组,设置入方向规则,主要是添加外网访问端口。
2.2 安装docker
通过ssh进入服务器,安装docker
。我这里是通过docker的deb文件进行安装的。docker-compose
是通过pip
安装。
三,docker-compose打包
准备好源代码文件。文件和文件夹的目录结构如下:
.
├── chitchatclient
│ ├── chitchat
│ └── Dockerfile
├── createdbsql
│ ├── Dockerfile
│ └── setup.sql
└── docker-compose.yml
包括了一个web server 和 postgres文件夹。
3.1 构建server
通过Dockerfile
构建chitchatclient
,代码如下。
FROM golang
ADD chitchat/. /go/src/chitchat
WORKDIR /go/src/chitchat
RUN go get github.com/lib/pq
RUN go build
ENTRYPOINT ./chitchat
EXPOSE 8080
从golang
源镜像开始,将代码文件拷贝到容器的相关路径中去,然后编译,最后设置容器启动入口,即启动编译好的server程序,容器端口为8080。
3.2 构建数据库
FROM postgres
MAINTAINER mxq(yzwmxq@gmail.com)
COPY setup.sql /docker-entrypoint-initdb.d
EXPOSE 5432
这里从postgres
源镜像构建,将文件夹下面用于创建初始表的setup.sql
拷贝到容器的初始化目录中,这样在启动容器时会自动创建表。
最后使用默认端口5432。
3.3 docker-compose
在docker-compose.yml中配置两个容器的相关服务。
version: '2'
networks:
chitchat:
services:
chitchatclient:
build: chitchatclient
networks:
- chitchat
depends_on:
- psqlservice
ports:
- 8080:8080
psqlservice:
restart: always
build: createdbsql
networks:
- chitchat
environment:
POSTGRES_DB: chitchat
POSTGRES_USER: postgres
POSTGRES_PASSWORD: mxq123
volumes:
- $PWD/data:/var/lib/postgresql/data
ports:
- 5432:5432
两个容器都是通过build的方式进行创建,数据库的配置需要设置和server程序中相对应的数据库名,用户名,密码等,且将根目录下data文件夹(如果没有,则自动创建该文件夹)挂载到数据库容器中存放数据的地方。最后两者都需要进行端口映射,否则无法通过本地进行访问。
这里有一个疑问,postgres进行端口映射之后,本地可以通过localhost访问数据库,但是chitchat启动容器无法访问,这里只能通过postgres的ip进行链接。本案例中用的是172.17.0.2
,在不同的环境中这个地址也会改变。希望有大神能告诉我,该怎么设置让一个容器通过localhost访问另一个容器中的数据库。
完成以上工作后,通过docker-compose进行编译运行。
docker-compose up -d
以上操作会进行yml文件中的所有操作,包括下载镜像,编译,数据拷贝,端口映射等操作。-d 表示以守护进程的方式运行,不会看到运行后的相关细节,如果想看具体的运行过程,可以去掉-d。
如果最后显示以下信息,表示镜像构建完成,但是不表示容器可以正确运行。
Starting docker-chitchat_psqlservice_1 ... done
Starting docker-chitchat_chitchatclient_1 ... done
具体还需要打开网站通过云服务器的公网ip:8080进行访问。
访问结果如下(下图是已经创建了几个帖子之后):
通过docker-compose
,如果操作失败,则需要一下操作:
docker-compose stop 表示停止相关容器的运行
docker-compose rm 删除容器
docker-compose build 重新构建镜像
docker-compose up 运行
最后提供本文中代码地址,欢迎大家留言和讨论。
更多推荐
所有评论(0)