首页 > 代码库 > 虚拟化之容器docker基本操作

虚拟化之容器docker基本操作

docker 是一个开源的应用容器引擎,主要利用 linux 内核 namespace 实现沙盒隔离,用cgroup 实现资源限制。



Docker 支持三种不同的镜像层次存储的 drivers:

aufs、devicemapper、btrfs ;

  • Aufs:

AUFS (AnotherUnionFS) 是一种 Union FS, 简单来说就是支持将不同目录挂载到同一个虚

拟 文 件 系 统 下 (unite several directories into a single virtual filesystem) 的 文 件 系 统 。 Aufs

driver 是 docker 最早支持的 driver,但是 aufs 只是 linux 内核的一个补丁集而且不太可以会

被合并加入到 linux 内核中。但是由于 aufs 是唯一一个 storage driver 可以实现容器间共享可

执行及可共享的运行库, 所以当你跑成千上百个拥有相同程序代码或者运行库时时候,aufs

是个相当不错的选择。

  • Device Mapper:

Device mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在

该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略 ( 详

见:http://www.ibm.com/developerworks/cn/linux/l-devmapper/index.html) 。

Device mapper driver 会创建一个 100G 的简单文件包含你的镜像和容器。每一个容器被限

制 在 10G 大 小 的 卷 内 。 ( 如 果 想 要 调 整 , 参考 :http://jpetazzo.github.io/2014/01/29/docker-device-mapper-resize/ 。 中 文 译 文 :

http://zhumeng8337797.blog.163.com/blog/static/100768914201452405120107/ )

你可以在启动 docker daemon 时用参数-s 指定 driver:

docker -d -s devicemapper ;

  • Btrfs:

Btufs driver 在 docker build 可以很高效。但是跟 devicemapper 一样不支持设备间共享存储(文档里是 does not share executable memory between devices)。

在 没 有 aufs 支 持 的 linux 发 行 版 本 上 (CentOS,opensuse 等 ) 安 装 docker 可 能 就 使 用 了devicemapper driver。技术分享

安装

[root@server docker]# rpm -ivh  docker-engine-1.10.3-1.el7.centos.x86_64.rpm
warning: docker-engine-1.10.3-1.el7.centos.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 2c52609d: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
  1:docker-engine-1.10.3-1.el7.centos################################# [100%]
[root@server docker]# systemctl start docker

装载镜像

[root@server docker]# docker load -i ubuntu.tar 
[root@server docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              07c86167cdc4        14 months ago       187.9 MB

创建容器

[root@server docker]# docker run -it ubuntu        #-it交互模式    
root@910dbd82e909:/# [root@server docker]#
[root@server docker]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
910dbd82e909        ubuntu              "/bin/bash"         18 seconds ago      Up 13 seconds                           adoring_lovelace

查询一个命令属于哪个包

[root@foundation88 docker]# which brctl 
/sbin/brctl
[root@foundation88 docker]# rpm -qf /sbin/brctl
bridge-utils-1.5-9.el7.x86_64

因为docker默认网络模式为桥接模式,可以用桥接管理命令查看

[root@server docker]# brctl show
bridge name    bridge id        STP enabled    interfaces
docker0        8000.02428cec69f4    no        veth5b3bf12

docker 退出容器模式为crtl+p+q,如果用exit,将关闭容器,即不在后台运行

[root@server docker]# docker run -it ubuntu
root@5aace2fb8630:/# exit
exit
[root@server docker]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
910dbd82e909        ubuntu              "/bin/bash"         8 minutes ago       Up 8 minutes                            adoring_lovelace
[root@server docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
5aace2fb8630        ubuntu              "/bin/bash"         18 seconds ago      Exited (0) 12 seconds ago                       stoic_saha
910dbd82e909        ubuntu              "/bin/bash"         8 minutes ago       Up 8 minutes

删除容器

[root@server docker]# docker rm 5a
5a
[root@server docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
910dbd82e909        ubuntu              "/bin/bash"         11 minutes ago      Up 10 minutes                           adoring_lovelace

连接一个容器,查看桥接ip地址,ping

root@c4d727868a0b:/# [root@server docker]# 
[root@server docker]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c4d727868a0b        ubuntu              "/bin/bash"         26 seconds ago      Up 22 seconds                           vm1
910dbd82e909        ubuntu              "/bin/bash"         12 minutes ago      Up 12 minutes                           adoring_lovelace
[root@server docker]# docker attach vm1

root@c4d727868a0b:/# ip addr show
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
   link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
   inet 172.17.0.3/16 scope global eth0
root@c4d727868a0b:/# ping 172.17.0.1
PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data.
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.199 ms

在真机可以查看docker桥接网段

[root@server ~]# ip addr
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
   link/ether 02:42:8c:ec:69:f4 brd ff:ff:ff:ff:ff:ff
   inet 172.17.0.1/16 scope global docker0

容器的停止和删除

[root@server docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c4d727868a0b        ubuntu              "/bin/bash"         7 minutes ago       Up 7 minutes                            vm1
910dbd82e909        ubuntu              "/bin/bash"         19 minutes ago      Up 19 minutes                           adoring_lovelace
[root@server docker]# docker stop 91
91
[root@server docker]# docker rm 91
91
[root@server docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c4d727868a0b        ubuntu              "/bin/bash"         7 minutes ago       Up 7 minutes                            vm1
[root@server docker]#

创建容器为后台关闭模式

[root@server docker]# docker run -d ubuntu
de3211baa651006b40a48d6765e1c7428779e1a5b3806b379f15700971071046
[root@server docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
de3211baa651        ubuntu              "/bin/bash"         17 seconds ago      Exited (0) 12 seconds ago                       determined_brown

停止所有容器,删除所有容器

[root@server ~]# docker stop `docker ps -aq`
fd799738de8f
c7b5d3645fc6
736d7669bb13
[root@server ~]# docker rm `docker ps -aq`
fd799738de8f
c7b5d3645fc6
736d7669bb13


删除镜像

[root@server ~]# docker rmi ubuntu
Untagged: ubuntu:latest
Deleted: sha256:07c86167cdc4264926fa5d2894e34a339ad27f730e8cc81a16cd21b7479e8eac
Deleted: sha256:0aaccda2aadfc70ab2248437568fd17f4e8860cf612cc4b7e154b97222dccf91
Deleted: sha256:220d2912ab1dbae4cb19007b1181991c51d7e9e71d83894f0ace0528df383eb3
Deleted: sha256:9dcfe19e941956c63860afee1bec2e2318f6fbd336bc523094ed609a9c437a01
Deleted: sha256:cc77a2e3d72c7dcb24ed23a23479e3b90ad64e3a91b2f0ce2320580979076d44



docker cp 本地文件到容器

[root@server docker]# docker cp /etc/passwd vm2:/mnt/
[root@server docker]# docker attach vm2
root@2999982a1428:/# cd /mnt/
root@2999982a1428:/mnt# ls
passwd

Inspect changes on a container‘s filesystem

[root@server mnt]# docker diff vm2
C /mnt
A /mnt/passwd
C /root
A /root/.bash_history

Show the history of an image

[root@server mnt]# docker history ubuntu
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
07c86167cdc4        14 months ago       /bin/sh -c #(nop) CMD ["/bin/bash"]             0 B                
220d2912ab1d        14 months ago       /bin/sh -c sed -i ‘s/^#\s*\(deb.*universe\)$/   1.895 kB            
cc77a2e3d72c        14 months ago       /bin/sh -c echo ‘#!/bin/sh‘ > /usr/sbin/polic   194.5 kB            
c8fa7cdceff3        14 months ago       /bin/sh -c #(nop) ADD file:b9504126dc55908988   187.7 MB


nginx

创建容器端口映射:直接访问本地的端口,即可实现对容器的访问 注意:映射端口不能和本地冲突!!!


[root@server mnt]# docker run -d --name web2 -p 8000:80 nginx
f942d148a0b48148eaf2dd4f0b46f872587d4435c16ae45fbb0914ae2768c959
[root@server mnt]# netstat -antlp |grep 8000
tcp6       0      0 :::8000                 :::*                    LISTEN      3166/docker-proxy
[kiosk@foundation88 Desktop]$ curl 172.25.88.15:8000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
   body {
       width: 35em;
       margin: 0 auto;
       font-family: Tahoma, Verdana, Arial, sans-serif;
[root@server mnt]# cat /proc/partitions 
major minor  #blocks  name

  8        0    8388608 sda
  8        1     512000 sda1
  8        2    7875584 sda2
253        0    6991872 dm-0
253        1     839680 dm-1
  7        0  104857600 loop0
  7        1    2097152 loop1
253        2  104857600 dm-2
253        3   10485760 dm-3
253        4   10485760 dm-4


本文出自 “12049878” 博客,谢绝转载!

虚拟化之容器docker基本操作