设为首页 收藏本站
查看: 1133|回复: 0

[经验分享] Docker的安装和镜像创建

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-10-13 10:34:14 | 显示全部楼层 |阅读模式
1.  docker安装对于Docker的安装在官网上针对不同的操作系统分别进行了描述,Ubuntu上安装Docker,对于ubuntu操作系统来说必须是64位的,因为Docker的官网上只是提供了64位的docker,如果需要32位的docker则需要下载源码进行编译,这里有篇文章介绍了Docker源码如何进行编译成32位,编译32位的Docker。但是对于我使用的Ubuntu来说正好是32位的。通过下面的两条命令可以看出操作系统的位数和Linux的内核版本。
root@ubuntu:/tmp#uname -a
Linux e529c1b7772a 3.13.0-12-generic #32-Ubuntu SMP Fri Feb 21 17:44:24 UTC 2014 i686 i686 i686 GNU/Linux
root@ubuntu:/tmp#file /sbin/init
/sbin/init: ELF 32-bit LSB  shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=1c47d1e162f6542994e457394ac52078da5cc023,stripped

         如果想在32为的Ubuntu操作系统上运行Docker的话,就必须安装32位的Docker。在Ubuntu中提供docker1.01-32位的deb包,可以直接点击“docer1.01-32deb”跳转到下载页面。下载完成后,直接使用dpkg–i进行安装。
dpkg -i docker.io_1.0.1~dfsg1-0ubuntu1~ubuntu0.14.04.1_i386.deb
Selecting previously unselected package docker.io.
(Reading database ... 150021 files and directories currently installed.)
Preparing to unpack docker.io_1.0.1~dfsg1-0ubuntu1~ubuntu0.14.04.1_i386.deb ...
Unpacking docker.io (1.0.1~dfsg1-0ubuntu1~ubuntu0.14.04.1) ...
Setting up docker.io (1.0.1~dfsg1-0ubuntu1~ubuntu0.14.04.1) ...
docker.io start/running, process 10456
Processing triggers for ureadahead (0.100.0-16) ...
Processing triggers for man-db (2.6.6-1) ...
也可以参考下面的这篇文章《Docker1.0.1 已经可以在 Ubuntu 14.04 LTS 上测试了!》进行安装。安装完成后,可以使用下面的命令确定安装的版本和基本的信息。由于docker使用go语言进行编写的,所以要依赖于GO的编译工具和库文件。
oot@ubuntu:/tmp# docker version
Client version: 1.0.1
Client API version: 1.12
Go version (client): go1.2.1
Git commit (client): 990021a
Server version: 1.0.1
Server API version: 1.12
Go version (server): go1.2.1
Git commit (server): 990021a
root@ubuntu:/tmp# docker info
Containers: 1
Images: 7
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Dirs: 10
Execution Driver: native-0.2
Kernel Version: 3.13.0-12-generic
WARNING: No swap limit support
官方安装方式docker pull imagenamedocker的索引中心下载,imagename是镜像名称,例如dockerpull ubuntu就是下载base ubuntu并且taglatest
root@ubuntu:/# docker pull ubuntu:14.04
Pulling repository ubuntu
c4ff7513909d: Download complete
511136ea3c5a: Download complete
1c9383292a8f: Download complete
9942dd43ff21: Download complete
d92c3c92fa73: Download complete
0ea0d582fd90: Download complete
cc58e55aa5a5: Download complete
root@ubuntu:~/Downloads# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu           14.04           c1b5399bd2ee        8 minutes ago       205.3 MB
learn/tutorial      latest           8dbd9e392a96        17 months ago       128 MB
root@ubuntu:/# docker run -i -t ubuntu /bin/bash
2014/09/04 13:04:28 exec format error
docker run -i -t learn/tutorial /bin/bash
2014/09/04 14:45:13 exec format error
         PS:在安装完成Dokcer后,使用Pull命令sudodocker pull ubuntu:14.04从镜像仓库获取ubuntu的镜像后,然后使用run命令dockerrun -i -t ubuntu /bin/bash直接运行该镜像时,会出现下面的错误信息,后来我又尝试着使用官方演示使用的learn/tutorial镜像,还是出现同样的问题,现在怀疑可能是由于我安装的DOcker32位的,而Image64位的不匹配造成的。前面说过Docker默认提供的都是64位,其中提供的Image自然也都是64位,所以会出现下面的错误信息。在DockerHub Registry里的大多数镜像都是64位。这里有一个关于该错误的讨论帖“Ddocker.io:Docker should recommend
