FROM ubuntu:18.04
LABEL maintainer="Soyl <soyl@live.cn>"
LABEL description="Docker container for Swift Vapor development"
# Install related packages
RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y git curl wget \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Vapor setup
RUN /bin/bash -c "$(wget -qO- https://apt.vapor.sh)"
# Install vapor and clean
RUN apt-get update \
&& apt-get -y install swift vapor \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN vapor --help
docker run --name=vapor-dev \
-v /tmp/vapor/HelloWorld:/var/www/HelloWorld \
-p 8081:8080 \
-it \
-w /var/www/HelloWorld \
soyl/vapor:0.1.1 \
bash
这里,要注意几个事情:
- --name=vapor-dev用于设置Vapor容器的名称,我们可以把这个名称理解为是主机名,之前这个名称都是Docker随机生成的,这里之所以要明确指定,是因为稍后,Nginx要通过这个名字,找到Vapor容器;
- 我们需要Vapor容器的一个终端,因为为此修改了代码之后,Vapor需要重新编译执行,因此我们使用了-it,并且执行了bash;
- 我们需要在Host映射一个端口号方便我们连接Nginx之前进行调试,因此,我们使用了-p 8081:8080;
- 我们使用-v把Host上的源代码目录直接映射到了容器内部;
- 我们使用-w把容器内Shell的working directory设置成了/var/www/HelloWorld,这样,docker run就会直接进入到这个目录;
如果一切顺利,我们就应该进入到这个Vapor容器的Shell了,执行下面的命令编译执行:
# Under /var/www/HelloWorld directory
vapor build && vapor run --hostname=0.0.0.0 --port=8080
这里要特别注意的就是vapor run的参数,如果在Host上执行,直接vapor run就好了,但是在容器里执行,我们必须使用--hostname=0.0.0.0参数,否则无法在容器外访问Vapor服务。至于--port则用于自定义端口号,大家可以根据自己的需要使用,它不是必须的。
这时,在Host上打开Safari,访问http://localhost:8081/hello,就可以看到Hello, world!的结果了。
并且,之后,只要我们在Host上修改了Vapor源代码,只要回到这个容器终端,重新build and run就好了。
docker run --link=vapor-dev:vapor -p 80:80 -it --rm soyl/nginx:0.1.2