0%

在 Docker 上使用 ArchLinux 容器

(此处纯果果瞎捣鼓,不一定会规范

瞎 BB

朋友服务器是 Ubuntu ,没法捣鼓 ArchLinux 很不舒服,加上朋友服务器也莫 VNC,之前不小心给它硬核安装 ArchLinux 装挂过一次,其实之前在自己那台上搭过,也就当玩具玩玩图个乐~

参考资料: [在 Docker 中使用 Archlinux 的折腾记录 | Mogeko`s Blog](https://mogeko.me/2019/063/)

emm 这里已经有大佬打包过了,那就不重复造轮子了

之前用的是 U2FsdGVkX1 的 archlinux-ssh ,但是已经两年没有过更新了,而且之前滚过一次也没法使用,也忘了有什么原因,所以就用了 mogeko 的 mogeko/archlinux

然后 docker-compose 真的是太方便辣,然后下文就以 docker-compose 为主

Docker Compose 操作

安装 Docker 和 Docker Compose

pacman -S docker.io docker-compose # ArchLinux
apt install docker docker-compose # Ubuntu
# 其他参考资料:https://docs.docker.com/compose/install/

docker-compose.yml 内容

version: "3"

services:
  archlinux:
    container_name: archlinux
    image: mogeko/archlinux:latest
    ports:
      - "2223:22/tcp"
    environment:
      TZ: 'Asia/Shanghai'

    restart: always

然后走一手 docker-compose up -d 就可以了。

如果出现无法连接到 unix:///var/run/docker.sock 的,先检查一手是否 root 权限,即 sudo 一波,再看看 dockerd 有没有开,systemctl start dockerd 一手。

然后 docker-compose.yml 我好像暂时没找到 rename docker 的方法(小声

sudo docker ps | grep archlinux
# 76983db2c6f2        mogeko/archlinux:latest          "/usr/bin/sshd -D"       6 days ago          Up 35 hours             0.0.0.0:2223->22/tcp                                                          archlinux
sudo docker exec -it 7698 bash
[root@76983db2c6f2 /]#
# 然后走一手 passwd 重置一下密码就可以 ssh root@localhost -p2223 连接啦

开始瞎皮

注:以下内容极有可能严重不规范,真的真的真的仅为果果瞎捣鼓玩的

映射目录

emm 由于 docker 重启就清内容的特性,然后我又想捣鼓个不丢数据的,又可以方便直接读取修改的,于是就开始疯狂映射

刚开始尝试了直接将 ./data 目录直接映射到 docker 中的 / ,后来发现 docker 不允许将路径直接映射为 docker 的根目录,于是便开始一个个文件夹地映射。

先运行 docker-compose down ,往 docker-compose.yml 中添加

volumes:
      - './data/backup:/backup'

再 docker-compose up -d,打开 bash

将以下文件夹打包,复制到 /backup 中

bin   etc    lib    mnt  run   srv   tmp  var
boot  home   lib64  opt  root  sbin  sys  usr

将 ./data/backup 打包文件移动到 ./data 解包,并修改 docker-compose.yml 最终为

version: "3"

services:
  archlinux:
    container_name: archlinux
    image: mogeko/archlinux:latest
    ports:
      - "2223:22/tcp"
    environment:
      TZ: 'Asia/Shanghai'
    volumes:
      - './data/bin:/bin'
      - './data/boot:/boot'
      - './data/etc:/etc'
      - './data/home:/home'
      - './data/lib:/lib'
      - './data/lib64:/lib64'
      - './data/mnt:/mnt'
      - './data/opt:/opt'
      - './data/root:/root'
      - './data/run:/run'
      - './data/sbin:/sbin'
      - './data/srv:/srv'
      - './data/sys:/sys'
      - './data/tmp:/tmp'
      - './data/usr:/usr'
      - './data/var:/var'
    restart: always

重启,然后就能暴力地获得一台重启不掉数据的容器啦,顺便还能直接丢东西进去(逃

我觉得应该有肯定有更优雅的方法的(小声逼逼

Docker 互相连接

emm 有时候 docker 之间网络不互通,交流起来不方便,开一个网络,大家连进来,就可以几个 archlinux 互相连着玩啦(不是

创建一个新网络

docker network create my-net

将 Docker Compose 中的 Docker 连接到新建的外部网络

先 docker-compose down,编辑 docker-compose.yml,在 services: archlinux: 下加入

networks:
   - my-net

注意 networks 与上面的 restart 对齐,对不齐的买把游标卡尺自己量

在文件最下面加入

networks:
    my-net:
        external:
            name: my-net

此处 networks 与上面的 services 对齐,也就是顶格写,写完保存 docker-compose.yml

然后你把其他 Docker Compose 也这么写,就可以互相连着玩啦(不是

使用外部的设置

里一套密码外一套密码总感觉不是很舒服,所以文件你也可以映射一波,一匙开两门,又快又方便(不是

使用外部的账号密码

自己宕,自己编辑文件,在 volumes: 下加入

volumes:
        # ...
  - '/etc/passwd:/etc/passwd:ro'
  - '/etc/shadow:/etc/shadow:ro'

ro 即仅允许读,rw即允许读写,这里没啥必要给修改的就给 ro 了

自己开 docker-compose ,外部用密码连接,嗨,成了

使用外部的授权密钥

方法和上面一样,文件编辑加入

volumes:
        # ...
  - '/root/.ssh/authorized_keys:/root/.ssh/authorized_keys:ro'

重启,用密钥连接,嗨,也成了

关闭密码登录

映射文件也行,自己改也行,这里就不赘述了

(皮完了)