linux-image-amd64 ”。所以,如果想在32位的Docker基础上运行UbuntuImage那要求Ubuntuimage也必须是32位。这就需要制作32UbuntuImage。这里有一个官方提供的可用的Ubuntuimage的列表,UbuntuImage tag

2. 创建一个Image
         由于Docker Hub Registry上面的镜像都是64位的,所以这里需要自己做一个Ubuntu的镜像,这里使用import命令,该命令的官方解释为:Create a new filesystem image from the contents of a tarball.这里使用openVZ的模板来创建,openVZ模板的下载地址为:http://openvz.org/Download/templates/precreated,在该页面中有下面的Ubuntu模板可选择,
DSC0000.png


root@ubuntu:~/Downloads#cat ubuntu-14.04-x86-minimal.tar.gz | docker import - ubuntu:14.04
c1b5399bd2ee1a0e5f3bde58b55a73037249bd2b1ec44457a56f475d9ba60490
可以使用 Docker images命令查看,多了一个ubuntu的镜像。

root@ubuntu:~/Downloads# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.04        c1b5399bd2ee        8 minutes ago       205.3 MB
<none>              <none>      c4ff7513909d        3 weeks ago         225.4 MB
learn/tutorial      latest            8dbd9e392a96        17 months ago       128 MB
使用下面的命令进入交互的Shell
root@ubuntu:~/Downloads# docker run -i -t ubuntu:14.04 /bin/bash
root@051de31a5db3:/#
docker ps -a -q列出当前运行的容器, -a 会列出所有,包括已停止的, -q 只列出容器 ID dockerps -a -q | xargs docker rm 可以删除所有未运行的容器。
下面使用docker ps –a列出所有的容器,包括已经Exit
DSC0001.png
使用下面的命令进行删除:
root@ubuntu:/tmp# docker ps -a -q | xargs docker rm
Error response from daemon: Impossible to remove a running container, please stop it first or use -f
2cf226d796cb
4a9808366c8d
2014/09/05 07:48:03 Error: failed to remove one or more containers
DSC0002.png
         如果是正在运行的容器,必须在rm下使用参数-f
DSC0003.png
         这时运行的容器会自动退出
root@ubuntu:~/Downloads# docker run -i -t ubuntu:14.04 /bin/bash
root@579b1d296500:/# exit
root@ubuntu:~/Downloads#

3. Dokcer基本命令的使用
3.1  inspect命令
         当我们使用下面的run命令时,就会进入一个交互的shell,其中f78d7854879f数字表示的精简的ContainerID,是Container ID的前12位。可以使用下面的两个命令查看完整的信息。如果要了解一个Image或者Container的完整构建信息就可以通过这个命令实现Inspect
root@ubuntu:~/Downloads# docker run -i -t ubuntu:14.04 /bin/bash
root@ f78d7854879f:/#
         可以使用docker ps –l查看,dockerps打印出正在运行的容器,docker ps -a打印出所有运行过的容器
DSC0004.png
使用 inspect命令:
root@ubuntu:~/Downloads# docker run -i -t ubuntu:14.04 /bin/bash
root@f78d7854879f:/#

