docker入门实践01
Docker 实践入门#
本文的所有操作的环境都是在一台虚拟机上操作完成的。
$ cat /etc/issue
Ubuntu 14.04.1 LTS \n \l
$ uname -r
3.13.0-32-generic
安装Docker##
必要条件###
- 内核版本要至少为3.8
- 64位的CPU
- 内核必须支持一种适合的存储驱动
- Device Manager (The Device Manager is a Control Panel applet in Microsoft Windows operating systems. It allows users to view and control the hardware attached to the computer。)
- AUFS(AUFS implements a union mount for Linux file systems)
- VFS (A virtual file system (VFS) is an abstraction layer on top of a more concrete file system. The purpose of a VFS is to allow client applications to access different types of concrete file systems in a uniform way)
- btrfs (btrfs is intended to address the lack of pooling, snapshots, checksums, and integral multi-device spanning in Linux file systems.)
- 默认的存储驱动通常是 Device Mapper
- 内核必须支持并且开启 cgroup 和 namespace。
检查前提条件###
(1) 内核
$ uname -a
Linux jackson-virtual-machine 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
可以看到本机所装的内核版本为3.13.0-32-generic
,可以满足docker的安装条件,当然如果不满足内核条件,升级内核也是很容易的。
$ sudo apt-get update # 这一步更新包列表
$ sudo apt-get upgrade # 安装所有更新
如果不想更新那么多,可以
$ sudo apt-get install XXXX #安装相应的内核包
最后需要更新 Grub 启动加载器来加载新的内核
$ sudo update-grub
重启
$ sudo reboot
(2) 检查 Device Mapper
Device Mapper在2.6.9内核中就引入了。查看方法有两种:
$ ls -l /sys/class/misc/device-mapper
lrwxrwxrwx 1 root root 0 1月 25 21:30 /sys/class/misc/device-mapper -> ../../devices/virtual/misc/device-mapper
$ sudo grep device-mapper /proc/devices # 如果没有,可以通过 sudo modprobe dm_mod
252 device-mapper
(3) 检查cgroup和namespace
这两个从2.6版本就开始集成在了linux内核中。我们经常会碰到 docker,lxc,cgroup,namespace几个在一起,这几个具体什么关系呢。
- docker(go 语言实现)是 lxc 的管理器
- lxc 是 cgroup的管理工具
- cgroup 是namespace 的用户空间的接口
安装docker###
使用docker团队的DEB软件仓库来安装docker。所以对于ubuntu需要添加APT仓库。
$ sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
ps: 新装的ubuntu系统的默认源都是使用/etc/apt/sources.list
这个文件,而这个文件里默认的都是国外的网站,所有有时候会遇到下载软件很慢的情况,这时候只要更开一下这个文件,将文件里面的源换成国内的网站,比如163等。
接下来添加docker仓库的GPG秘钥。
$ curl -s https://get.docker.io/gpg | sudo apt-key add -
在ubunt系统中,用gpg可以实现加密和解密。在这里,我们添加新的源,需要下载一个加密文件,否则无法下载。
apt-key add filename
Add a new key to the list of trusted keys. The key is read from
filename, or standard input if filename is -.
apt-key是Debian软件包的安全管理工具。每个发布的deb包,都是通过密钥认证的,apt-key用来管理密钥。
$ sudo apt-get update
$ sudo apt-get install lxc-docker
完成后
$ sudo docker # 会出现help
docker使用##
docker的常用基本命令###
(1) 看docker程序是否在运行
$ sudo status docker
docker start/running, process 3004
$ sudo stop docker
docker stop/waiting
$ sudo start docker
docker start/running, process 3068
或者
$ sudo service docker status
docker start/running, process 3068
$ sudo service docker stop
docker stop/waiting
$ sudo service docker start
docker start/running, process 3145
(2)看docker的基本信息(该命令会返回所有的容器,以及docker使用的执行驱动,存储驱动,docker的基本配置)
$ sudo docker info
Containers: 1
Images: 6
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Dirs: 8
Execution Driver: native-0.2
Kernel Version: 3.13.0-32-generic
Operating System: Ubuntu 14.04.1 LTS
CPUs: 4
Total Memory: 3.857 GiB
Name: jackson-virtual-machine
ID: 6YTW:46CV:LZM4:HKED:6ZML:PE5V:4EJK:VG2I:I5RS:BETR:FYDN:Y6SW
Username: jacksonzhangkun
Registry: [https://index.docker.io/v1/]
WARNING: No swap limit support
(3)查看机器已有的镜像
$ sudo docker images
REPOSITORY TAG IMAGE IDCREATED VIRTUAL SIZE
busybox latest 234ee811cd806 weeks ago 2.434 MB
新装的docker上面是什么都没有的。
(4)搜索镜像
$ sudo docker search busybox
会有很多list出来,OFFICIAL字段下有[OK]
说明它是官方镜像。
(5)下载镜像
$ sudo docker pull busybox
busybox:latest: The image you are pulling has been verified
511136ea3c5a: Already exists
df7546f9f060: Already exists
ea13149945cb: Already exists
Status: Image is up to date for busybox:latest
这个镜像我已经下载过了,所以显示已经存在。
(6)运行一个镜像
$ sudo docker run -t -i busybox
/ # ls
bin etc lib linuxrc mnt proc run sys usr
dev home lib64 media opt root sbin tmp var
/ #
其中-i
标志保证容器的STDIN是开的,-t
表示Docker要为新创建的容器分配一个伪tty终端。这样,新创建的容器,才能提供一个交互式的shell。
ps: busybox是一个集成了一百多个最常用linux命令和工具的软件工具箱。非常精简,在(3)中,我们可以看到,只有2.434 MB。
(7)看运行中的docker容器
$ sudo docker ps
如果要看所有当前容器的列表,如要加参数 -a
$ sudo docker ps -a
如果要看最后一次运行的容器,可以
$ sudo docker ps -l
(8)启动容器
$ sudo docker start (NAMES/CONTAINER ID)
(9) 深入容器,可以通过docker inspect,获取更多的容器信息
$ sudo docker inspect (NAMES/CONTAINER ID)
(10) 删除容器
$ sudo docker rm 3b39cfcdee2e
如果要全部删除,可以
$ sudo docker rm `sudo docker ps -a -q`
(11) 删除镜像
$ sudo docker rmi <IMAGE ID>
创建一个自定义的docker容器###
首先我现在这边有个从官方下下来的一个busybox镜像,并且我运行了一个基于该镜像的一个容器。容器ID为:
$ sudo docker ps -q -l
1c6364f2f8b4
$ sudo docker start 1c6364f2f8b4
1c6364f2f8b4
$ sudo docker attach 1c6364f2f8b4
/ # hello
/bin/sh: hello: not found
/ #
进入之后发现没有hello
这个命令,也是busybox这个镜像里面没有这个命令。下面我们自定义一个一个简单的hello
命令。
/ # vi hello
/ # sh hello
hello world
/ # chmod +x hello
/ # mv hello /bin/
/ # hello
hello world
/ # exit
$ sudo docker commit 1c6364f2f8b4 busybox
082a195052cf6fb75f8cf86f467562ef94bedbab365591870fbfe127dfe91d85
docker commit提交的只是创建容器的镜像和容器当前状态之间的差异部分。提高后我们在基于新的busybox镜像创建容器。可以看到创建的时间变成了两分钟前。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
busybox latest 082a195052cf 2 minutes ago 2.434 MB
$ sudo docker run -ti busybox
/ # hello
hello world
上面演示了简单的怎么自定义docker镜像。