安卓docker使用Alpine Term

Posted 老年痴呆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓docker使用Alpine Term相关的知识,希望对你有一定的参考价值。

虽然Termux很强大,可以安装各种linux,但基于termux版linux还是不能运行Docker,需要Termux上装Qemu虚拟机,Qemu装alpine linux,这个时候才是原汁原味的x86 linux。
幸运的是有人把Termux+Qemu+Alpine整合好了,名为alpine-term,开箱即用,安装一个apk打开就是配置完全的alpine linux。

下载安装APP并登录root(地址Github:https://github.com/FakeRajbhx/alpine-term/

首先先下载alpine-term 578 MB
下载安装和安装后初始化开机都需要等一会儿,大约一分钟

开机后,登录系统,用户 alpine 密码: alpine
然后切换到root账户,输入sudo -s 密码:alpine
如果想要修改root密码, 输入 passwd ,需要输入两次新密码。

 

开启root登录SSH

注意:请不要将app放在后台去复制以下代码,不然切换回来需要重新启动
系统默认是禁止ssh密码登录的,所以需要先开启她,输入:

sed -i \'s/PasswordAuthentication no/PasswordAuthentication yes/g\' /etc/ssh/sshd_config

如果还需要开机root用户登录的话,输入

sed -i \'s/PermitRootLogin no/PermitRootLogin yes/g\' /etc/ssh/sshd_config

然后重启启动sshd服务,输入

service sshd restart

重启完成就配置好了。

映射ssh的22端口

因为是Qemu套娃,所以需要映射ssh的22端口,开机完成后,手指在软件的左上方向右滑,会出现菜单,如下图所示:


 
 

然后映射ssh的22端口到手机的2222端口,选择 [1]QEMU,输入

hostfwd_add tcp::2222-:22

回车

【注意】这个映射端口的命令每次重启Alpine Term 都需要重新设置一次!建议常驻后台,常驻后台内存占用和耗电量都很低。

执行上面的指令后就可以远程ssh手机的2222端口。接下来的操作也强烈建议在电脑上远程ssh操作,毕竟Ctrl C V特别方便。

配置APK源和DNS

因为Alpine默认的都是国外的源和DNS,所以这里都需要改成国内的
更换阿里云的源

sed -i \'s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g\' /etc/apk/repositories

更换阿里云+DNSPOD 的DNS

sed -i \'s/nameserver 185.120.22.15/nameserver 223.5.5.5/g\' /etc/resolv.conf
sed -i \'s/nameserver 94.16.114.254/nameserver 119.29.29.29/g\' /etc/resolv.conf

这样网络就正常可以使用了,接下来设置时区

setup-timezone

等到提示Which timezone are you in? (\'?\' for list) [UTC],然后输入
Asia/Shanghai
执行完成后,输入date测试下时间。

启动Docker

更新软件包 :

apk update
apk upgrade

更新之后设置docker开机启动

rc-update add docker

然后启动docker

service docker start

启动的挺慢,稍等一分钟左右,然后试试docker version,打印版本号则启动成功。

Docker内容器端口映射需要在QEMU中输入 hostfwd_add tcp::安卓手机端口-:容器端口 (同理映射ssh的22端口)

alpine-term 高速下载链接

Docker:如何知道 mongo 是不是在 Alpine/node 中使用 shell 脚本文件运行

【中文标题】Docker:如何知道 mongo 是不是在 Alpine/node 中使用 shell 脚本文件运行【英文标题】:Docker : How to know if mongo is running using shell script file in Alpine/nodeDocker:如何知道 mongo 是否在 Alpine/node 中使用 shell 脚本文件运行 【发布时间】:2020-03-12 01:29:37 【问题描述】:

我正在开发一个使用 docker 部署的 MEAN STACK 应用程序。 docker-compose.yml 文件包含两个服务,一个用于 Angular 和 express,另一个用于 mongoDB。

在 docker-compose.yml 文件中:

version: '2' # specify docker-compose version

# Define the services/containers to be run
services:
  webapp: #name of the second service
    build: ./ # specify the directory of the Dockerfile
    volumes : 
          - ./dockerScripts:/temp/scripts
    entrypoint:
          -  /temp/scripts/wait-for-service.sh
          - 'localhost'
          - '27018'
          - 'npm run serve' 
    ports:
      - "3000:3000" #specify ports forewarding

  appdb: # name of the third service
    image: mongo # specify image to build container from
    command: mongod --port 27018
    expose:
      - 27018
    ports:
      - "27018:27018" # specify port forewarding

下面是dockerFile的内容:

FROM mhart/alpine-node:10

MAINTAINER https://hub.docker.com/u/mhart/

RUN apk update && \
    apk add git && \
    apk add --no-cache python build-base && \
    apk add busybox-extras && \
    apk --no-cache add procps

#RUN apk add --no-cache python build-base

RUN mkdir -p /usr/src/

WORKDIR /usr/src/

COPY package.json .

RUN npm install --production

COPY . .

EXPOSE 3000

CMD ["npm", "start"]

在执行 webapp 命令之前,我需要检查 mongodb 是否在指定端口上启动。

为了实现这一点,我编写了一个如下的 shell 脚本文件:

set -e

host="$1"
port="$2"
svc="$3"

echo `Inspectingggggg ` $host $port 
until `telnet $host $port`; do
# until `ps -ax`; do
  >&2 echo "Service is unavailable - going to sleeping "
  sleep 5
done

>&2 echo "Service is now up, will execute npm run " $svc

npm run $svc

**

我面临的问题是如何检查mongodb服务是否启动 在执行 webapp 服务之前?

**

使用 telnet 命令我总是收到以下错误:

telnet: can't connect to remote host (127.0.0.1): Connection refused
templatexapp_1  | Service is unavailable - going to sleeping 

【问题讨论】:

【参考方案1】:

depends_on 中定义您的相互依赖关系,以依赖顺序启动服务。这消除了一个 shell 脚本来检查 mongo 是否正在运行。所以你可以简单地拥有这个docker-compose.yml 文件:

version: '2' # specify docker-compose version

# Define the services/containers to be run
services:
  webapp: #name of the second service
    build: ./ # specify the directory of the Dockerfile
    volumes : 
          - ./dockerScripts:/temp/scripts
    depends_on:
          - appdb
    command: npm run serve
    ports:
      - "3000:3000" #specify ports forewarding

  appdb: # name of the third service
    image: mongo # specify image to build container from
    command: mongod --port 27018
    expose:
      - 27018
    ports:
      - "27018:27018" # specify port forewarding

注意webapp服务中的这个部分:

    depends_on:
          - appdb

这确保appdb 将在webapp 之前启动。

【讨论】:

会不会也保证webapp启动前端口是开放的?即,不只是跑步,而是准备好了吗?

以上是关于安卓docker使用Alpine Term的主要内容,如果未能解决你的问题,请参考以下文章

「容器架构」Debian和 Alpine作为基准Docker映像的对比

Alpine linux安装docker

Docker:如何知道 mongo 是不是在 Alpine/node 中使用 shell 脚本文件运行

docker build 时 alpine 无法安装软件问题的解决

(win10 docker desktop) docker build 时 alpine 无法安装软件问题的解决

docker 下 alpine 镜像设置时区的有效办法