项目容器化-DockerFile学习之路
这周我主要负责的就是我们项目整个的容器化以及Docker-Compose的书写,Docker-Compose的使用,Docker-Compose的使用在小组报告中已经写出,这里主要讲讲完成Dockerfile时的一些遇到的问题已经解决的方法,供同学们参阅,基础的Dockerfile使用这里不多讲,在我的前面一篇博客已经谈到过。
服务端部署
这部分的Dockerfile较为简单, 直接使用golang官方的镜像即可
Go-Server
FROM golang:1.8 MAINTAINER WilsonZhong "1316628630@qq.com" WORKDIR $GOPATH/src/github.com/GoProjectGroupForEducation/Go-Blog ADD . $GOPATH/src/github.com/GoProjectGroupForEducation/Go-Blog RUN go get -v github.com/GoProjectGroupForEducation/Go-Blog EXPOSE 8081 ENTRYPOINT ["Go-Blog"]
前端部署
这部分相比服务端相对复杂,因为这里涉及到跨域问题,需要运用nginx做一个反向代理,所以这里的Dockerfile是将node以及nginx结合到了一起进行使用,这里我是先build出dist/,自己完成配置文件default.conf的书写后,COPY到对应的容器内的目录,运行nginx,主要涉及到两个镜像的共用
# build stage FROM node:9.11.1-alpine as build-stage WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # production stage FROM nginx:1.13.12-alpine as production-stage COPY --from=build-stage /app/dist /usr/share/nginx/html COPY --from=build-stage /app/default.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
MySQL容器搭建
3个容器当中,耗费我时间最久的就是MySQL容器,因为其涉及到与其他容器的连通,如何使数据库可以由外界访问,并控制用户的访问权限之类的很多问题
我一开始直接写了一个sh在Dockerfile中尝试调用,后来问题有点多,实在顶不住之后开始阅读mysql:latest的Dockerfile,我发现mysql镜像的每次运行都会运行/docker-entrypoint-initdb.d文件夹下的sql文件,我只需要把初始化数据库的文件COPY到容器的对应目录,我就完成数据库的初始化了,通过合理书写create.sql,我们就可以达到控制访问权限的效果
FROM mysql:latest # 复制数据库初始化脚本sql到/docker-entrypoint-initdb.d文件夹下 COPY create.sql /docker-entrypoint-initdb.d
create.sql如下
create database `blogdb`; set global max_connections = 30000; use mysql; CREATE USER 'blogdb'@'%' IDENTIFIED BY 'zsy2720a'; alter user 'blogdb' identified with mysql_native_password by 'zsy2720a'; grant all on blogdb.* to 'blogdb'@'%'; flush privileges; select host, user from user;
至于服务端在docker-compose中与mysql容器联动的问题,我也在小组报告中给出了解决的一种方法,而docker-compose的书写,也在小组博客之中,这里不多赘述