Docker命令

Docker 是实现轻量级的操作系统虚拟化解决方案。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

基本概念

Docker 包括三个基本概念

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

镜像: 是一个只读的模板。可创建,可删除,可修改,可共享.

容器: 是从镜像创建的运行实例。每个容器都是相互隔离的、保证安全的平台。启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。

仓库: 是集中存放镜像文件的场所。

仓库注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

镜像有点像面向对象里的类,容器则是对应的一个实例,仓库是保存类的文件(类有不同的版本),仓库注册服务器是文件所在的计算机.

最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。

安装

更新源
sudo apt-get update

通过apt命令在线安装docker
sudo apt-get install docker-engine

开启docker的守护进程(Docker服务开启)
sudo service docker start

国际惯例,用一个Hello world的来测试安装成功
sudo docker run hello-world

更新Docker
sudo apt-get upgrade docker-engine

卸载Docker
sudo apt-get purge docker-engine
sudo rm -rf /var/lib/docker

创建Docker用户组,避免使用sudo
sudo usermod -aG docker user_name

镜像管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
搜索docker.hub中的镜像,无需登录
docker search xxxx
sudo docker pull ubuntu:16.04
若不使用:tags那么tags默认为latest
docker images:
列出本地所有镜像
docker search <IMAGE_ID/NAME>:
查找image
docker pull <IMAGE_ID>
下载image
docker push <IMAGE_ID>
上传image
docker rmi <IMAGE_ID>
删除image, 注意 docker rm 命令是移除容器。
sudo docker save -o XXXXXX.tar <image_id>
保存镜像
docker load --input XXXXXX.tar
载入镜像

镜像使用
http://wiki.jikexueyuan.com/project/docker-technology-and-combat/create.html
http://www.runoob.com/docker/docker-image-usage.html

容器使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
查看:
docker ps
-a:同时显示停止的容器,默认只显示启动状态
-q:只显示容器id
------
使用:
docker start <CONTAINER_ID>:重新启动container
docker attach <CONTAINER_ID> 连接到启动的容器
要先启动,才能连接
docker stop <CONTAINER_ID>:停止container
------
监测:
docker inspect <CONTAINER_ID> 容器底层信息
docker top <CONTAINER_ID>成 容器进程信息
docker logs <CONTAINER_ID> : 输出容器日志
docker logs -f <CONTAINER_ID> : 实时输出容器日志
------
导入导出:
docker export <CONTAINER_ID> > xxxx.tar 导出容器
cat xxxx.tar | sudo docker import - ubuntu:v1.0 从容器快照导出为镜像
-----

如下

1
2
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu v1.0 9d37a6082e97 About a minute ago 171.3 MB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
docker rm <CONTAINER_ID>:删除container ,如果要删除一个运行中的容器,可以添加 -f 参数。
docker rm `docker ps -a -q`:删除所有容器
docker cp <CONTAINER_ID>:path hostpath:复制容器内的文件到宿主机目录上
docker kill `docker ps -q`
docker rmi `docker images -q -a`
docker wait <CONTAINER_ID>:阻塞对容器的其他调用方法,直到容器停止后退出
docker top <CONTAINER_ID>:查看容器中运行的进程
docker diff <CONTAINER_ID>:查看容器中的变化
docker inspect <CONTAINER_ID>:查看容器详细信息(输出为Json)
-f:查找特定信息,如docker inspect -f '{{ .NetworkSettings.IPAddress }}'
docker commit -m "comment" -a "author" <CONTAINER_ID> ouruser/imagename:tag
docker extc -it <CONTAINER> <COMMAND>:在容器里执行命令,并输出结果

容器管理

1
2
3
4
5
6
7
8
docker run <IMAGE_ID>
-i:标准输入给容器
-t:分配一个虚拟终端
否则这样使用 docker run ubuntu:14.04 /bin/echo 'Hello world'
-d:以守护进程方式运行(后台)
--name: 指定容器的名称
--rm:退出时删除容器

docker run –name ovcer_the_container -i -t ubuntu /bin/bash
root@1ce9f640478d:/#

1
上面的命令将会创建一个名为ovcer_the_container的容器。对于一个合法的容器的名称来说只可以包括以下字符:小写字母a~z、大写字母A-Z、数字09、下划线、圆点、横线。

