docker命令

  1. 官方文档:http://docs.master.dockerproject.org/engine/installation/linux/ubuntulinux/  
  2.   
  3. 1.安装Docker  
  4.   1.准备工作:  
  5.       1.检查Linux内核,版本必须在3.8以上  
  6.          $ uname -r  
  7.            4.4.0-31-generic  
  8.       2.更新apt,并安装支持https的证书  
  9.           $ sudo apt-get update  
  10.           $ sudo apt-get install apt-transport-https ca-certificates  
  11.          注意:  
  12.           1.遇到如下异常:  
  13.             E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)  
  14.             E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?  
  15.              解决:  
  16.                  ps -aux|grep apt    
  17.                 kill掉占用apt-get的进程  
  18.       3.添加一个新的 GPG key  
  19.           sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D  
  20.             
  21.       4.创建 /etc/apt/sources.list.d/docker.list文件,清空里面内容,并添加以下内容:  
  22.          deb https://apt.dockerproject.org/repo ubuntu-xenial main  
  23.   
  24.       5.更新 apt-get 的索引  
  25.          sudo apt-get update  
  26.          
  27.       6.清除旧的分支(如果之前存在)  
  28.          sudo apt-get purge lxc-docker  
  29.         
  30.       7.设置APT支持docker更新  
  31.          apt-cache policy docker-engine  
  32.   
  33.    2.安装Docker  
  34.           1.管理员身份登录  
  35.                  sudo su  
  36.           2.更新APT包的索引  
  37.                  apt-get update  
  38.           3.安装Docker   
  39.                  sudo apt-get install docker-engine  
  40.           4.开启Docker后台进程  
  41.                  sudo service docker start  
  42.           5.验证Docker是否正确安装   
  43.                  sudo docker run hello-world  
  44.   
  45.   
  46.   
  47.   
  48.   
  49. 2.Docker基础  
  50.     1.概念  
  51.           镜像:类似虚拟机快照,但非常轻量,镜像有唯一ID 及一个供人阅读的名字和标签对,eg:ubuntu:latest,django:1.7  
  52.               创建Docker镜像有几种方式:多数是在现有镜像基础上创建新镜像,几乎所有需要的东西都有公共镜像  
  53.               创建镜像:可以拿一个镜像,对它进行修改来创建它的子镜像  
  54.                        2种方式:  
  55.                               1.在一个文件种指定一个基础镜像及需要完成的修改  
  56.                               2.通过"运行"一个镜像,对其进行修改并提交    
  57.             
  58.   
  59.           容器:可以从镜像中创建容器,等同于从快照种创建虚拟机,与虚拟机一样,容器是隔离的,拥有一个唯一ID和名字,Docker允许公开容器的特定端口,以提供对外服务  
  60.                 推荐一个容器一个进程的方式,容器是设计来运行一个应用的  
  61.         
  62.   
  63.   
  64. 3.Docker常用命令  
  65.      1.docker pull ubuntu:latest    从公共registry下载镜像  
  66.      2.docker images                列出镜像  
  67.      3.docker run --rm -ti buntu /bin/bash  从指定镜像上创建一个容器  
  68.            参数:  
  69.                   --rm       告诉Docker一旦运行的进程退出就删除容器  
  70.                   --ti       告诉Docker分配一个伪终端并进入交互模式,这将进入到容器内,对于快速原型开发或尝试很有用,但不要在生产容器中打开这些标志  
  71.                   --ubuntu   容器所在的镜像  
  72.                   --/bin/bash    要运行的命令,因为我们以交互模式启动,它将显示一个容器的提示符  
  73.      4.常用命令:  
  74.             1.查看docker信息(version、info)  
  75.                    docker version    #docker 版本  
  76.                    docker info       #docker 系统信息  
  77.             2.对镜像image操作(search、pull、images、rmi、history)  
  78.                    docker search image_name   #检索image  
  79.                    docker pull image_name     #下载image  
  80.                    docker images -a           #列出所有image    
  81.                    docker rmi image_name      #删除一或多个镜像 -f:强制删除  
  82.                    docker history image_name  #显示一个镜像的历史   
  83.             3.启动容器(run)  
  84.                    #在容器中运行 echo 命令,输出 hello world  
  85.                    docker run image_name echo "hello world"  
  86.                    #交互式进入容器中  
  87.                    docker run -i -t image_name /bin/bash  
  88.                    #在容器中安装新程序  
  89.                    docker run image_name apt-get install y app_name  
  90.             4.查看容器(ps)   
  91.                    # 列出当前所有正在运行的container    
  92.            $docker ps    
  93.            # 列出所有的container    
  94.            $docker ps -a    
  95.            # 列出最近一次启动的container    
  96.            $docker ps -l    
  97.             5.保存对容器修改(commit)  
  98.                    # 保存对容器的修改; -a, --author="" Author; -m, --message="" Commit message    
  99.                    $docker commit ID new_image_name   
  100.                    分析:    
  101.                        image相当于类,Container相当于实例,不过可以动态给实例安装新软件,然后把这个container用commit命令固化成一个image  
  102.                     
  103.                      
  104.   
  105.   
  106.   
  107. 4.配置Docker拉取加速  daoCloud注册  
  108.      1.查看我的加速地址:https://www.daocloud.io/mirror  
  109.        得到加速地址: http://d1ece5f6.m.daocloud.io  
  110.      2.配置 /etc/default/docker,在DOCKER_OPTS=中添加:  
  111.        https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://xxx.m.daocloud.io  
  112.        说明:  
  113.             这里xxx表示我的加速地址  
  114.        完整配置:  
  115.                1.编辑docker配置  
  116.                # vi /etc/default/docker  
  117.                最后一行添加:  
  118.                DOCKER_OPTS="--registry-mirror=https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://d1ece5f6.m.daocloud.io"  
  119.                  
  120.                2.重启docker服务  
  121.                        # service docker restart  
  122.   
  123.   
  124. 5.制作Docker镜像  
  125.      2种方式  
  126.          1.使用docker commit 命令创建镜像  
  127.                 1.通过docker run命令启动容器  
  128.         2.修改docker镜像内容  
  129.         3.docker commit提交修改的镜像  
  130.         4.docker run新的镜像  
  131.   
  132.          2.使用Dockerfile创建镜像  
  133.                 1.使用 docker commit 来扩展一个镜像比较简单,但是不方便在一个团队中分享。  
  134.                   我们可以使用 docker build 来创建一个新的镜像。为此,首先需要创建一个 Dockerfile,  
  135.                   包含一些如何创建镜像的指令  
  136.                 2.Dockerfile语法:  
  137.                   #用来注释  
  138.                   FROM指令告诉Docker使用哪个镜像作为基础, FROM <images>:<tag>  
  139.                   接着是维护者信息,MAINTAINER <name>  
  140.                   RUN开头的指令会在创建中运行,eg:安装一个软件包,这里使用 apt-get 来安装了一些软件   
  141.                   2种格式:  
  142.                          RUN <command> (the command is run in a shell - `/bin/sh -c`)    
  143.              RUN ["executable", "param1", "param2" ... ]  (exec form)    
  144.              
  145.   
  146.      
  147.                   eg:  
  148.                      1.新建一个目录和一个Dockerfile  
  149.                          # mkdir new_folder  
  150.                          # cd new_folder  
  151.                          # touch Dockerfile  
  152.   
  153.                      2.编辑Dockerfile  
  154.                             #这里是注释  
  155.                 #设置继承自哪个镜像  
  156.                 FROM ubuntu:14.04  
  157.                 #下面是一些创建者基本信息  
  158.                 MAINTAINER JayHe (jayhe@qq.com)  
  159.                 #在终端需要执行的命令  
  160.                                 RUN apt-get update  
  161.                                 RUN apt-get install -y openssh-server  
  162.                 RUN mkdir -p /var/run/sshd  
  163.   
  164.                      3.使用docker build生成镜像  
  165.                                 docker build -t="jayhe/ubuntu:v1" .  
  166.                         参数分析:  
  167.                                -t 用来添加 tag,指定新的镜像的用户和镜像名称信息  
  168.                                .  是Dockerfile所在路径(. 表示当前目录),可替换为一个具体的Dockerfile路径            
  169.     
  170.                      4.以交互方式运行docker      
  171.                                docker run -it jayhe/ubuntu:v1 /bin/bash  
  172.   
  173.                      5.运行docker时指定配置  
  174.                                sudo docker run -d -p 172.17.65.185:9999:22 ubuntu:tools '/usr/sbin/sshd' -D  
  175.   
  176.                         参数分析:   
  177.                                 -i:表示以“交互模式”运行容器,-i 则让容器的标准输入保持打开  
  178.                 -t:表示容器启动后会进入其命令行,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上  
  179.                 -v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>,  
  180.                                    -v 标记来创建一个数据卷并挂载到容器里。在一次 run 中多次使用可以挂载多个数据卷。  
  181.                 -p:指定对外80端口  
  182.                 # 不一定要使用“镜像 ID”,也可以使用“仓库名:标签名”-   
  183.   
  184.         
  185.          