root@ubuntu:/tmp# docker inspect f78d7854879f
[{
    &quot;Args&quot;: [],
    &quot;Config&quot;: {
        &quot;AttachStderr&quot;: true,
        &quot;AttachStdin&quot;: true,
        &quot;AttachStdout&quot;: true,
        &quot;Cmd&quot;: [
            &quot;/bin/bash&quot;
        ],
        &quot;CpuShares&quot;: 0,
        &quot;Cpuset&quot;: &quot;&quot;,
        &quot;Domainname&quot;: &quot;&quot;,
        &quot;Entrypoint&quot;: null,
        &quot;Env&quot;: [],
        &quot;ExposedPorts&quot;: {},
        &quot;Hostname&quot;: &quot;f78d7854879f&quot;,
        &quot;Image&quot;: &quot;ubuntu:14.04&quot;,
        &quot;Memory&quot;: 0,
        &quot;MemorySwap&quot;: 0,
        &quot;NetworkDisabled&quot;: false,
        &quot;OnBuild&quot;: null,
        &quot;OpenStdin&quot;: true,
        &quot;PortSpecs&quot;: null,
        &quot;StdinOnce&quot;: true,
        &quot;Tty&quot;: true,
        &quot;User&quot;: &quot;&quot;,
        &quot;Volumes&quot;: {},
        &quot;WorkingDir&quot;: &quot;&quot;
    },
    &quot;Created&quot;: &quot;2014-09-09T11:52:32.140889905Z&quot;,
    &quot;Driver&quot;: &quot;aufs&quot;,
    &quot;ExecDriver&quot;: &quot;native-0.2&quot;,
    &quot;HostConfig&quot;: {
        &quot;Binds&quot;: null,
        &quot;ContainerIDFile&quot;: &quot;&quot;,
        &quot;Dns&quot;: null,
        &quot;DnsSearch&quot;: null,
        &quot;Links&quot;: null,
        &quot;LxcConf&quot;: [],
        &quot;NetworkMode&quot;: &quot;bridge&quot;,
        &quot;PortBindings&quot;: {},
        &quot;Privileged&quot;: false,
        &quot;PublishAllPorts&quot;: false,
        &quot;VolumesFrom&quot;: null
    },
    &quot;HostnamePath&quot;: &quot;/var/lib/docker/containers/f78d7854879f70b56d12f40faf08b8d461746cb15100ad9267ed3dd95b5d9956/hostname&quot;,
    &quot;HostsPath&quot;: &quot;/var/lib/docker/containers/f78d7854879f70b56d12f40faf08b8d461746cb15100ad9267ed3dd95b5d9956/hosts&quot;,
    &quot;Id&quot;: &quot;f78d7854879f70b56d12f40faf08b8d461746cb15100ad9267ed3dd95b5d9956&quot;,
    &quot;Image&quot;: &quot;c1b5399bd2ee1a0e5f3bde58b55a73037249bd2b1ec44457a56f475d9ba60490&quot;,
    &quot;MountLabel&quot;: &quot;&quot;,
    &quot;Name&quot;: &quot;/backstabbing_almeida&quot;,
    &quot;NetworkSettings&quot;: {
        &quot;Bridge&quot;: &quot;docker0&quot;,
        &quot;Gateway&quot;: &quot;172.17.42.1&quot;,
        &quot;IPAddress&quot;: &quot;172.17.0.9&quot;,
        &quot;IPPrefixLen&quot;: 16,
        &quot;PortMapping&quot;: null,
        &quot;Ports&quot;: {}
    },
    &quot;Path&quot;: &quot;/bin/bash&quot;,
    &quot;ProcessLabel&quot;: &quot;&quot;,
    &quot;ResolvConfPath&quot;: &quot;/var/lib/docker/containers/f78d7854879f70b56d12f40faf08b8d461746cb15100ad9267ed3dd95b5d9956/resolv.conf&quot;,
    &quot;State&quot;: {
        &quot;ExitCode&quot;: 0,
        &quot;FinishedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;,
        &quot;Paused&quot;: false,
        &quot;Pid&quot;: 13785,
        &quot;Running&quot;: true,
        &quot;StartedAt&quot;: &quot;2014-09-09T11:52:32.319172655Z&quot;
    },
    &quot;Volumes&quot;: {},
    &quot;VolumesRW&quot;: {}
}
也可以通过下面的命令
docker images -notrunc=true
Warning: '-notrunc' is deprecated, it will be replaced by '--no-trunc' soon. See usage.
REPOSITORY          TAG                 IMAGE ID                                                           CREATED             VIRTUAL SIZE
ubuntu              14.04               c1b5399bd2ee1a0e5f3bde58b55a73037249bd2b1ec44457a56f475d9ba60490   4 days ago          205.3 MB
<none>              <none>              0ea0d582fd9027540c1f50c7f0149b237ed483d2b95ac8d107f9db5a912b4240   4 weeks ago         192.7 MB
learn/tutorial      latest              8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c   17 months ago       128 MB

3.2 commit 命令
         在运行run命令进入Container后,如果在该Container种创建了一个文件,如果这时直接退出,当再次执行run命令进入后,发现原先的新创建的文件并不存在。解决这个问题就必须使用commit命令进行提交,也就相当于保存你的容器状态,所以在下次使用时可以重用,当保存容器的时候,仅仅只是保存现在容器和创建容器时候的不同状态。
         例子1:没有使用commit命令提交
root@ubuntu:~/Downloads# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.04               c1b5399bd2ee        4 days ago          205.3 MB
<none>              <none>              0ea0d582fd90        4 weeks ago         192.7 MB
learn/tutorial      latest              8dbd9e392a96        17 months ago       128 MB
root@ubuntu:~/Downloads# docker run -i -t ubuntu:14.04 /bin/bash
root@ccf59c6f7dbc:/# cd /home/
root@ccf59c6f7dbc:/home# vim test_python.py
root@ccf59c6f7dbc:/home# cat test_python.py
#!/usr/bin/env python
root@ccf59c6f7dbc:/home# exit
exit
root@ubuntu:~/Downloads# docker run -i -t ubuntu:14.04 /bin/bash
root@53e45258eee5:/# cd home/
root@53e45258eee5:/home# ls -al
total 8
drwxr-xr-x  2 root root 4096 Jul 21 15:18 .
drwxr-xr-x 27 root root 4096 Sep  9 08:45 ..
         在执行run命令,进入容器后发现并没有我们创建的文件。
例子2:使用commit进行提交,使用dockerimages 发现多了一个镜像
root@ubuntu:~/Downloads# docker run -i -t ubuntu:14.04 /bin/bash
root@7aab28da9ee7:/# cd /home
root@7aab28da9ee7:/home# vim test_python.py
root@7aab28da9ee7:/home# cat test_python.py
#!/usr/bin env python
root@7aab28da9ee7:/home# exit
exit
root@ubuntu:~/Downloads# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES
7aab28da9ee7        ubuntu:14.04        /bin/bash           About a minute ago   Exited (0) 19 seconds ago                       romantic_leakey   
root@ubuntu:~/Downloads# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.04               c1b5399bd2ee        4 days ago          205.3 MB
<none>              <none>              0ea0d582fd90        4 weeks ago         192.7 MB
learn/tutorial      latest              8dbd9e392a96        17 months ago       128 MB
root@ubuntu:~/Downloads# docker commit 7aab28da9ee7 ubuntu:14.04-1
de581840727da1a9f1eb3e8afa3273a69e5630f0625714e6f97ec98537c25074
root@ubuntu:~/Downloads# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.04-1             de581840727d        4 seconds ago       205.3 MB
ubuntu              14.04               c1b5399bd2ee        4 days ago          205.3 MB
<none>              <none>              0ea0d582fd90        4 weeks ago         192.7 MB
learn/tutorial      latest              8dbd9e392a96        17 months ago       128 MB
root@ubuntu:~/Downloads# docker run -i -t ubuntu:14.04-1 /bin/bash   ---这里运行的是ubuntu:14.04-1
root@76b54055e745:/# cd home/
root@76b54055e745:/home# ls
test_python.py
root@76b54055e745:/home# cat test_python.py
#!/usr/bin env python
root@76b54055e745:/home#
         使用commit命令后会生成一个新的image,也就是我们保存的一个新的image

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-126189-1-1.html 上篇帖子: Docker build and using it. 下篇帖子: 如何从host之外连接到docker container
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表