资讯专栏INFORMATION COLUMN

docker命令

Tonny / 2946人阅读

摘要:,自动构建,表示这个镜像由的自动构建流程构建的。保存的目录称为上下文,会在构建镜像时将构建的上下文和该上下文的文件和目录上传到守护进程。可用略过缓存查看镜像的每一层参考第一本书

docker入门
主要是docker使用命令
docker守护进程 修改守护进程的网络
sudo docker daemon -H tcp://0.0.0.0:2375  
这条命令将docker守护进程
//使用docker_host环境变量
export DOCKER_HOST = "tcp:0.0.0:2375`
检查docker是否运行
sudo status docker        //sudo service docker status
启动和关闭
sudo stop docker        //sudo service docker stop
sudo start docker        //sudo service docker  start
docker容器操作 查看docker是否正常工作
sudo docker info
运行容器
sudo docker run -i -t ubuntu /bin/bash
//-i标记保证容器是STDIN开启的
//-t标记告诉docker要创建的容器分配一个伪tty终端
//ubuntu 指定镜像
// /bin/bash告诉docker容器要运行什么命令
容器命名

docker默认为创建的容器生成一个随机的名称,可通过--name标记来给容器命名

sudo docker run --name myName -i -t ubuntu /bin/bash
启动已经停止的容器
sudo docker start myName  //也可通过id指定
//也可使用docker restart命令
附着到容器上

docker容器重新启动的时候,会沿用docker run命令时指定的参数来运行,因此上例中重新启动会运行一个交互式的shell,此外也可以用docker attach重新附着到该容器的会话上

sudo docker attach myName    //也可通过id指定
创建守护式容器

除了交互式运行的容器,也可以创建长期运行的容器,守护式容器没有交互式会话,非常适合运行应用程序和服务。

sudo docker run --name daemon_name -d ubuntu /bin/sh -c "while true; do echo hello world;sleep 1;done"
//-d 标记docker将容器放在后台运行
//while循环一直打印hello world
查看docker容器
docker ps         //查看正在运行的容器
docker ps -a     //查看所有的容器
查看容器内部
docker logs daemon_name    //获取容器的日志,可通过-f来追踪日志
日志驱动

docker1.6开始,可通过--log-driver选项来控制docker守护线程和容器所有的日志驱动,可以在执行docker守护线程或者执行docker run命令时使用这个选项。

sudo docker run --log-driver="syslog" --name daemon_name -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
//将daemon_name容器的日志输出到syslog,导致docker logs命令不会输出任何东西
查看容器内的进程
sudo docker top daemon_name
在容器内部运行进程
sudo docker exec -d daemon_name touch /etc/new_config_file
//-d 标记运行一个后台进程 后面明智执行名气的名字以及执行的命令
sudo docker exec -t -i daemon_name /bin/bash
//创建TTY并捕捉STDIN
关闭容器
sudo docker stop daemon_name
深入容器
sudo docker inspect daemon_name 
//查看更多容器的信息
//该命令也可用来查看镜像信息
删除容器
sudo docker rm 80430f8d0921        //通过指定容器id
//删除全部容器
sudo docker rm `sudo docker ps -a -q`    //-q标记表示只返回容器的id

docker镜像 列出docker镜像
sudo docker images
//本地镜像都保存在docker宿主机的/var/lib/docker目录i西安,每个镜像都保存在docker所采用的存储驱动目录下面,如aufs或者devicemapper,也可以在/var/bin/docker/containers目录下看到所有容器
拉取镜像
sudo docker pull ubuntu:12.04
运行一个带标签的docker镜像
sudo docker run -t -i --name new_container ubuntu:12:04 /bin/bash
查找镜像

可以通过docker search命令来查找所有docker hub上公共的可用镜像

sudo docker search puppet
NAME                        DESCRIPTION                                     STARS   OFFICIAL       AUTOMATED
puppet/puppetserver         A Docker Image for running Puppet Server. Wi…   75                               
alekzonder/puppeteer        GoogleChrome/puppeteer image and screenshots…   51                     [OK]

