1 启动已经停止的容器
lee@lee-KVM:~$ sudo docker start bob_the_container
也可以用容器ID 来指定容器 也可以用restart 来重启容器
( docker create 命令创建一个容器 但是却不运行它)
2 附着到容器中
sudo docker attach bob_the_container
也可以使用容器Id
如果退出容器的shell 则 容器会再次停止运行
3 创建长期运行的容器
lee@lee-KVM:~$ sudo docker run –name daemon_dave -d ubuntu /bin/sh -c “while true;do echo hello word;sleep 1 ;done”
-d 则会在后台运行容器
运行了一个脚本 会一直不停的输出hello world
4 抓取容器的日志
lee@lee-KVM:~$ sudo docker logs [-f] daemon_dave
-f 会监控日志
–tail 10 会获取最后十条的信息
-t 会为每条日志加上时间戳
5 日志驱动
sudo docker run –log-driver=”syslog” –name daemon_dwayne -d ubuntu /bin/sh -c “while true;do echo hello word; sleep 1; done”
将日志输入到Syslog中 导致了docker logs 命令不能输出任何东西
Syslog 的信息去 /var/log/messages 文件中查看
最后一个可用的选项是none 将会禁用所有容器中的日志
6 查看容器内的进程
lee@lee-KVM:~$ sudo docker top daemon_dave
7 Docker 中的统计信息
lee@lee-KVM:~$ sudo docker stats daemon_dave daemon_dwayne
查看容器列表 CPU 内存 网络I/O 以及存储I/O的性能和指标
8 在容器内部运行进程
lee@lee-KVM:~$ sudo docker exec -d daemon_dave touch /etc/new_config_file
-d说明是一个后台进程
-u可以为新启用的进程指定一个用户属主
lee@lee-KVM:~$ sudo docker exec -t -i daemon_dave /bin/bash
-t -i 创建一个tty并捕捉STDIN
会在daemon_dave 容器内部创建一个bash 会话
9 停止守护式容器
lee@lee-KVM:~$ sudo docker stop daemon_dave
向容器发送SIGTERM 信号 如果想快速的停止容器 则用docker kill 命令向容器发送SIGKILL 信号
lee@lee-KVM:~$ sudo docker ps -n 3
查看最后x个容器不论这些容器是运行还是停止
10 自动重启容器
lee@lee-KVM:~$ sudo docker run –restart=always –name daemon_dave1 -d ubuntu /bin/sh -c “while true;do echo hello word ;sleep 1 ;done”
always 则是无论容器的退出代码是什么,docker都会自动的重启该容器
on-failure 只要容器的退出代码非0 则自动重启 另外 还可以接受可选的重启次数参数 on-failure:5
11 获得更多的容器信息
lee@lee-KVM:~$ sudo docker inspect daemon_dave
可以使用–format 的标志来查看选定的结果
lee@lee-KVM:~$ sudo docker inspect –format=’{{.State.Running}}’ daemon_dave
这个标志支持完整的Go语言模块
所有容器都放在/var/lib/docker/containers中
12 删除容器
lee@lee-KVM:~$ sudo docker rm -f daemon_dave1
-f 删除正在运行的容器
lee@lee-KVM:~$ sudo docker sudo docker ps -a -q
-a 是返回所有的容器 -q是只返回容器的ID而不会返回其他信息
13 查看镜像
lee@lee-KVM:~$ sudo docker images
本地镜像都保存在宿主的/var/lib/docker中的根据所采用的存储驱动保存在不同的目录下面
14 拉取镜像
lee@lee-KVM:/var/lib/docker$ sudo docker pull ubuntu:14.04
lee@lee-KVM:~$ sudo docker run -t -i –name new_container ubuntu:14.04 /bin/bash
如果没有指定具体的镜像标签,则会自动下载latest标签的镜像,
15 查找镜像
lee@lee-KVM:~$ sudo docker search puppet
仓库名 镜像描述 用户评价 (star) 是否是官方(Official) 自动构建 表示这个是由Docker Hub 自动构建的
1 使用Dockerfile
创建一个示例仓库
mkdir static_web
cd static_web
touch Dockerfile
创建一个Dockerfile文件
FROM ubuntu:14.04
MAINTAINER James Turnbull “[email protected]”
RUN apt-get update && apt-get install -y nginx
RUN echo ‘hi i am in your container’ \ > /usr/share/nginx/index.html
EXPOSE 80
-FROM 是一个已经存在的镜像 也叫基础镜像
-MAINTAINER 告诉Docker这个镜像的作者是谁以及联系方式
-RUN 在镜像中执行指定命令
也可以使用exec格式的RUN指令格式 RUN ["apt-get","install","-y","nginx"]
-EXPOSE 告诉容器内的应用程序将会使用容器的制定端口,需要用户在docker run 中指定打开哪些端口
也可以用来帮帮助将多个容器链接,可以使用 docker run –expose 来指定对外部公开的端口
执行上下文构建
cd static_web
sudo docker build -t ="lee/static_web" .
镜像名叫 lee/static_web 也可以 sudo docker build -t ="lee/static_web:v1" . v1就是标签 如果没有设置就会默认为laster标签
最后的. 则是告诉Docker到本地去找Dockerfile文件也可以指定一个Git仓库去Dockerfile的位置
sudo docker build -t ="lee/static_web:v1" \
[email protected]:lee/docker-static_web
假设这个根目录下有Dockerfile文件
也可以用-f 来指定一个区别于标准Dockerfile构建源位置 这个位置的文件不必再命名为Dockerfile但是必须要位于构建上下文中
2 忽略缓存构建
sudo docker build –no-cache -t="lee/static_web" .
3 从新的镜像启动容器
sudo docker run -d -p 80 –name static_web lee/static_web nginx -g “daemon off;”
-p 将容器的80端口绑定到宿主的端口上
4 Dockerfile命令
1 CMD
用于指定一个容器启动时要运行的命令 RUN 是镜像被构建的时候 而CMD是容器启动要运行是的命令
CMD ["/bin/bash","-l"] 将-l标志传送给了/bin/bash 推荐使用数组结构中
docker run 中指定了要运行的命令,那么会覆盖掉CMD命令
CMD命令只会执行最后一条,多余无效
2 ENTRYPOINT
提供的命令则不容易在启动容器时被覆盖 docker run中的参数会被当作参数再次传给ENTRYPOINT中指定的命令
ENTRYPOINT["/usr/sbin/nginx","-g","daemon off;"]
如果确实需要,也可以通过–entrypoint 标志覆盖ENTRYPOINT指令
3 WORKDIR
在容器内部设置一个工作目录 ENTRYPOINT 和/ 或者CMD都会在这个目录下执行
可以设置后续一系列指定的工作目录,也可以为最终的容器设置工作目录
也可以在docker run 中用-w 标志在运行中覆盖工作目录
4 ENV
设置环境变量 可以在后续指令中使用
ENV RVM_PATH /home/rvm/
也可以为多个环境赋值
ENV RVM_PATH=/home/rvm RVM_ARCHFLAGS="-arch i386"
也可以在其他指定中使用这些环境变量
ENV TARGET_DIR /opt/app
WORKDIR $TARGET_DIR
可以在docker run 命令中使用-e 来传递环境变量 这些变量只会在运行时有效
5 USER
指定镜像以什么样的用户去执行
USER user:group
6 VOLUME
向基于镜像的创建的容器添加卷,一个卷可以存在在一个或者多个容器内的特定目录,可以绕过联合文件系统,可以提供共享数据或是对数据进行持久化功能
{ 卷可以在容器中共享和重用 ;一个容器可以不是必须和其他容器共享卷 ;对卷的修改是立即生效的; 对卷的修改不会对更新镜像产生影响 ;卷会一直存在直到没有任何容器再使用它}
VOLUME ["/opt/project"] #这是为基于这个镜像创建的任何一个容器创建一个名为/opt/project的挂载点
docker cp 允许从容器复制文件和复制文件到容器中
7 ADD
将构建环境下的文件和目录复制到镜像中去
ADD software.lic /opt/application/software.lic
会将构建目录下的software.lic 文件复制到镜像的/opt/application/software.lic 指向源文件的位置参数可以是URL 也可以是上下文中的文件名或者目录名 以