没办法, docker入坑,基本命令速查记录,方便快速不迟疑。

u=714598629,3872240263&fm=27&gp=0.jpg

安装:

直接 ubuntu apt-get 不迟疑

$ apt-get install docker.io

版本:

$ docker version

查看 docker 信息:

$ docker info

开启服务:

$ service docker start/status/stop/restart

拉取镜像到本地:

  • ptbird/ubuntu:14.04 : 镜像作者/名称:标签(默认 latest
$ docker pull ptbird/ubuntu:latest

查看本地所有镜像:

$ docker images

搜索镜像:

$ docker search imageName

commit 镜像:

  • -m:commit 信息
  • -a:指定 commit 的作者
  • containerID:镜像容器来源 ID
  • newPtbird/newUbuntu:v2:指定镜像的新用户名/名称:标签
$ docker commit -m='update apt-get' -a='ptbird' containerID newPtbird/newUbuntu:v2 

运行镜像:

  • -i:返回镜像的信息
  • -t:开启一个伪终端(terminal)
  • -d:守护进程后台运行
  • -p:与本机的端口进行映射
  • --name xxx:容器命名,给容器一个新名
  • --link xxx:连接其他容器
  • bin/bash:开启 bash 脚本,能够使用 bash
$ docker run  -i -t  ptbird/ubuntu:latest /bin/bash

查看容器位置:

容器地址在 var/lib/docker/containers,名称是容器的 id

退出容器:

$ exit / CTRL-D

查看所有在运行的容器:

  • -a:查看所有的容器(包括已经停止的)
  • -l:返回详细信息
$ docker ps
  • CONTAINER ID :容器ID简写
  • IMAGE:使用的镜像
  • COMMAND:命令
  • CREATED:创建时间
  • STATUS:运行状态
  • PORTS:端口
  • NAMES:分配的名字

显示容器的输出记录

  • insane_babbage:容器名或者ID
$ docker logs insane_babbage

停止容器的运行

$ docker stop insane_babbage

删除容器:

$ docker rm containerID/containerName

容器命名:

  • --name web:新名称为 web
$ docker run --name web ptbird/ubuntu:latest

容器连接:

  • --link db:alias:连接 db 容器,并且给连接的 db 容器一个别名 alias。

首先存在一个名为 db 的容器:

$ docker run -d --name db training/postgres

开启 web 容器的时候,连接上这个 db 容器:

$ docker run --name web --link db:alias ptbird/ubuntu:latest

删除镜像:

$ docker rmi imageID

镜像标签:

  • imagesID:镜像ID
  • ptbird/ubuntu:devel:新的镜像拥有者/名称:标签
$ docker tag imagesID ptbird/ubuntu:devel

注意:更改标签后的 images ,其实际上还是一个,因为 ImageID是不变的,只不过标签名不同

镜像摘要:

$ docker images --digests | head

通过 Dockerfile 创建镜像:

创建 Dockerfile

$ mkdir postbird
$ cd postbird
$ touch Dockerfile
$ vim Dockerfile

Dockerfile 基本内容

# this is postbird dockerfile

# from which images source
FROM ubuntu:16.04
# who maintain the image and he's email
MAINTAINER Postbird <ptbird@yeah.net>
# RUN a bash in image
RUN apt-get update && apt-get install -y nodejs nodejs-legacy
RUN echo hello postbird docer

通过 Dockerfile 构建镜像:

  • -t ptbird/ubuntu:v3: 指明该镜像的拥有者/镜像名称:标签
  • path:表示 Dockerfile 的路径,当前路径写的 .,其他路径可注明
$ docker build -t ptbird/ubuntu:v3 path

推送镜像到 docker hub:

$ docker push ptbird/ubuntu:devel

数据卷:

添加数据卷

$ docker run -d -v /webapp ptbird/ubuntu:webroot

挂载一个主机目录作为数据卷

  • -v /data/root:/data/webroot:ro : 讲主机的 /data/web 挂载到容器的 /data/webroot,且限制只读
$ docker run -d -v /data/web:/data/webroot:ro ptbird/ubuntu:webroot

挂载宿主机的热定文件为数据卷

$ docker run --rm -it -v /data/a.html:/data/a.html ptbird/ubuntu:webroot /bin/bash

创建、挂载数据卷容器

数据卷容器是可以链式扩展的,随便挂载 比如把 dbdata 挂载到 db1,在把 dbdata 挂载到 db2 ,在把 db1 挂载到 db3 。。。
创建一个名为 dbdata 的数据卷容器并后台运行

$ docker run -d -v /dbdata --name dbdata ptbird/postgres echo Data-only container for postgres

在另一个数据卷容器中挂载 dbdata 数据卷容器

$ docker run -d --volumes-from dbdata --name db1 ptbird/postgress

删除数据卷

$ docker rm -v xxx

备份、恢复、迁移数据卷

下面代码启动了一个挂载 dbdata 卷的新容器,并且挂载了一个本地目录作为 /backup 卷。最后,通过使用 tar 命令,将 dbdata 卷的内容被分到容器中的 /backup 目录下的 backup.tar 文件中。如果容器终止,会得到 dbdata 卷的备份

$ docker run --volumes-from dbdata -v $(pwd):/backup/ ubuntu tar cvf /backup/backup.tar /dbdata

如果在同一容器或者其他容器中回复此数据,创建新的容器:

$ docker run -v /dbdata --name /dbdata2 ubuntu /bin/bash

然后在新的容器中数据卷里 解压 备份文件:

docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

端口映射

  • -P:22 , 宿主机随便找个端口(不使用)进行映射(重启之后也会更换端口)
  • -p: 2222:22,宿主机需要将 2222 端口与容器 22 端口映射
$ docker run -d -p 2222:22 ubuntu