來源:公眾號【魚鷹談單片機】,作者:魚鷹Osprey
最近玩了docker,發(fā)現(xiàn)真的很方便,和Java 、Python這種類似,一次寫好,到處運行。
雖然是一項技術,也是工作技能,但只是工作怎么行,閑暇之余,還是可以用來摸摸魚的。
比如用來玩玩魂斗羅、超級瑪麗,只要是nes游戲,應該都支持。
雙人模式下,目前數字鍵使用的是小鍵盤。
nes-dockerfile 文件
FROM ubuntu:18.04 as builder
MAINTAINER Osprey
#docker build -f nes-dockerfile -t nes.osprey.io/nes-build-run .
# docker start nes-build
# docker attach nes-build
# docker exec -it nes-build /bin/bash
# 創(chuàng)建用戶 cmd:id
ARG USERNAME=osprey
ARG USER_UID=1000
ARG USER_GID=$USER_UID
RUN groupadd --gid $USER_GID $USERNAME
&& useradd --uid $USER_UID --gid $USER_GID -m $USERNAME
&& apt-get update
&& apt-get install -y sudo
&& echo $USERNAME ALL=(root) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME
&& chmod 0440 /etc/sudoers.d/$USERNAME
RUN apt-get update
# for cmd: add-apt-repository
RUN apt -y install software-properties-common dirmngr apt-transport-https lsb-release ca-certificates
RUN add-apt-repository ppa:xmake-io/xmake -y && apt-get update && apt-get install -y xmake
RUN?apt-get?install?-y?libsdl2-dev
RUN apt-get install -y git make gcc
# option
RUN apt-get install -y nano iputils-ping
# setting the password of root to 123456
RUN echo 'root:123456' | chpasswd
USER $USERNAME
ENV HOME=/home/$USERNAME
RUN mkdir /home/$USERNAME/work
WORKDIR /home/$USERNAME/work
RUN git clone https://gitee.com/Dozingfiretruck/nes && cd nes && xmake
###########################################
FROM ubuntu:18.04 as prod
#設置時區(qū)
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 創(chuàng)建用戶 cmd:id
ARG USERNAME=osprey
ARG USER_UID=1000
ARG USER_GID=$USER_UID
RUN groupadd --gid $USER_GID $USERNAME
&& useradd --uid $USER_UID --gid $USER_GID -m $USERNAME
&& apt-get update
&& apt-get install -y sudo
&& echo $USERNAME ALL=(root) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME
&& chmod 0440 /etc/sudoers.d/$USERNAME
RUN apt-get update
RUN apt-get install -y p7zip-full libsdl2-dev
USER $USERNAME
ENV HOME=/home/$USERNAME
RUN mkdir /home/$USERNAME/work
WORKDIR /home/$USERNAME/work
RUN echo "PS1='[e[0;33m]u@h[e[0m]:[e[0;34m]w[e[0m]$ '" >> /home/$USERNAME/.bashrc
COPY --from=0 /home/$USERNAME/work/nes/build/linux/x86_64/release/nes .
COPY contra.nes .
COPY SuperMarioBrosWorld.nes .
#CMD ["~/work/nes contra.nes"]
# run cmd:
#?docker?run?--name=nes-test?--rm?-it?-v?/tmp/.X11-unix:/tmp/.X11-unix?-v?/dev/snd:/dev/snd?--privileged?-e?DISPLAY=unix$DISPLAY?nes.osprey.io/nes-build-run?/bin/bash?-c?"./nes?contra.nes"
編譯命令(前提是安裝好docker,參考:docker通用安裝使用指南-Ubuntu-樹莓派5):
docker build -f nes-dockerfile -t nes.osprey.io/nes-build-run .
摸魚指令(nes-build-run 由前面的命令生成)
docker run --name=nes-test --rm -it -v /tmp/.X11-unix:/tmp/.X11-unix -v /dev/snd:/dev/snd --privileged -e DISPLAY=unix$DISPLAY nes.osprey.io/nes-build-run /bin/bash -c "./nes contra.nes"
如果有新的 nes 游戲,可以拷貝到容器中后,再進入容器中運行該文件
docker?cp?xx.nes?nes-test:/home/osprey/nes
最后為了更好的摸魚,可以配合vscode使用,隨時隨地打開模擬器摸魚,爽歪歪。
ubuntu18 以下版本只能下載v1.85的deb 文件,最新版本安裝不了(其他版本安裝最新的vscode就行):
https://update.code.visualstudio.com/1.85.2/linux-deb-x64/stable
安裝deb文件
sudo dpkg -i code_1.85.2-1705561292_amd64.deb
vscode打開 nes,
#?forkr from https://gitee.com/Dozingfiretruck
git?clone?https://gitee.com/embeddedosprey/nes -b docker
#?docker?分支目前含有編譯好的鏡像?nes-build-run?565M,直接使用?load?命令導入即可
code nes
#?如果是自己導入的鏡像,可能需要需要修改一下鏡像名稱
安裝插件?Dev Containers
右下角點擊重新打開 Reopen in Container(如果沒有,可以通過 ctrl + shift+p,輸入 rebuild)
容器內執(zhí)行命令
導出鏡像:
docker save nes.osprey.io/nes-build-run > nes-build-run.tar
在虛擬機的代碼倉庫.devcontainer里面導入鏡像:
docker?load?<?nes-build-run.tar
nes C語言模擬器開源倉庫地址:
https://github.com/Dozingfiretruck/nes
https://gitee.com/Dozingfiretruck/nes
魂斗羅 nes 下載參考鏈接? https://www.fcnes.com/fc/act/38.html#downadress