docker初体验和使用笔记

| 2015年1月20日

在ubuntu13.10上体验docker

首先要检测以下你的内核版本

sudo uname -a
Linux helight-Xu 3.11.0-26-generic #45-Ubuntu SMP Tue Jul 15 04:02:06 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

第一次添加Docker的repository到你的本地秘钥库

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

将Docker添加到你的apt软件安装源中,然后update和install lxc-docker,期间会遇到一个警告,说这个包不可靠,你只需要回复yes然后继续安装就可以了!

sudo sh -c "echo deb http://get.docker.io/ubuntu docker main\
>/etc/apt/sources.list.d/docker.list"
sudo apt-get update
sudo apt-get install lxc-docker

现在你就可以下载安装ubuntu的镜像封装到一个沙箱中了,这里下载的是一个基本镜像,你可以基于这个基础镜像再制作其它的镜像。

sudo docker pull ubuntu  #pull命令需要到国外的镜像仓库,拉取镜像
helight:examples$ sudo docker pull ubuntu
ubuntu:latest: The image you are pulling has been verified
53f858aaaf03: Downloading [=========> ] 36.34 MB/197.2 MB 2m41s
837339b91538: Download complete 
615c102e2290: Download complete 
b39b81afc8ca: Download complete 
511136ea3c5a: Already exists 

运行hello world,这是一次性运行,运行完成之后docker既可以退出。

helight:examples$ sudo docker run ubuntu /bin/echo hello world
[sudo] password for helight: 
hello world
helight:examples$ 

直接启动成为一个系统

sudo docker run -i -t ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
ubuntu:latest: The image you are pulling has been verified
511136ea3c5a: Pull complete 
3b363fd9d7da: Pull complete 
607c5d1cca71: Pull complete 
f62feddc05dc: Pull complete 
8eaa4ff06b53: Pull complete 
Status: Downloaded newer image for ubuntu:latest
root@117bf19ae970:/# 
root@117bf19ae970:/# ls 

docker常用命令

5.1、docker三种命令运行模式 docker有三种命令运行的方式:短暂方式、交互方式、daemon方式。

a、短暂方式:就是刚刚的那个”hello world”,命令执行完后,container就终止了,不过并没有消失,可以用 sudo docker ps -a 看一下所有的container,第一个就是刚刚执行过的container,可以再次执行一遍:

helight:examples$ sudo docker start container_id

不过这次看不到”hello world”了,只能看到ID,用logs命令才能看得到:

helight:examples$ sudo docker logs container_id

可以看到两个”hello world”,因为这个container运行了两次。

b、交互方式

helight:examples$ sudo docker run -i -t image_name /bin/bash #image_name为docker镜像名称

c、daemon方式 即让软件作为长时间服务运行,这就是SAAS啊! 例如,一个无限循环打印的脚本(替换为memcached、apache等,操作方法仍然不变!):

helight:examples$ CONTAINER_ID=$(sudo docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done")

在container外面查看它的输出

helight:examples$ sudo docker logs $CONTAINER_ID

或者连接上容器实时查看

helight:examples$ sudo docker attach $CONTAINER_ID

终止容器

helight:examples$  sudo docker stop $CONTAINER_ID
helight:examples$  sudo docker ps #看一下,已经没了
## docker ps命令
helight:examples$ sudo docker ps #列出当前所有正在运行的container
helight:examples$ sudo docker ps -l #列出最近一次启动的,且正在运行的container
helight:examples$ sudo docker ps -a #列出所有的container

注意: a、其他用法请参考 sudo docker ps -h b、还有一种方式可以让程序在daemon模式下运行,就是在Dockerfile里设置USER为daemon

helight:examples$ sudo docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aa27430aeb92 8eaa4ff06b53 "/bin/echo hello wor 9 minutes ago Exited (0) 2 minutes ago sharp_hopper 
helight:examples$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aa27430aeb92 8eaa4ff06b53 "/bin/echo hello wor 9 minutes ago Exited (0) 2 minutes ago sharp_hopper 
117bf19ae970 8eaa4ff06b53 "/bin/bash" 3 days ago Exited (1) 10 minutes ago ecstatic_rosalind 
helight:examples$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
helight:examples$

docker export命令

helight:examples$ </code>container_id=`docker run -d <image_name> ls`
helight:examples$</code> docker export $container_id > image.tgz

docker import命令

helight:examples$</code> cat image.tgz | sudo docker import - simple_dev #simple_dev为自定义的镜像名称

docker port命令

helight:examples$</code> docker run -p 80:8080 <image> <cmd> #映射容器的8080端口到宿主机的80端口

删除容器

删除所有容器

helight:examples$ </code>sudo docker rm `sudo docker ps -a -q`

删除具体某个容器

helight:examples$ sudo docker rm $CONTAINER_ID

docker命令快速参考

helight:examples$</code> sudo docker images #查看本地镜像
helight:examples$</code> sudo docker attach $CONTAINER_ID #启动一个已存在的docker实例
helight:examples$</code> sudo docker stop $CONTAINER_ID #停止docker实例
helight:examples$</code> sudo docker logs $CONTAINER_ID #查看docker实例运行日志,确保正常运行
helight:examples$</code> sudo docker inspect $CONTAINER_ID #查看container的实例属性,比如ip等等

通过docker run命令的-v/–volume参数 和主机

假设我们需要将本机的/data 目录分享到Docker的/mnt 目录下, 我们可以通过这样的命令:

$ docker run -v /data:/mnt -i -t ubuntu bash
root@b1ddd72e7f9f:/# ls /mnt
21.rar doc lost+found sysbak zhwen0.png
eclipse_code netpool tcode zookeeper

root@b1ddd72e7f9f:/# </code>

我想使用Debian容器,就要使用代码:

docker run -i -t debian /bin/bash

如果你想有某个发行版,那么就要使用这个命令:

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

它会创建ubuntu12.04容器。

看完本文有收获?请分享给更多人

关注「黑光技术」,关注大数据+微服务