安装docker
centos6*
[root@localhost /]# yum -y install docker-io
或
curl -sSL -O https://get.docker.com/builds/Linux/x86_64/docker-1.9.1
centos7*
/etc/yum.repos.d/docker.repo
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=
https://yum.dockerproject.org/gpg
yum install docker-engine
更改配置文件
[root@localhost /]# vi /etc/sysconfig/docker
other-args列更改为:other_args="--selinux-enabled"
启动docker服务
[root@localhost /]# service docker start
Starting cgconfig service: [ OK ]
Starting docker: [ OK ]
加入开机启动
[root@localhost /]# chkconfig docker on
基本信息查看
docker version:
查看docker的版本号,包括客户端、服务端、依赖的Go等
docker info :
查看系统(docker)层面信息,包括管理的images, containers数等
搜索镜像
docker search :在docker index中搜索image
[root@localhost /]# docker search ubuntu12.10
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mirolin/ubuntu12.10 0
marcgibbons/ubuntu12.10 0
mirolin/ubuntu12.10_redis 0
chug/ubuntu12.10x32 Ubuntu Quantal Quetzal 12.10 32bit base i... 0
chug/ubuntu12.10x64 Ubuntu Quantal Quetzal 12.10 64bit base i... 0
下载镜像
docker pull :从docker registry server 中下拉image
[root@localhost /]# docker pull chug/ubuntu12.10x64
查看镜像
docker images: 列出images
docker images -a :列出所有的images(包含历史)
docker images --tree :显示镜像的所有层(layer)
docker rmi : 删除一个或多个image
使用镜像创建容器
[root@localhost /]# docker run chug/ubuntu12.10x64 /bin/echo hello world
hello world
更新镜像
更新镜像之前,我们需要使用镜像来创建一个容器。
runoob@runoob
:~
$ docker run
-
t
-
i ubuntu
:
15.10
/
bin
/
bashroot@e218edb10161
:/#
在运行的容器内使用 apt-get update 命令进行更新。
在完成操作之后,输入 exit命令来退出这个容器。
此时ID为e218edb10161的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器副本。
runoob@runoob
:~
$ docker commit
-
m
=
"has update"
-
a
=
"runoob"
e218edb10161 runoob
/
ubuntu
:
v2sha256
:
70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8
各个参数说明:
- -m:提交的描述信息
- -a:指定镜像作者
- e218edb10161:容器ID
- runoob/ubuntu:v2:指定要创建的目标镜像名
设置镜像标签
我们可以使用 docker tag 命令,为镜像添加一个新的标签。
runoob@runoob
:~
$ docker tag
860c279d2fec
runoob
/
centos
:
dev
docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。
交互式运行
[root@localhost /]# docker run -i -t chug/ubuntu12.10x64 /bin/bash
root@2161509ff65e:/#
再次启动容器
docker start/stop/restart :开启/停止/重启container
docker start [container_id] :再次运行某个container (包括历史container)
docker attach [container_id] :连接一个正在运行的container实例(即实例必须为start状态,可以多个窗口同时attach 一个container实例)
但是它有一个缺点,只要这个连接终止,或者使用了exit命令,容器就会退出后台运行
使用docker exec命令
这个命令使用exit命令后,不会退出后台,一般使用这个命令,使用方法如下
docker exec -it db3 /bin/bash 或者 docker exec -it d48b21a7e439 /bin/bash
解决:
其实官方已经早就不推荐使用lxc了,所以只要去掉启动参数设置的lxc选项即可
docker start -i :启动一个container并进入交互模式(相当于先start,在attach)
docker run -i -t /bin/bash :使用image创建container并进入交互模式, login shell是/bin/bash
docker run -i -t -p :映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port 映射到一个动态端口。
注:使用start是启动已经创建过得container,使用run则通过image开启一个新的container。
docker端口映射
docker指令:
docker run -p ip:hostPort:containerPort redis
- -P :是容器内部端口随机映射到主机的高端口。
- -p : 是容器内部端口绑定到指定的主机端口
IP表示主机的IP地址。
hostPort表示宿主机的端口。
containerPort表示虚拟机的端口
查看WEB应用程序日志
docker logs [ID或者名字] 可以查看容器内部的标准输出。
[root@docker ~]# docker logs -f 36fb5b62941c
-f:
让
dokcer logs
像使用
tail -f
一样来输出容器内部的标准输出。
Docker容器和本机之间的文件传输
主机和容器之间传输文件的话需要用到容器的ID全称。
本机和容器之间的文件传输
:
docker cp 本地文件路径 ID全称:容器路径
容器传输文件到本地
:
docker cp ID全称:容器文件路径 本地路径
-v 挂载目录 /test:/soft 前面的目录是宿主机目录,后面的目录是容器内目录。
停止WEB应用容器
runoob@runoob
:~
$ docker stop
删除容器
docker rm :删除一个或多个container
docker rm `docker ps -a -q` :删除所有的container
docker ps -a -q | xargs docker rm :同上, 删除所有的container
删除镜像
docker rmi 镜像ID
删除镜像前要删除该镜像运行的容器。
查看容器内运行的程序
docker top <
container>
[root@docker ~]# docker top tomcat_1
容器自动重启
--restart=always
意味着无论容器因何种原因退出(包括正常退出),就立即重启。该参数的形式还可以是
--restart=on-failure:3
,意思是如果启动进程退出代码非0,则重启容器,最多重启3次。
pause/unpause 容器
暂时让容器暂停工作一段时间,处于暂停状态的容器不会占用 CPU 资源,直到通过
docker unpause
恢复运行。
内 存限额
-m
或
--memory
:设置内存的使用限额,例如 100M, 2G。
--memory-swap
:设置
内存+swap
的使用限额。
如果在启动容器时只指定
-m
而不指定
--memory-swap
,那么
--memory-swap
默认为
-m
的两倍
容器执行压力测试
--vm 1 --vm-bytes 280M
--vm 1
:启动 1 个内存工作线程。
--vm-bytes 280M
:每个线程分配 280M 内存。
持久化容器与镜像
6.1 通过容器生成新的镜像
运行中的镜像称为容器。你可以修改容器(比如删除一个文件),但这些修改不会影响到镜像。不过,你使用docker commit 命令可以把一个正在运行的容器变成一个新的镜像。
docker commit [repo:tag] 将一个container固化为一个新的image,后面的repo:tag可选。