在Ubuntu上使用Docker管理Linux容器

在Ubuntu上使用Docker管理Linux容器

版本:1.0
作者:Srijan Kishore
最后编辑:02 / 2014年7月

本指南介绍如何有效地安装Docker并管理虚拟机。 Docker是开源Linux虚拟化平台,用于开发人员和系统管理员轻松构建,部署和执行分布式应用程序。 Docker由Docker Engine,轻型运行时和虚拟化层组成,用于打包和版本虚拟机的工具类似于源代码存储库和Docker Hub,云服务即共享应用程序和自动化工作流程。 Docker允许应用程序从组件快速组装,消除开发环境,质量控制和生产之间的摩擦。

1初步说明

在我的情况下,我有Ubuntu 14.04我将安装docker。 在虚拟化软件市场中,我们提供了几种完整的硬件虚拟化技术,如KVM,Xen或Hyper-V。 但是,完整的可视化程序太重,无法在Linux上虚拟化单个应用程序。 我们可以通过使用Linux容器来克服这种情况,这是操作系统级可视化的好替代品。 Linux容器对于将开发/测试环境安装在一堆容器中是非常有用的。 Docker为此提供了Linux容器环境。

2安装

正如我上面说的,我有Ubuntu,我要安装docker。 在本章中,我将向您展示安装docher的2个选项,在我使用Ubuntu版本库中的docker版本时,此版本由Ubuntu维护,为期5年的LTS支持,但不是最新版本。 在2b中,我将使用Ubuntu ppa存储库中的最新版本。 由于码头工程处于严重的开发阶段,最新的Docker版本从2b)将很可能适合大多数用户。 请使用方法2a或2b,但不要同时使用noth!

2a从官方Ubuntu存储库安装

安装使用:

sudo apt-get update
sudo apt-get install docker.io

并创建一个符号链接,使得在shell上的使用更容易。

sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io

2b安装最新的docker版本

要从docker.io存储库安装最新的docker版本,请运行此命令

curl -s https://get.docker.io/ubuntu/ | sudo sh

3准备外壳环境

现在我将添加我的user = srijan到docker组

sudo usermod -a -G docker srijan

或使用:

sudo usermod -a -G docker $USER

在这里,我将再次注销我的会话和重新登录。 现在我将添加docker配置文件,让系统通知其位置。

sudo vi /etc/default/docker.io

DOCKER="/usr/bin/docker.io"

现在重启服务如下:

sudo service docker.io restart

4容器管理

我将使用Ubuntu操作系统启动容器。我将下载Docker窗图像如下:

 docker pull ubuntu
 Note: pull is used to pull an image or a repository from the registry   
现在我将使用以下命令登录到ubuntu容器的bash shell:

 docker run -i -t ubuntu /bin/bash

只是为了确认我会检查我的容器IP如下:


root@fd98ee950252:/# ifconfig 
eth0      Link encap:Ethernet  HWaddr 5a:a6:c6:88:f2:48  
          inet addr:172.17.0.3  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::58a6:c6ff:fe88:f248/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:7 errors:0 dropped:2 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:558 (558.0 B)  TX bytes:648 (648.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@fd98ee950252:/#

我的容器上的IP为172.17.0.3。 同样我也可以使用其他容器。 要退出容器,只需键入:

exit

同样,您也可以使用其他操作系统容器,例如

我想使用Debian容器我将使用代码:

docker run -i -t debian /bin/bash

如果你想有特定的分布,那么使用:

docker run -i -t ubuntu:12.04 /bin/bash

它将创建ubuntu12.04容器。 我将交叉检查如下:


root@44b56100fd1f:/# cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS"
root@44b56100fd1f:/#


4建立我们自己的图像

有两种方法可以创建Docker镜像:

  • 通过docker commit命令
  • 通过Docker构建命令与Dockerfile

Docker提交方法目前不推荐使用,因为使用Dockerfile构建的功能更加灵活和强大,但为了完整起见,我们将向您演示。 之后,我将重点介绍构建Docker映像的推荐方法:编写Dockerfile并使用docker build命令。

4.1使用Docker提交创建图像

我将创建一个容器,更改该容器,因为您将更改代码,然后将这些更改提交到新的映像。

我们先从我们过去使用的ubuntu镜像创建一个容器。

docker run -i -t ubuntu /bin/bash
root@73527b8b4261:/#
Note: Please see above root is showing the hostname 73527b8b4261, it is the container name created & it will differ in your case.

此外,我将安装apache:

apt-get install apache2

我已经启动了容器,然后在其中安装了Apache。 现在我将使用这个容器作为Web服务器,所以我将把它保存在当前状态。
每次我创建一个新的容器时,这样可以避免我们用Apache重新构建它。 为此,我将使用exit命令退出容器,
并使用docker commit命令。

exit
docker commit 73527b8b4261 srijan/apache2 8ce0ea7a1528

注意:这里73527b8b4261是我的容器名称,我使用8ce0ea7a1528标签作为容器,可以给任何标签名称或使用相同的名称。

假设您忘记了可以使用的最后创建的容器的ID:

docker ps -l -q

将产生73527b8b4261

Note: 73527b8b4261 is your last created container name, it will differ in your case.

我们来看看我们的新形象。 可以实现如下:

docker images srijan/apache2
srijan@vboxtest:~$ docker images srijan/apache2
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
srijan/apache2      8ce0ea7a1528        741155868ac8        6 minutes ago       207.2 MB
srijan@vboxtest:~$
Note: Here 8ce0ea7a1528 was the tag name which I used at the time of saving the container, 
Note: 741155868ac8 is the IMAGE ID of that container
Note: All these values will difer in your case as at the time of saving the container docker generates random name to them

现在我将保存自定义的图像如下:

docker commit -m="A new custom image" --author="Srijan Kishore" 73527b8b4261 srijan/apache2:webserver 

它将结果如下:

srijan@vboxtest:~$ docker commit -m="A new custom image" --author="Srijan Kishore" 73527b8b4261 srijan/apache2:webserver
f0367362eb405c513ac002b5cf172a2c0bc6c8212eab91c613f9ee611cf92fec

要从我们的新图像运行一个容器,我们可以使用docker运行命令。

docker run -t -i srijan/apache2:webserver /bin/bash

我们可以交叉检查我们提交的图像如下:

docker inspect srijan/apache2:webserver
srijan@vboxtest:~$ docker inspect srijan/apache2:webserver
[{
    "Architecture": "amd64",
    "Author": "Srijan Kishore",
    "Comment": "A new custom image",
    "Config": {
        "AttachStderr": false,
        "AttachStdin": false,
        "AttachStdout": false,
        "Cmd": [
            "/bin/bash"
        ],
        "CpuShares": 0,
        "Cpuset": "",
        "Domainname": "",
        "Entrypoint": null,
        "Env": [
            "HOME=/",
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
        ],
        "ExposedPorts": null,
        "Hostname": "",
        "Image": "",
        "Memory": 0,
        "MemorySwap": 0,
        "NetworkDisabled": false,
        "OnBuild": null,
        "OpenStdin": false,
        "PortSpecs": null,
        "StdinOnce": false,
        "Tty": false,
        "User": "",
        "Volumes": null,
        "WorkingDir": ""
    },
    "Container": "73527b8b42614f6ecd83fb5f9822d6086988d3b68fd5e32b4afbc7cd415402fd",
    "ContainerConfig": {
        "AttachStderr": true,
        "AttachStdin": true,
        "AttachStdout": true,
        "Cmd": [
            "/bin/bash"
        ],
        "CpuShares": 0,
        "Cpuset": "",
        "Domainname": "",
        "Entrypoint": null,
        "Env": [
            "HOME=/",
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
        ],
        "ExposedPorts": null,
        "Hostname": "73527b8b4261",
        "Image": "ubuntu",
        "Memory": 0,
        "MemorySwap": 0,
        "NetworkDisabled": false,
        "OnBuild": null,
        "OpenStdin": true,
        "PortSpecs": null,
        "StdinOnce": true,
        "Tty": true,
        "User": "",
        "Volumes": null,
        "WorkingDir": ""
    },
    "Created": "2014-06-30T12:58:04.973349049Z",
    "DockerVersion": "1.0.1",
    "Id": "f0367362eb405c513ac002b5cf172a2c0bc6c8212eab91c613f9ee611cf92fec",
    "Os": "linux",
    "Parent": "ef83896b7fb99b00b9e0e6ac943826386e7edcef11a3a2f58b42011ab4a4e683",
    "Size": 14463026
}
]srijan@vboxtest:~$

要从我们的新图像运行一个容器,我们可以使用docker运行命令。

docker run -t -i srijan/apache2:webserver /bin/bash


赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