仓库名

镜像描述

stars,用户评价

official,是否官方,由上游开发者管理的镜像(如fedora镜像由fedora团队管理)。

automated,自动构建,表示这个镜像由docker hub的自动构建流程构建的。

构建镜像 构建镜像有两种方式

docker commit命令

docker build命令和dockerfile文件

现在并不推荐使用docker commit命令,而应该使用更灵活、更强大的dockerfile来构建docker镜像

一般来说都是基于已有的基础镜像,而不是“创建”新镜像,从0开始可以参考:https://docs.docker.com/develop/develop-images/baseimages/

创建docker hub账号

创建完镜像之后,可以将镜像推送到docker hub或者私有的registryzhong,完成这个操作需要在docker hub上创建一个账号。
https://hub.docker.com/signup

登陆到docker hub
sudo docker login
Username:
Password:
Login Succeeded

用docker commit来创建镜像
//创建一个新容器
sudo docker run -i -t ubuntu /bin/bash
//在容器内部安装一些软件...

//得到刚刚创建容器的id
docker ps -l -q
9649de16bffb

//提交定制容器
sudo docker commit 9649de16bffb    dack/apache2
    
//检查新创建的镜像
docker images dack/apache2
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
dack/apache2        latest              2c5cd556c3f2        About a minute ago   209MB

也可以在提交镜像时指定更多的数据(包含标签)来详细描述所做的修改

sudo docker commit -m "A new custom image" -a "dack huang" 9649de16bffb dack/apache2:webserver

//-m 提交信息
//-a 作息信息
//dack/apache2:webserver 执行镜像的用户名和仓库名,并为该镜像增加一个webserver的标签    

用Dockerfile构建镜像

并不推荐用docker commit构建镜像,相反推荐使用Dockerfile的定义文件和docker build来构建镜像

Dockerfile使用基本的基于DSL(Domain Specific Language)语法的指令来构建一个docker镜像,对比docker commit,其更具备可重复性、透明性和幂等性。

保存Dockerfile的目录称为上下文,docker会在构建镜像时将构建的上下文和该上下文的文件和目录上传到docker守护进程。这样docker守护进程就可以直接访问用户想在镜像中存储的任何代码、文件或者其他数据。

dockerfile中每条指令从上到下依次执行,大体的流程如下:

docker从基础镜像中运行一个容器

执行一条指令,对容器做出修改

执行类似docker commit的操作,提交一个新的镜像层

docker再基于刚提交的镜像运行一个新容器

执行下一条指令直至全部执行完毕

所以尽管某一步执行失败了,还是得到一个可以使用的镜像

# Version : 0.01
FROM ubuntu:14.04
MAINTAINER dack huang "dack_huang@163.com"
RUN apt-get update && apt-get install -y nginx
RUN echo "Hi, I am in your container" 
    >/usr/share/nginx/html/index.html
EXPOSE 80


FROM            //指定基础镜像
MAINTAINER        //指定镜像作者
RUN                //在当前镜像中运行的命令,默认在shell里面使用/bin/sh -c执行
EXPOSE            //应用程序会使用容器指定的接口

通过docker build构建镜像

docker build -t="dack/static_web"
//-t设置镜像标签

//从git仓库上面构建镜像
//假设这个git仓库存在Dockerfile
docker build -t="dack/static" git@github.com:dack/docker-static_web    

docker将每一步的构建过程都提交为镜像,所以docker会将之前的镜像层看成缓存,当修改某个步骤之后再次构建的,docker会直接从该步骤开始。

可用docker build --no-cache略过缓存

docker build --no-cache -t="dack/static_web"

docker history查看镜像的每一层

