Dockerfile 到 运行 包修订 (PR) 服务器
Dockerfile to run a package revision (PR) server
目的是使用 docker 容器部署 yocto PR 服务器。有关 PR 服务器的更多信息可以在 following link:
中找到
为了尝试这样做,我写了这个 "Dockerfile" 来生成 docker 图像:
FROM ubuntu:16.04
MAINTAINER Yocto <yocto@mydomain.com>
# Update, upgrade and install
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y gawk wget git git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat xterm curl parted python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping libsdl1.2-dev net-tools
# Set up locales
RUN apt-get -y install locales apt-utils sudo && dpkg-reconfigure locales && locale-gen en_US.UTF-8 && update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
ENV LANG en_US.utf8
# Clean up APT when done
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Replace dash with bash
RUN rm /bin/sh && ln -s bash /bin/sh
# Yocto user management
RUN groupadd -g 1000 yocto && useradd -u 1000 -g 1000 -ms /bin/bash yocto && usermod -a -G sudo yocto && usermod -a -G users yocto
ENV HOME /home/yocto
USER yocto
# Download poky
RUN git clone --branch rocko git://git.yoctoproject.org/poky /home/yocto/poky
# Create some directories
RUN mkdir -p /home/yocto/build /home/yocto/prserv
# Make /home/yocto/poky the working directory
WORKDIR /home/yocto/poky
# Expose listen port
EXPOSE 8585
# Run PR-server
CMD /bin/sh -c " \
source ./oe-init-build-env ../build \
&& bitbake-prserv --start --file /home/yocto/prserv/sqlite3.db --log /tmp/prserv.log --port 8585 \
"
使用之前的 Dockerfile 我构建了一个 docker 镜像:
$ docker build -t docker-prserver .
[...]
Successfully built 362f4599b1b6
Successfully tagged docker-prserver:latest
如您之前所见,流程成功结束。之后,我运行一个容器:
$ docker run -ti docker-prserver
yocto@b3c9fd06d8af:~/poky$
前面的命令创建了一个 shell。我检查进程“bitbake-prserver”是否为 运行ning:
$ netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
如您所见,“bitbake-prserver”进程不是 运行ning(无监听端口)。但是,如果我登录容器并执行 CMD 命令:
yocto@b3c9fd06d8af:~/poky/build$ source ./oe-init-build-env ../build/ && bitbake-prserv --start --file /home/yocto/prserv/sqlite3.db --log /tmp/prserv.log --port 8585
然后它工作正常:
yocto@b3c9fd06d8af:~$ netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:8585 0.0.0.0:* LISTEN
本以为在实例化容器时会执行CMD,但并没有发生。将 Dockerfile 写入 运行 监听暴露端口的 bitbake-prserv 服务器的正确方法是什么?
希望你们中的一些人对此有一些经验并可以提供任何有用的反馈。
提前致谢! :)
我找到了解决问题的正确方法。首先我写了这个脚本:
$ cat start.sh
#! /bin/sh
cd /home/yocto/poky
source ./oe-init-build-env ../build
bitbake-prserv --start --file /home/yocto/prserv/sqlite3.db --log /tmp/prserv.log --port 8585
tail -f /tmp/prserv.log
修改 Dockerfile 后添加以下内容:
ADD start.sh /home/yocto/start.sh
RUN chmod 755 /home/yocto/start.sh
RUN chown yocto.yocto /home/yocto/start.sh
...
CMD /home/yocto/start.sh
现在它按预期工作了。希望这可以帮助别人!
目的是使用 docker 容器部署 yocto PR 服务器。有关 PR 服务器的更多信息可以在 following link:
中找到为了尝试这样做,我写了这个 "Dockerfile" 来生成 docker 图像:
FROM ubuntu:16.04
MAINTAINER Yocto <yocto@mydomain.com>
# Update, upgrade and install
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y gawk wget git git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat xterm curl parted python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping libsdl1.2-dev net-tools
# Set up locales
RUN apt-get -y install locales apt-utils sudo && dpkg-reconfigure locales && locale-gen en_US.UTF-8 && update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
ENV LANG en_US.utf8
# Clean up APT when done
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Replace dash with bash
RUN rm /bin/sh && ln -s bash /bin/sh
# Yocto user management
RUN groupadd -g 1000 yocto && useradd -u 1000 -g 1000 -ms /bin/bash yocto && usermod -a -G sudo yocto && usermod -a -G users yocto
ENV HOME /home/yocto
USER yocto
# Download poky
RUN git clone --branch rocko git://git.yoctoproject.org/poky /home/yocto/poky
# Create some directories
RUN mkdir -p /home/yocto/build /home/yocto/prserv
# Make /home/yocto/poky the working directory
WORKDIR /home/yocto/poky
# Expose listen port
EXPOSE 8585
# Run PR-server
CMD /bin/sh -c " \
source ./oe-init-build-env ../build \
&& bitbake-prserv --start --file /home/yocto/prserv/sqlite3.db --log /tmp/prserv.log --port 8585 \
"
使用之前的 Dockerfile 我构建了一个 docker 镜像:
$ docker build -t docker-prserver .
[...]
Successfully built 362f4599b1b6
Successfully tagged docker-prserver:latest
如您之前所见,流程成功结束。之后,我运行一个容器:
$ docker run -ti docker-prserver
yocto@b3c9fd06d8af:~/poky$
前面的命令创建了一个 shell。我检查进程“bitbake-prserver”是否为 运行ning:
$ netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
如您所见,“bitbake-prserver”进程不是 运行ning(无监听端口)。但是,如果我登录容器并执行 CMD 命令:
yocto@b3c9fd06d8af:~/poky/build$ source ./oe-init-build-env ../build/ && bitbake-prserv --start --file /home/yocto/prserv/sqlite3.db --log /tmp/prserv.log --port 8585
然后它工作正常:
yocto@b3c9fd06d8af:~$ netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:8585 0.0.0.0:* LISTEN
本以为在实例化容器时会执行CMD,但并没有发生。将 Dockerfile 写入 运行 监听暴露端口的 bitbake-prserv 服务器的正确方法是什么?
希望你们中的一些人对此有一些经验并可以提供任何有用的反馈。
提前致谢! :)
我找到了解决问题的正确方法。首先我写了这个脚本:
$ cat start.sh
#! /bin/sh
cd /home/yocto/poky
source ./oe-init-build-env ../build
bitbake-prserv --start --file /home/yocto/prserv/sqlite3.db --log /tmp/prserv.log --port 8585
tail -f /tmp/prserv.log
修改 Dockerfile 后添加以下内容:
ADD start.sh /home/yocto/start.sh
RUN chmod 755 /home/yocto/start.sh
RUN chown yocto.yocto /home/yocto/start.sh
...
CMD /home/yocto/start.sh
现在它按预期工作了。希望这可以帮助别人!