Docker常用命令

1. 查看docker信息(version、info)

[plain]  view plain  copy
  1. # 查看docker版本  
  2. $docker version  
  3.   
  4. # 显示docker系统的信息  
  5. $docker info  


2. 对image的操作(search、pull、images、rmi、history)

[plain]  view plain  copy
  1. # 检索image  
  2. $docker search image_name  
  3.   
  4. # 下载image  
  5. $docker pull image_name  
  6.   
  7. # 列出镜像列表; -a, --all=false Show all images; --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs  
  8. $docker images  
  9.   
  10. # 删除一个或者多个镜像; -f, --force=false Force; --no-prune=false Do not delete untagged parents  
  11. $docker rmi image_name  
  12.   
  13. # 显示一个镜像的历史; --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs  
  14. $docker history image_name  


3. 启动容器(run)

Docker容器可以理解为在沙盒中运行的进程。这个沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库、shell 环境等等。但这个沙盒默认是不会运行任何程序的。你需要在沙盒中运行一个进程来启动某一个容器。这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全的停止。

[plain]  view plain  copy
  1. # 在容器中运行"echo"命令,输出"hello word"  
  2. $docker run image_name echo "hello word"  
  3.   
  4. # 交互式进入容器中  
  5. $docker run -i -t image_name /bin/bash  
  6.   
  7.   
  8. # 在容器中安装新的程序  
  9. $docker run image_name apt-get install -y app_name  

