Docker 基本管理

镜像:

Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker 会从镜像仓库下载(默认是 Docker Hub 公共注册服务器中的仓库)。

由于官方镜像pull很慢 我们这边把默认启动测试改成阿里云的镜像

# 系统要求 CentOS 7 以上,Docker 1.9 以上。  sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service sudo sed -i "s|ExecStart=/usr/bin/docker daemon|ExecStart=/usr/bin/docker daemon --registry-mirror=https://k8dwcw4d.mirror.aliyuncs.com|g" /etc/systemd/system/docker.service  sudo systemctl daemon-reload sudo service docker restart根据实际情况更改

获取镜像

[[email protected] ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
08d48e6f1cff: Pull complete
Digest: sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d366c
Status: Downloaded newer image for centos:latest

#指定版本
[[email protected] ~]# docker pull centos:6.6
6.6: Pulling from library/centos
90577c79babf: Pull complete
Digest: sha256:e21297742183af3e64cbd42585c1718b53c677797a77044ba13c1425c21ef06b
Status: Downloaded newer image for centos:6.6

该命令实际上相当于 $ sudo docker pull registry.hub.docker.com/ubuntu:12.04 命令,即从注册服务器registry.hub.docker.com 中的 ubuntu 仓库来下载标记为 12.04 的镜像。后期可以搭建自己的私有仓库

注:如果直接pull 系统名 下载下来的是最新版本latest

完成后,即可随时使用该镜像了,例如创建一个容器,让其中运行 bash 应用。

[[email protected] ~]# docker run -it centos:6.6 /bin/bash

列出镜像

[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               4d44acee901c        4 days ago          187.9 MB
centos              latest              0584b3d2cf6d        2 weeks ago         196.5 MB
centos              6.6                 d03626170061        11 weeks ago        202.6 MB

在列出信息中,可以看到几个字段信息

  • 来自于哪个仓库,比如 ubuntu
  • 镜像的标记,比如 14.04
  • 它的 ID 号(唯一)
  • 创建时间
  • 镜像大小

创建镜像

修改镜像

#先使用下载的镜像启动容器
[[email protected] ~]# docker run -it centos:6.6 /bin/bash
[[email protected] /]#
注意:记住容器ID

#在容器中创建一个文件
[[email protected] /]# touch 1.txt

当结束后,我们使用exit退出

#使用docker commit提交更新后的副本
[[email protected] ~]# docker commit -m "Add 1.txt" -a "Docker Newbee" 056d04105607 own/centos:v2
sha256:a75c476f44248a5e16a2a082c9c68b67d446106f302f1453fcd08e9fb45da9ef

其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息

#查看镜像
[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
own/centos          v2                  a75c476f4424        43 seconds ago      202.6 MB
ubuntu              14.04               4d44acee901c        4 days ago          187.9 MB
centos              latest              0584b3d2cf6d        2 weeks ago         196.5 MB
centos              6.6                 d03626170061        11 weeks ago        202.6 MB

之后我们可以使用镜像创建容器

[[email protected] ~]# docker run -it own/centos:v2 /bin/bash

从本地文件导入镜像

要从本地文件系统导入一个镜像,可以使用 openvz(容器虚拟化的先锋技术)的模板来创建: openvz 的模板下载地址为https://openvz.org/Download/templates/precreated

比如,先下载了一个 ubuntu-14.04 的镜像,之后使用以下命令导入:

cat ubuntu-14.04-x86_64-minimal.tar.gz  |docker import - ubuntu:14.04

然后查看新导入的镜像。

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.04               05ac7c0b9383        17 seconds ago      215.5 MB

存出和载入镜像

存出镜像

如果要导出镜像到本地文件,可以使用docker save命令。

[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
own/centos          v2                  a75c476f4424        7 minutes ago       202.6 MB
ubuntu              14.04               4d44acee901c        4 days ago          187.9 MB
centos              latest              0584b3d2cf6d        2 weeks ago         196.5 MB
centos              6.6                 d03626170061        11 weeks ago        202.6 MB
[[email protected] ~]# docker save -o centos:6.6.tar centos:6.6

载入镜像

可以使用 docker load 从导出的本地文件中再导入到本地镜像库,例如

docker load --input centos:6.6.tar
或者
docker load < centos:6.6.tar

移除

如果要移除本地的镜像,可以使用docker rmi命令。注意docker rm是移除容器

[[email protected] ~]# docker rmi own/centos:v2
Untagged: own/centos:v2
Deleted: sha256:a75c476f44248a5e16a2a082c9c68b67d446106f302f1453fcd08e9fb45da9ef
Deleted: sha256:8eb5aa6355c2357a5ba0a5edcfdd834608c168c72a8794d59a917aa7370a3f83

注意:在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器。

容器

容器是 Docker 又一核心概念。

简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。

本章将具体介绍如何来管理一个容器,包括创建、启动和停止等。 启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。

因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。

新建并启动

所需要的命令为docker run

例如,下面的命令输出一下"hello world",之后终止容器

[[email protected] ~]# docker run -it centos:6.6 /bin/echo ‘hello world‘
hello world

这跟在本地直接执行 /bin/echo ‘hello world‘ 几乎感觉不出任何区别

面的命令则启动一个 bash 终端,允许用户进行交互。

[[email protected] ~]# docker run -it centos:6.6 /bin/bash
[[email protected] /]# 

-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,

-i 则让容器的标准输入保持打开。

在交互模式下,用户可以通过所创建的终端来输入命令,例如

[[email protected] /]# pwd
/
[[email protected] /]# ls
bin  etc   lib    lost+found  mnt  proc  sbin     srv  tmp  var
dev  home  lib64  media       opt  root  selinux  sys  usr

当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

启动已终止容器

可以利用 docker start 命令,直接将一个已经终止的容器启动运行。

容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必需的。除此之外,并没有其它的资源。可以在伪终端中利用 ps 或 top 来查看进程信息。

可见,容器中仅运行了指定的 bash 应用。这种特点使得 Docker 对资源的利用率极高,是货真价实的轻量级虚拟化。

守护态运行

更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加 -d 参数来实现

[[email protected] ~]# docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

容器启动后会返回一个唯一的 id,也可以通过 docker ps 命令来查看容器信息。

[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
dcee02fc1845        ubuntu:14.04        "/bin/sh -c ‘while tr"   3 seconds ago       Up 1 seconds                            loving_sinoussi

要获取容器的输出信息,可以通过 docker logs 命令。

[[email protected] ~]# docker logs loving_sinoussi

终止容器

可以使用docker stop来终止一个运行中的容器。

  当Docker容器中指定的应用终结时,容器也自动终止。 例如对于上一章节中只启动了一个终端的容器,用户通过exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。

终止状态的容器可以用 docker ps -a 命令看到。例如

[[email protected] ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES
dcee02fc1845        ubuntu:14.04        "/bin/sh -c ‘while tr"   3 minutes ago       Up 3 minutes                                       loving_sinoussi
4a72efc11598        centos:6.6          "/bin/bash"              9 minutes ago       Exited (0) 3 minutes ago                           dreamy_jennings
2e56a7a5b7a0        centos:6.6          "/bin/echo ‘hello wor"   11 minutes ago      Exited (0) 11 minutes ago                          hungry_jennings
056d04105607        centos:6.6          "/bin/bash"              57 minutes ago      Exited (0) 53 minutes ago                          backstabbing_keller
0facc830073f        centos:6.6          "/bin/bash"              About an hour ago   Exited (0) About an hour ago                       drunk_leavitt

处于终止状态的容器,可以通过 docker start 命令来重新启动。

此外,docker restart 命令会将一个运行态的容器终止,然后再重新启动它

进入容器

在使用 -d 参数时,容器启动后会进入后台。 某些时候需要进入容器进行操作,有很多种方法,包括使用 docker attach 命令或 nsenter 工具等。exec

attach命令

docker attach 是Docker自带的命令。下面示例如何使用该命令。

[[email protected] ~]# docker attach loving_sinoussi

但是使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。 不推荐使用

nsenter命令

安装

nsenter 工具在 util-linux 包2.23版本后包含。 如果系统中 util-linux 包没有该命令,可以按照下面的方法从源码安装。

 cd /tmp; curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24;
./configure --without-ncurses
make nsenter && sudo cp nsenter /usr/local/bin

使用

nsenter 可以访问另一个进程的名字空间。nsenter 要正常工作需要有 root 权限。 很不幸,Ubuntu 14.04 仍然使用的是 util-linux 2.20。安装最新版本的 util-linux(2.24)版,请按照以下步骤:

$ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz; tar xzvf util-linux-2.24.tar.gz
$ cd util-linux-2.24
$ ./configure --without-ncurses && make nsenter
$ sudo cp nsenter /usr/local/bin

给出一个完整的例子。

时间: 2024-10-05 04:58:26

Docker 基本管理的相关文章

docker专题(2):docker常用管理命令(上)

http://segmentfault.com/a/1190000000751601 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: 容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause] 容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|ex

docker supervisor管理进程

一.使用supervisor来管理 supervisor:进程管理工具,基于C/S架构.(其提供web接口给用户查询和 控制),它允许用户去监控和控制在类unix系统的进程. 使用supervisor可以更好的控制.管理.重启我们希望运行的进程. 在这演示一下如何同时使用ssh和 apache 服务.(通过docker buid生成新镜像) 配置 1.首先创建一个dockerfile目录 dockerfile文件内容 supervisor配置文件内容 第一段supervsord配置软件本身,使用

docker图像管理工具介绍

docker集群管理工具包括:Kubernetes.Mesos,Rancher,Swarm,其中图形管理工具包含Kubernetes.Mesos,Rancher.swarm暂时不提供web界面. Kubernetes是google开源的多主机容器管理工具, 简称:k8s,它带有人性化图形管理界面, 它在开源社区很受欢迎github上已经有了20000+的收藏,和7000+的fork. https://github.com/kubernetes/kubernetes Mesos是Apache下的开

paas架构之docker——镜像管理

1. 镜像管理 1.1. 列出镜像 Sudo docker images 1.2. 查看镜像 Sudo docker images xxxx 1.3. 拉取镜像 Sudo docker pull ubuntu 1.4. 查找镜像 Sudo docker search mysql 1.5. 删除镜像 sudo docker rmi xxxxx (force) 1.6. 构建镜像 1.6.1. Docker commit 不推荐,建议使用docker build+ docker file 1.6.2

docker入门——管理容器

除了交互式的容器(interactive container),我们也可以创建长期运行的容器.守护式容器(daemonized container)没有交互式会话,非常适合运行应用程序和服务.大多数时候我们都需要以守护式来运行我们的容器. 创建守护式容器 # docker run --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" 64b5c862a23cb5b

(五)Docker镜像管理3之上传镜像

我这里使用自行在阿里云注册的云服务(免费) 首先创建命名空间 创建仓库 选择你所在的区域,这样是为了速度更快.输入仓库名称.摘要.仓库类型如果只是自己用就选择"私有".如果不需要做自动部署可以选择"本地部署" 建立好之后查看,点击管理:rexcheny是用户名.mycentos6是仓库名 查看本地镜像,并登陆到注册的云服务 docker login [email protected] registry.cn-qingdao.aliyuncs.com 打标签,实际上是

docker常用管理命令

本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: 容器生命周期管理 - docker [run|start|stop|restart|kill|rm|pause|unpause] 容器操作运维 - docker [ps|inspect|top|attach|events|logs|wait|export|port] 容器rootfs命令 - docker [commit|cp|d

docker技术剖析--docker supervisor管理进程

http://hongge.blog.51cto.com/ 使用 Supervisor 来管理进程 Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务.但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本. 例如:docker run –d 镜像 /run.sh 另外就是安装进程管理工具. 本节将使用进程管理工具 supervisor 来管理容器中的多个进程.使

[CoreOS 转载] CoreOS实践指南(七):Docker容器管理服务

转载:http://www.csdn.net/article/2015-02-11/2823925 摘要:当Docker还名不见经传的时候,CoreOS创始人Alex就预见了这个项目的价值,并将其做为CoreOS支持的第一套应用程序隔离方案.本文将主要介绍在具体的场景下,如何在CoreOS中恰当地管理Docker容器. 注:本文首发于CSDN,转载请标明出处. [编者按]在“漫步云端:CoreOS实践指南”系列的前几篇文章中,ThoughtWorks的软件工程师林帆主要介绍了CoreOS及其相关