[云计算] docker 手册2

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014679456/article/details/79884807

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 也可以是上下文中的文件名或者目录名 以

猜你喜欢

转载自blog.csdn.net/u014679456/article/details/79884807