Note:  在执行apt-get 命令的时候,要带上-y参数。如果不指定-y参数的话,apt-get命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的。apt-get 命令执行完毕之后,容器就会停止,但对容器的改动不会丢失。

4. 查看容器(ps)

[plain]  view plain  copy
  1. # 列出当前所有正在运行的container  
  2. $docker ps  
  3. # 列出所有的container  
  4. $docker ps -a  
  5. # 列出最近一次启动的container  
  6. $docker ps -l  


5. 保存对容器的修改(commit)

当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。

[plain]  view plain  copy
  1. # 保存对容器的修改; -a, --author="" Author; -m, --message="" Commit message  
  2. $docker commit ID new_image_name  

Note:  image相当于类,Container相当于实例,不过可以动态给实例安装新软件,然后把这个container用commit命令固化成一个image。


6. 对容器的操作(rm、stop、start、kill、logs、diff、top、cp、restart、attach)

[plain]  view plain  copy
  1. # 删除所有容器  
  2. $docker rm `docker ps -a -q`  
  3.   
  4. # 删除单个容器; -f, --force=false; -l, --link=false Remove the specified link and not the underlying container; -v, --volumes=false Remove the volumes associated to the container  
  5. $docker rm Name/ID  
  6.   
  7. # 停止、启动、杀死一个容器  
  8. $docker stop Name/ID  
  9. $docker start Name/ID  
  10. $docker kill Name/ID  
  11.   
  12. # 从一个容器中取日志; -f, --follow=false Follow log output; -t, --timestamps=false Show timestamps  
  13. $docker logs Name/ID  
  14.   
  15. # 列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的  
  16. $docker diff Name/ID  
  17.   
  18. # 显示一个运行的容器里面的进程信息  
  19. $docker top Name/ID  
  20.   
  21. # 从容器里面拷贝文件/目录到本地一个路径  
  22. $docker cp Name:/container_path to_path  
  23. $docker cp ID:/container_path to_path  
  24.   
  25. # 重启一个正在运行的容器; -t, --time=10 Number of seconds to try to stop for before killing the container, Default=10  
  26. $docker restart Name/ID  
  27.   
  28. # 附加到一个运行的容器上面; --no-stdin=false Do not attach stdin; --sig-proxy=true Proxify all received signal to the process  
  29. $docker attach ID  

Note: attach命令允许你查看或者影响一个运行的容器。你可以在同一时间attach同一个容器。你也可以从一个容器中脱离出来,是从CTRL-C。


7. 保存和加载镜像(save、load)

当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。

[plain]  view plain  copy
  1. # 保存镜像到一个tar包; -o, --output="" Write to an file  
  2. $docker save image_name -o file_path  
  3. # 加载一个tar包格式的镜像; -i, --input="" Read from a tar archive file  
  4. $docker load -i file_path  
  5.   
  6. # 机器a  
  7. $docker save image_name > /home/save.tar  
  8. # 使用scp将save.tar拷到机器b上,然后:  
  9. $docker load < /home/save.tar  


8、 登录registry server(login)

[plain]  view plain  copy
  1. # 登陆registry server; -e, --email="" Email; -p, --password="" Password; -u, --username="" Username  
  2. $docker login  


9. 发布image(push)

[plain]  view plain  copy
  1. # 发布docker镜像  
  2. $docker push new_image_name  

10.  根据Dockerfile 构建出一个容器

[plain]  view plain  copy
  1. #build  
  2.       --no-cache=false Do not use cache when building the image  
  3.       -q, --quiet=false Suppress the verbose output generated by the containers  
  4.       --rm=true Remove intermediate containers after a successful build  
  5.       -t, --tag="" Repository name (and optionally a tag) to be applied to the resulting image in case of success  
  6. $docker build -t image_name Dockerfile_path 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值