前几天看到 Arch 上的 pacman 非常的好用,但是我在安装 Manjaro 遇到了很多问题。所以就在服务器上尝试一下 Arch。使用 Docker 可以在任意 Linux 内核上运行其他 Linux 发行版。使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!

开始前的准备

我的服务器是 Ubuntu,所以首先安装 Docker。
1apt install docker
Copy

基本命令

  • 拉取 Arch 镜像。
1docker pull archlinux/base
Copy
这样就把 Arch 的存储到了本地,可以通过 docker image list 查看所有的本地镜像。
1root@lnmp:~/docker# docker image list
2REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
3arch                v1                  9a4034dda227        3 hours ago         594MB
4<none>              <none>              20b81ab423c2        3 hours ago         458MB
5nginx               latest              f68d6e55e065        4 days ago          109MB
6archlinux/base      latest              98e93880f9b1        4 days ago          458MB
7bash                latest              417531d957ab        8 weeks ago         15.2MB
Copy
  • 启动一个 Docker 容器
docker run 启动一个 Docker 容器。
在此之前了解镜像和容器之间的关系。
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
1docker run -it --name arch archlinux/base
Copy
-i 是交互模式,-t是开始一个 tty。--name给这个容器命名。后面紧跟着镜像名。
然后将会进入 Arch 的 tty 字符终端。
除此之外,常用的参数还有-d后台运行。
从后台进入容器的 tty 终端则可以用,docker exec -it arch bash
arch是之前的命名,bash是容器内的命令。这里打开一个 shell。
  • 查看容器运行状态
docker ps -a 表示查看所有的容器状态。
1root@lnmp:~/hugo/quickstart# docker ps -a
2CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
372e8ede0f2c8        archlinux/base      "/usr/bin/bash"          13 seconds ago      Up 12 seconds                              arch
402243150a4a8        archlinux/base      "--name arch"            7 minutes ago       Created                                    reverent_wing
5d44d03201e87        nginx               "nginx -g 'daemon of…"   15 minutes ago      Up 15 minutes       0.0.0.0:8080->80/tcp   web
Copy
  • 删除一个容器
docker rm 3dd93022c1b2,后面的是容器的 ID,或者名字。
  • 停止一个容器
docker stop arch,也是跟的 ID 或者名字。启动自然不用说了。
  • 保存一个容器至镜像
为什么要保存为镜像?
现在我们定制好了变化,我们希望能将其保存下来形成镜像。
要知道,当我们运行一个容器的时候(如果不使用卷的话),我们做的任何文件修改都会被记录于容器存储层里。而 Docker 提供了一个 docker commit 命令,可以将容器的存储层保存下来成为镜像。换句话说,就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。以后我们运行这个新镜像的时候,就会拥有原有容器最后的文件变化。
使用 docker commitgit commit 一样加入版本库。
1root@lnmp:~# docker commit --author "Innei" --message "init" a2 arch:v1
2sha256:9a4034dda227606da0e621fd448d741d1e4b28137a65069575bccf823581bd65
Copy
我们可以在 docker image ls 中看到这个新定制的镜像:
1root@lnmp:~/docker# docker image list
2REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
3arch                v1                  9a4034dda227        3 hours ago         594MB
4<none>              <none>              20b81ab423c2        4 hours ago         458MB
5nginx               latest              f68d6e55e065        4 days ago          109MB
6archlinux/base      latest              98e93880f9b1        4 days ago          458MB
7bash                latest              417531d957ab        8 weeks ago         15.2MB
Copy
  • 容器内端口映射
内部的容器是一个隔离的环境,若需要开启端口供外界访问则需要开始端口映射。
下面以 Nginx 为例。
1# 拉取 nginx
2docker pull nginx
3docker run --name webserver -d -p 8080:80 nginx
Copy
-p开启端口映射,外部端口:内部端口。8080:80表示内部 80 -> 外部 8080。
现在通过外部 IP 访问 8080 端口将会看到:

亲亲留个评论再走呗

正在加载评论区...