[root@dack static_web]# docker history e5f55354c141
IMAGE               CREATED             CREATED BY                                      SIZE            COMMENT
e5f55354c141        5 hours ago         /bin/sh -c #(nop)  EXPOSE 80                    0B                  
66d44cca6536        5 hours ago         /bin/sh -c echo "Hi, I am in your container"…   27B                 
022c0b46f4f8        5 hours ago         /bin/sh -c apt-get update && apt-get install…   34.3MB              
34d2d2b790f5        5 hours ago         /bin/sh -c #(nop)  MAINTAINER dack huang "da…   0B                  
390582d83ead        3 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
           3 weeks ago         /bin/sh -c mkdir -p /run/systemd && echo "do…   7B            


参考

第一本docke书

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27766.html

相关文章

  • docker命令详解

    摘要:与命令不同,使用命令只能创建容器而并不启动选项镜像名称命令参数将标准输入标准输出标准错误链接到容器向容器的添加主机名与地址设置资源分配。输入命令退出后,容器不会停止,而会继续运行。命令命令用于以格式显示容器与镜像的详细 docker命令详解 前言 从技术老大那里听说了docker,闲下来之后就简单了解了一下,发现真的是一个好用的不得了的工具。遂周末去图书馆找了下相关资料,学习下姿势。说...

    mayaohua 评论0 收藏0
  • Docker 1.13最实用命令行:终于可以愉快地打扫房间了

    摘要:同样地,也有命令可以删除挂起的镜像网络和。命令提供整体磁盘使用率的概况,包括镜像容器和本地。因此这条命令比命令更局限。镜像新的镜像命令也是子命令。笔者最爱的命令莫过于,让环境一直保持干净整齐。 Docker 1.13出来已经有一段时间了,新版本添加了许多有用的命令,本文作者从处女座的洁癖(此处有雾)出发,告诉大家一些整理环境的小技巧。打扫房间再也不需费时又费力了,简单的命令,就可以轻松...

    enda 评论0 收藏0
  • Docker命令行与守护进程如何交互?

    摘要:命令行是与守护进程进行交互的主要工具。感兴趣的话,你也可以开发一个,使用与守护进程进行交互就好了。命令行与守护进程如何交互从左至右理解上图最左侧是客户端,即命令行。而在与上运行时,守护进程事实上运行在虚拟机中。 译者按: Docker是典型的C/S架构,其守护进程(daemon)与命令行(CLI)是通过REST API进行交互的。 原文: Understanding how the D...

    willin 评论0 收藏0
  • Flux7 Docker 系列教程(二):必备的 15 条命令

    摘要:本系列教程翻译自,系列共有九篇,本文译自第二篇。总结本章知识介绍了最基本的十五个命令,接下来的教程将会陆续介绍如何在中运行一个应用以及其他的命令。接下来会在本系列教程结束后补充几篇应用的实例。 本系列教程翻译自 Flux7 Docker Tutorial Series,系列共有九篇,本文译自第二篇 Part 2: The 15 Commands。 该系列所有文章将参考其他学习...

    chemzqm 评论0 收藏0
  • Flux7 Docker 系列教程(二):必备的 15 条命令

    摘要:本系列教程翻译自,系列共有九篇,本文译自第二篇。总结本章知识介绍了最基本的十五个命令,接下来的教程将会陆续介绍如何在中运行一个应用以及其他的命令。接下来会在本系列教程结束后补充几篇应用的实例。 本系列教程翻译自 Flux7 Docker Tutorial Series,系列共有九篇,本文译自第二篇 Part 2: The 15 Commands。 该系列所有文章将参考其他学习...

    AprilJ 评论0 收藏0
  • 一篇文章带你掌握docker基础知识

    摘要:和区别让用户可以进入查看输出等等操作,但是并不会另外启动一个进程如果你用来退出,同时这个信号会默认情况会启动另外一个进程来进入,这里的操作是在这个进程下的。 走在通往docker的大道上——docker基础知识汇总 最后编辑时间:2017年03月09日 1.Docker是什么 Docker是一种新的容器化技术,为应用开发和部署提供一站式容器解决方案,能帮助开发者高效快速的构建应用,实...

    TANKING 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<