2 docker 实践中常用的Docker 命令

0这是一个操作 Docker 镜像的小技巧:

不冲突的情况下, Docker 可以使用 ID 的前面几个字符进行快速操作,例如:

命令 # docker ps -a

CONTAINER ID        IMAGE                 COMMAND                CREATED             STATUS                      PORTS               NAMES
920c0f3c240a        89dc7e6d0ac1:latest   "ls /etc/"             15 minutes ago      Exited (0) 15 minutes ago                       ecstatic_perlman
3f2a0b440abc        89dc7e6d0ac1:latest   "ls /etc/fstab"        15 minutes ago      Exited (0) 15 minutes ago                       tender_curie
64c55acd970e        89dc7e6d0ac1:latest   "ls -l"                15 minutes ago      Exited (0) 15 minutes ago                       sharp_lumiere
c34716ad8f72        busybox:latest        "/bin/sh -c 'while t   19 hours ago        Exited (0) 12 hours ago                         trusting_kowalevski
977be396faf6        busybox:latest        "/bin/sh -c 'while t   19 hours ago        Exited (137) 19 hours ago                       ecstatic_lovelace
9e553497cbed        busybox:latest        "/bin/sh -c 'while t   19 hours ago        Exited (137) 19 hours ago                       lonely_fermi
c9093d4c7637        busybox:latest        "/bin/sh -c 'while t   19 hours ago        Exited (137) 19 hours ago                       gloomy_pike
3f81114c48c2        busybox:latest        "/bin/echo Hello Doc   19 hours ago        Exited (0) 19 hours ago                         determined_swartz
26c98d7a589d        hello-world:latest    "/hello"               20 hours ago        Exited (0) 20 hours ago                         distracted_babbage
36c0b05dc414        hello-world:latest    "/hello"               20 hours ago        Exited (0) 20 hours ago                         admiring_carson

可以使用 docker rm 92 命令快速删除容器 920c0f3c240a,但是无法使用 docker rm 3f 命令进行快速删除某个容器,因为有两个以 3f 开头的容器,你必须用 docker rm 3f2 或者 docker rm 3f8 指定删除其中一个。

1.检查 Docker 是否安装:

 docker info

docker version 查看版本
查看帮助 :docker help 或者 docker <command> --help
2镜像操作:

1. 检查一下本机有多少 Docker 镜像:docker images

命令 # docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
hello-world         latest              91c95931e552        5 days ago          910 B

sudo docker images # 显示当前系统镜像,不包括过渡层镜像 
$ sudo docker images -a # 显示当前系统所有镜像,包括过渡层镜像 
$ sudo docker images ubuntu # 显示当前系统 docker ubuntu 库中的所有镜像

2.搜索镜像 并 下载镜像

docker search [-s] IMAGE   例子 docker search busybox
sudo docker search -s 100 ubuntu # 查找 star 数至少为 100 的镜像,找出只有官方镜像 start 数超过 100,默认不加 s 选项找出所有相关 ubuntu 镜像 NAME      DESCRIPTION

docker pull [OPTIONS] NAME[:TAG|@DIGEST]
例子1: # docker pull busybox
例子2 : docker pull daocloud.io/library/ubuntu:16.04

下载镜像名称其实由三部分组成:其中其中daocloud.io是注册服务器地址,默认是 registry.hub.docker.com;library 是用户名,默认就是libraray, ubuntu是仓库名,16.04是标签名,默认是latest,第一个busybox 全名该是  registry.hub.docker.com/library/busybox:latest

3 给镜像添加标签

docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

[root@bogon ~]# docker tag daocloud.io/library/ubuntu:16.04 ubuntu:latest

4 删除镜像

docker rmi [OPTIONS] IMAGE [IMAGE...]

# 按标签删除:多个标签,仅会删除当前标签,不会删除镜像
[root@bogon ~]# docker rmi ubuntu:latest
# 按ID删除:直接删除镜像
[root@bogon ~]# docker rmi 12543ced0f6f

选项:

  • -f, --force 强制删除镜像

  • --no-prune 不删除untagged parents

5 导出镜像

docker save [OPTIONS] IMAGE [IMAGE...]

[root@bogon ~]# docker save -o ubuntu_latest.tar ubuntu:latest
[root@bogon ~]# ls -l
-rw-r--r--. 1 root root 128086528 Jun 28 12:39 ubuntu_latest.tar

