为学习docker,买了一个U盘启动的ubuntu。
遗憾的是安装grub总是有问题。
先在win10开个虚拟机吧。
安装麒麟18.04,使用不太顺手。又安装了麒麟19.04。Docker顺利运行:
进入麒麟,
打开MATE终端:
sudo -i 切换到root用户;
apt install docker.io
将会同时安装下列软件: bridge-utils cgroupfs-mount containerd git git-man liberror-perl pigz runc ubuntu-fan 建议安装: aufs-tools btrfs-progs debootstrap docker-doc rinse zfs-fuse | zfsutils git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn 下列【新】软件包将被安装: bridge-utils cgroupfs-mount containerd docker.io git git-man liberror-perl pigz runc ubuntu-fan 升级了 0 个软件包,新安装了 10 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。 需要下载 57.2 MB 的归档。 解压缩后会消耗 291 MB 的额外空间。 您希望继续执行吗? [Y/n] y |
尝试一下入门教程:
第一个Alpine Linux容器
在这个实验室中,您将运行一个流行的、免费的轻量级容器,并探索容器如何工作的基础知识,Docker引擎如何执行容器并将容器彼此隔离。
1.0运行您的第一个容器
是你动手的时候了!就像所有技术性的东西一样,“hello world”应用程序是一个很好的起点。键入或单击下面的代码运行您的第一个Docker容器:
docker container run hello-world
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:451ce787d12369c5df2a32c85e5a03d52cbcef6eb3586dd03075f3034f10adcd Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. |
这就是你的第一个容器。hello-world容器输出告诉您刚刚发生了什么。实际上,在您的终端中运行的Docker引擎试图找到一个名为hello-world的映像。由于您刚刚开始,没有映像存储在本地(无法找到映像…),所以Docker engine将前往其默认的Docker注册表,即Docker Store,以查找名为“hello-world”的映像。它在那里找到映像,将其拉下,然后在容器中运行它。hello-world的唯一功能是输出您在终端中看到的文本,然后容器退出。
1.1Docker的映像
在这个实验室的其余部分中,您将运行一个Alpine Linux容器。Alpine是一个轻量级的Linux发行版,因此它可以快速下拉并运行,这使得它成为许多其他映像的一个流行起点。
首先,让我们在我们的终端运行以下代码:
docker image pull alpine
Using default tag: latest latest: Pulling from library/alpine 9d48c3bd43c5: Pull complete Digest: sha256:72c42ed48c3a2db31b7dafe17d275b634664a708d901ec9fd57b1529280f01fb Status: Downloaded newer image for alpine:latest |
pull命令从Docker注册表中获取alpine映像并将其保存在我们的系统中。在本例中,注册表是Docker Store。你可以改变注册表,但那是另一个实验。
您可以使用docker image命令查看系统上所有映像的列表。
docker image ls
1.1 Docker容器运行
太棒了!现在让我们基于此映像运行Docker容器。为此,您将使用docker container run命令。
docker container run -it alpine /bin/sh
现在您在容器中运行Linux shell,您可以尝试一些命令,比如ls -l、uname -a和其他命令。注意Alpine是一个小型Linux操作系统,因此可能缺少几个命令。通过键入Exit命令退出shell和容器。
好的,我们说我们已经在一个单独的容器实例中运行了上面的每个命令。我们可以使用docker容器ls命令查看这些实例。docker container ls命令本身显示了当前运行的所有容器。由于没有运行容器,所以您将看到一个空行。让我们尝试一个更有用的变体:
docker container ls -a
您现在看到的是您运行的所有容器的列表。请注意,STATUS列显示这些容器已经退出了一段时间。
1.2容器隔离
在上面的步骤中,我们在docker container run的帮助下通过容器实例运行了几个命令。docker容器ls -a命令向我们展示了列出的几个容器。为什么列出这么多集装箱,如果他们都来自alpine的映像?
这是Docker容器世界中的一个关键安全概念!尽管每个docker container run命令使用相同的alpine映像,但是每个执行都是一个单独的、隔离的容器。每个容器都有一个单独的文件系统,并在不同的名称空间中运行;默认情况下,容器无法与其他容器交互,即使是来自同一映像的容器。让我们再做一个练习来学习更多关于隔离的知识。
专业提示:不使用完整的容器ID,您可以只使用前几个字符,只要它们足够惟一地标识一个容器。因此,我们可以简单地使用“3030”来标识上面示例中的容器实例,因为这个列表中没有其他容器以这些字符开头。
我们将从最简单的映像创建形式开始,其中只需将容器实例之一作为映像提交。然后我们将探索一个更强大和有用的方法来创建映像:Dockerfile。然后,我们将看到如何通过检查获得映像的详细信息,并探索文件系统,以便更好地理解底层发生了什么。
继续学习请参考https://training.play-with-docker.com/dev-stage1/
http://www.rsqdz.net:907/论坛/bbs_topicread.aspx?T_id=1578&F_page=1