## 网络相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
默认匹配docker容器的5000端口号随机分配端口号
-P
查看容器的5000端口对应本地机器的IP和端口号,也可docker ps直接查看
docker port <CONTAINER_ID> 5000
指定端口号
-p <HOT_PORT>:<CONTAINER_PORT>
绑定主机的特定接口的端口号
docker run -p 127.0.0.1:5000:5000
绑定特定端口号(主机的所有网络接口的5000端口均绑定容器的5000端口)
docker run -p 5000:5000
绑定udp端口号
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py:
查看映射端口配置
$docker port nostalgic_morse 5000
127.0.0.1:49155.

数据管理

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像

可以在容器启动的时候添加-v参数指定容器卷,也可以在Dockerfile里用VOLUMN命令添加

创建一个数据卷

在用 docker run 命令的时候,使用 -v 标记来创建一个数据卷并挂载到容器里。在一次 run 中多次使用可以挂载多个数据卷。
下面创建一个 web 容器,并加载一个数据卷到容器的 /webapp 目录。
sudo docker run -d -P –name web -v /webapp training/webapp python app.py
注意:也可以在 Dockerfile 中使用 VOLUME 来添加一个或者多个新的卷到由该镜像创建的任意容器。

## 挂载一个本地目录作为数据卷

sudo docker run -d -P –name web -v /src/webapp:/opt/webapp training/webapp python app.py
上面的命令加载主机的 /src/webapp 目录到容器的 /opt/webapp 目录。

挂载一个本地文件作为数据卷

sudo docker run -it -v ~/.bash_history:/.bash_history
这样就可以记录在容器输入过的命令了。

共享

在一个容器创建容器卷后,其他容器便可以通过–volumes-from共享这个容器卷数据,如下:

  1. docker run -d -v /dbdata –name db1 training/postgres echo Data-only container for postgres
    首先启动了一个d1容器,并为它增加一个数据卷/dbdata,然后启动另一个容器,共享这个数据卷

  2. docker run -d –volumes-from db1 –name db2 training/postgres

此时容器db2使用了db1的容器卷,当容器db1被删除时,容器卷也不会被删除,只有所有容器不再使用此容器卷时,才会被删除
docker rm -v:删除容器卷

备份与恢复

备份

首先使用 –volumes-from 标记来创建一个加载 dbdata 容器卷的容器,并从本地主机挂载当前到容器的 /backup 目录。命令如下:
$ sudo docker run –volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
tar 命令来将 dbdata 卷备份为本地的 /backup/backup.tar。

恢复

如果要恢复数据到一个容器,首先创建一个带有数据卷的容器 dbdata2。
$ sudo docker run -v /dbdata –name dbdata2 ubuntu /bin/bash
然后创建另一个容器,挂载 dbdata2 的容器,并使用 untar 解压备份文件到挂载的容器卷中。
$ sudo docker run –volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

仓库管理

docker login:登录
本地用户目录的 .dockercfg 中将保存用户的认证信息。

http://www.myexception.cn/cloud/1787029.html

脚手架

Docker Compose

允许用户在一个模板(YAML 格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web 服务容器再加上后端的数据库服务容器等。
http://wiki.jikexueyuan.com/project/docker-technology-and-combat/fintro.html

Docker Machine

Docker Machine是一个简化安装Docker环境的工具。市场上主流Linux系统版本很多,使用Machine工具就简单很多,一两条命令即可在主流Linux系统上安装Docker环境,用户不用考虑什么操作系统。Docker Machine还具备Docker工具管理虚拟化技术,Generic驱动默认管理LXC容器技术。
http://chuansong.me/n/341280351544

https://yeasy.gitbooks.io/docker_practice

文章目录
  1. 1. 基本概念
  2. 2. 安装
  3. 3. 镜像管理
    1. 3.1. 容器使用
  4. 4. 容器管理
  5. 5. 数据管理
    1. 5.1. 创建一个数据卷
    2. 5.2. 挂载一个本地文件作为数据卷
    3. 5.3. 共享
    4. 5.4. 备份与恢复
      1. 5.4.1. 备份
      2. 5.4.2. 恢复
  6. 6. 仓库管理
  7. 7. 脚手架
    1. 7.1. Docker Compose
    2. 7.2. Docker Machine