选项:

  • -o, --output 写入到文件

6 导入镜像

docker load --input ubuntu_latest.tar
# 或者
docker load < ubuntu_latest.tar

选项:

  • -i, --input 从压缩包载入镜像

7上传镜像
docker push [OPTIONSNAME[:TAG|@DIGEST]

选项:

  • --disable-content-trust=true 跳过镜像签名

sudo docker push 192.168.0.100:5000/ubuntu # 推送镜像库到私有源[可注册 docker 官方账户,推送到官方自有账户] 
sudo docker push 192.168.0.100:5000/ubuntu:14.04 # 推送指定镜像到私有源 

8获取 Docker 镜像的更改历史

docker history <image-name>


9创建镜像 :build

在前面我们讲过 Dockerfile,不过一直没有告诉大家怎么用自己的 Dockerfile 生成镜像文件。
那么现在也不算晚:使用 build 命令生成 image。

docker build [OPTIONS] PATH | URL | - 

PATH / URL / - 这三个是必选选项,三选一。

OPTION 可以使用 docker build --help 进行查看,主要包括构建过程中的内存限制、CPU 限制、以及其他。有两个必须需要了解的 OPTION 选项:

  1. -f: 和make一样,如果PATH内找不到Dockerfile,则docker build必须要 -f 参数指定Dockerfile
  2. -t: 指定生成的镜像标签。例如: docker build -f Dockerfile -t tag .,使用 Dockerfile.bak 生成一个标签叫 tag的镜像文件。

另外,- 选项非常有意思:docker build -,然后可以交互式地输入 Dockerfile,输入完毕后按 Ctrl+D 结束输入即可。

OPTION 一定要放在 PATH / URL / - 前面。


10 load & save  :
使用 load 从 stdin 导入一个 tar 格式的镜像或者仓库,用 save 将 tar 镜像输出到 stdout。
docker save -o <output file> <image>或者docker save <image> > <output file>
docker load -i <file name>或者docker load < <file name>
这两个命令常用于多节点部署。
例如:
命令 # docker save -o a.tar suse
命令 # docker load -i a.tar

load import pull 的区别 ?save export push 的区别?
1 save 和export是 生成镜像的方式:
load 和save 操作的是镜像 ,import 和 export 操作的是容器,结果是 export 出的镜像文件 比 save 的文件 要少一些镜像层。commit 是生成镜像的命令可以指定用以上哪种方式生成。
2 pull push 是传输镜像的方式, 操作的也是镜像,做的只是上传下载。

stop 和 kill 的区别?
docker stop,支持“优雅退出”。先发送SIGTERM信号,在一段时间之后(10s)再发送SIGKILL信号。Docker内部的应用程序可以接收SIGTERM信号,然后做一些“退出前工作”,比如保存状态、处理当前请求等。
docker kill,发送SIGKILL信号,应用程序直接退出


3容器操作:

docker create   容器名或者容器ID    创建容器
docker start [-i] 容器名                     启动容器
docker run        容器名或者容器ID    运行容器,相当于docker create + docker start
docker attach   容器名或者容器ID    进入容器的命令行
docker restart   容器名或者容器ID                 重启容器
docker rm         容器名                               删除容器
      -----  Docker 的文件是放在 /var/lib/docker/containers/ 中的

docker pause 容器名    暂停容器

docker unpause 容器名   取消暂停容器
docker kill 容器名docker top 容器名
docker stop      容器名                             停止容器
docker stop,支持“优雅退出”。先发送SIGTERM信号,在一段时间之后(10s)再发送SIGKILL信号。Docker内部的应用程序可以接收SIGTERM信号,然后做一些“退出前工作”,比如保存状态、处理当前请求等。
docker kill,发送SIGKILL信号,应用程序直接退出。
docker inspect 容器名 查看Docker的底层信
docker logs 容器名
docker diff 容器名
docker commit 容器名 镜像名    : 保存容器为镜像

docker top <CONTAINER_ID>:查看容器中运行的进程

docker  port 容器名     # 查看映射端口对应的容器内部源端口


1. 运行镜像

Docker run IMAGE [COMMOND] [ARG...] 在新的容器中执行命令
docker run -t -i -c 100 -m 512MB -h test1 -d --name="docker_test1" ubuntu /bin/bash 
# 创建一个 cpu 优先级为 100,内存限制 512MB,主机名为 test1,名为 docker_test1 后台运行 bash 的容器

例子:
docker run busybox /bin/echo Hello Docker

这条命令是运行 busybox 镜像中的 /bin/echo 命令,参数是 Hello Docker

结果:Hello Docker

  • 一些常用的选项:

  • -i 交互式界面,默认是false

  • -t 伪终端,默认false

  • --name 容器别名,默认随机命名

exit 退出交互式界面,容器停止运行。Crtl+P 或者 Crtl+Q 退出交互式界面,容器在后台运行。(注意是大写P和Q)

1.1容器运行之后我们可以查看容器:

docker ps     查看正在运行的容器
docker ps -a  查看所有容器
docker ps -l  查看最近一次运行的容器

删除容器时,容器必须是停止状态,否则会报错误。

 1.2运行守护进程

docker run -d IMAGE [COMMOND] [ARG...]
docker run -d --name d1 ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done;"
b89b9ce64d34bd202a642c8190428f4776f15e882f138949259722f22120201a
返回一个守护进程ID,在后台,以 busybox 镜像为基础创建的一个容器,每一秒运行一次 echo hello world命令

2. 查询容器的输出内容:

docker logs [-f] [-t] [--tail] 容器名或id 查看容器内WEB应用程序日志

   
   
  • -f --follow=true|false,默认false,一直跟随log变化

  • -t --timestamps=true|false,默认false,加上时间戳

  • --tail="all",返回最新多少条日志

  • 例子   :docker logs -f -t --tail 2 b89b9ce64d34

在运行的容器中启动新的进程:

docker exec [-d] [-i] [-t] 容器名 [COMMOND] [ARG...]

attach

Docker 允许 attach 进入容器并与运行中的容器进行交互,同时允许查看容器内守护进程态下的程序的输出,使用以下两种方式退出容器:

  • Ctrl+C 直接退出
  • Ctrl+\ 退出并显示堆栈信息。

语法:docekr attach <Container>

那么还是刚刚那个容器:

命令 # docker run -d ubuntu /usr/bin/top -b
b33059d6c7427e377a1239eca59605e18bb6d145c4f12df6021db4896b6fcfa3
命令 # docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b33059d6c742        ubuntu:latest       "/usr/bin/top -b"   2 seconds ago       Up 2 seconds                            backstabbing_jang


命令 # docker attach backstabbing_jang #此处也可以用docker attach b330

top - 05:30:49 up 16:04,  0 users,  load average: 0.01, 0.19, 0.39
Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.7 us,  2.0 sy,  0.0 ni, 96.0 id,  0.0 wa,  0.3 hi,  0.0 si,  0.0 st
KiB Mem:   1003080 total,   596484 used,   406596 free,    42524 buffers
KiB Swap:  1046524 total,        0 used,  1046524 free.   330716 cached Mem


   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
     1 root      20   0   19744   1280   1008 R  0.0  0.1   0:00.08 top


top - 05:30:52 up 16:05,  0 users,  load average: 0.01, 0.19, 0.39
Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  1.0 sy,  0.0 ni, 94.3 id,  4.3 wa,  0.3 hi,  0.0 si,  0.0 st
KiB Mem:   1003080 total,   596484 used,   406596 free,    42528 buffers
KiB Swap:  1046524 total,        0 used,  1046524 free.   330712 cached Mem


   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
     1 root      20   0   19744   1280   1008 R  0.0  0.1   0:00.08 top

4diff
docker diff <contianer> 用于显示容器的文件改动,包括 A(add),C(change),D(delete)。这些信息可以用于 debug,也可以用于快速信息共享。
示例:
命令 # docker run -t -i ubuntu /bin/bash
命令(容器内) root@cc9befbe64a1:/# nano a
bash: nano: command not found
命令(容器内)root@cc9befbe64a1:/# apt-get install nano
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  spell
The following NEW packages will be installed:
  nano
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 194 kB of archives.
After this operation, 614 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main nano amd64 2.2.6-1ubuntu1 [194 kB]
Fetched 194 kB in 3s (54.3 kB/s)
Selecting previously unselected package nano.
(Reading database ... 11527 files and directories currently installed.)
Preparing to unpack .../nano_2.2.6-1ubuntu1_amd64.deb ...
Unpacking nano (2.2.6-1ubuntu1) ...
Setting up nano (2.2.6-1ubuntu1) ...
update-alternatives: using /bin/nano to provide /usr/bin/editor (editor) in auto mode
update-alternatives: using /bin/nano to provide /usr/bin/pico (pico) in auto mode
命令(容器内) root@cc9befbe64a1:/#
这个容器ID是cc9befbe64a1,于是可以新开一个终端:


命令 # docker diff cc9
A /.wh..wh.plnk/119.673746
A /.wh..wh.plnk/335.673670
C /bin
A /bin/nano
A /bin/rnano
C /etc
C /etc/alternatives
D /etc/alternatives/editor.fr.1.gz
省略部分输出


5inspect
用法:docker inspect <container>/<image>,用于收集容器的底层信息,包括如下内容:
实例的IP地址。
端口绑定
搜索特定的端口映射
搜集配置信息。
例如
命令 # docker ps
CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS                    NAMES
cf57741249fb        dockerui/dockerui:latest   "/dockerui"         2 minutes ago       Up 2 minutes        0.0.0.0:9000->9000/tcp   trusting_hawking
命令 # docker inspect --format='{{.NetworkSettings.IPAddress}}' cf5
172.17.0.17

6 :import 
用于导入 URL / 文件,从本地导入需要 - 参数。docker import [OPTIONS] URL|- [REPOSITORY[:TAG]]、URL/-二选一。
和pull不同的时候,pull 是从docker 仓库里下载,而import 是从任意url 上下载,甚至是从本地文件系统,
最后都是添加到本地镜像 images列表中。 
例如,我们导入 openvz 的 suse minimal 镜像:
命令# docker import http://mirrors.ustc.edu.cn/openvz/template/precreated/suse-13.1-x86-minimal.tar.gz suse:minimal  #这里使用的是ustc镜像源。
Downloading from http://mirrors.ustc.edu.cn/openvz/template/precreated/suse-13.1-x86-minimal.tar.gz
127a9e7b9f87e4fc280c96bee9fad0a19057de38d307fe7fc1f6d35c86f1aff657.89 MB/57.89 MB
命令# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
suse                     minimal             127a9e7b9f87        2 minutes ago       149.1 MB
导入本地镜像:
cat suse-13.1-x86-minimal.tar.gz |docker import - suse:minmal
导入 Gentoo 的 stage3:
docker import http://mirrors.ustc.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20150423.tar.bz2 gentoo:stage3

7 export
和 import 相反,export 将容器导出成 tar 压缩包。
例如
命令 # docker run -i -t -d suse:minimal /bin/bash
060f6e6c877af01313363b6506107438b9eb5ba87a7ef0625577e348a554ecca
命令 # docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
060f6e6c877a        suse:minimal        "/bin/bash"         2 seconds ago       Up 2 seconds                            fervent_ritchie
命令 # docker export -o a.tar 060f
命令 # docker export 060f > a.tar  #也可以这样。
4其他命令

1 cp

从容器内复制出文件到宿主机器:格式 docker cp container:path hostpat

命令 # docker cp 060:/etc/zypp/zypp.conf  /tmp/ #060是容器ID的简写
命令 # cat /tmp/zypp.conf
## Configuration file for software management
## /etc/zypp/zypp.conf
##
## Boolean values are 0 1 yes no on off true false
省略。。

2 login
登录到 docker 仓库:

命令 # docker login
Username (qiuker521): qiuker521
WARNING: login credentials saved in /root/.dockercfg.
Login Succeeded
当然也可以登录到自己的私有服务器:docker login localhost:8080

logout   # 从当前 Docker registry 退出

3 wait
用来获取容器的退出信号值。已退出的容器直接返回 exit 值,未退出的容器等待容器退出,然后返回 exit 值


4 events
获取 Docker 服务端的实时事件,例如 docker events 的同时运行 docker run ubuntu。

zypp/zypp.conf  /tmp/ #060是容器ID的简写
命令 # cat /tmp/zypp.conf
## Configuration file for software management
## /etc/zypp/zypp.conf
##
## Boolean values are 0 1 yes no on off true false
省略。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值