<Docker 容器与容器云>
子命令分类 | 子命令 |
---|---|
Docker 环境信息 | info、version |
容器生命周期管理 | create、exec、kill、pause、restart、rm、run、start、stop、unpause |
镜像仓库命令 | login、logout、pull、push、search |
镜像管理 | build、images、import、load、rmi、save、tag、commit |
容器运维管理 | attach、export、inspect、port、ps、rename、stats、top、wait、cp、diff、update |
容器资源管理 | volume、network |
系统日志信息 | events、history、logs |
命令结构图
容器生命周期管理
docker run
docker run --help
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
// 启动一个容器
Run a command in a new container
基于特定的镜像创建一个容器,并依据选项来控制该容器。
从 ubuntu 启动一个容器,并为它分配一个伪终端执行
/bin/bash
命令,用户可以在该伪终端与容器进行交互
sudo docker run -it – name mytest ubuntu:latest /bin/bash
-i
选项:表示交互模式,始终保持输入流开放-t
选项:表示分配一个伪终端,一般两个参数结合时使用 -it,即可在容器中利用打开的伪终端进行交互操作--name
选项:可以指定docker run
命令启动的容器名字,若无此选项,Docker
将为容器随机分配一个名字
从 ubuntu 镜像上启动一个容器,并命名为 console,同时将新启动的 console容器连接到名为 redisName 的容器上
sudo docker run –link redisName:redis –name console ubuntu bash
主机的 ~/project/Django/app2 被挂载容器内的 /usr/src/app 目录
sudo docker run -it –name app2 –link redis-master:db -v ~/project/Django/app2:/usr/src/app django /bin/bash
将容器内的 6301 端口,绑定到主机的 6034 端口,这样外部主机可通过访问主机的 6034 端口来访问容器的 6031
sudo docker run -it –name HAProxy – app2:app2 -p 6401:6301 -v /home/danner/project/HAProxy/:/tmp haproxy /bin/bash
--link
选项:进行容器间安全的交互通信,可以避免容器的IP
和端口暴露到外网所导致的安全问题,还可以放置容器在重启后IP
地址变化导致的访问失效。它的原理类似DNS
服务器的域名和地址映射。当容器的IP
地址发生变化时,Docker
将自动维护映射关系中的IP
地址。-c
选项:用于给运行在容器中的所有进程分配CPU
的shares
值,这是一个相对权重,实际的处理速度还与宿主机的CPU
相关-m
选项:用于限制为容器中所有进程分配的内存总量,以B
、K
、M
、G
为单位-v
选项:用于挂载一个volume
,可以用多个-v
参数同时挂载多个volume
。volume
的格式为[host-dir]:[container-dir]:[rw|ro]
-p
选项:用于将容器的端口暴露给宿主机的端口,其常用格式为hostPost:container-Port
。通过端口的暴露,可以让外部主机通过宿主机暴露的端口来访问容器内的应用。
docker start/stop/restart
对于已存在的容器,可以通过 docker start/stop/restart
命令启动、停止和重启。容器创建时自动为每个新容器分配唯一的 ID
作为标识,docker start/stop/restart
命令一般利用容器 ID
标识确定具体容器;在一些情况下,也使用容器名来确定容器。
docker start
命令使用 -i
选项来开启交互模式,始终保持输入流开发。使用 -a
选项来附加标准输入、输出或者错误输出。此外,docker stop
和 docker restart
命令使用 -t
选项来设定容器停止前的等待时间。
镜像仓库
Docker registry
是存储容器镜像的仓库,用户可以通过 Docker client
与 Docker registry
进行通信,以此来完成镜像的搜索、下载和上传等相关操作。Docker Hub
是 Docker
公司提供的共有镜像云服务。
docker pull
从 Docker registry
拉起 image
或 repository
。pull
命令还可以从私有服务器拉取镜像,只需在具体的镜像名称前添加用户名、特定库名或者服务器地址即可获取镜像。
// 从官方 Hub 拉取指明 ubuntu12.04 tag 的镜像
sudo docker pull ubuntu:ubuntu12/04
// 从 10.10.103.215 镜像库拉取 sshd
sduo docker pull 10.10.103.215:5000/sshd
docker push
docker push [OPTIONS] NAME[:TAG]
// ubuntu 镜像推送到 SEL
docker push SEL/ubuntu
将本地的 image
或 repository
推送到服务器
镜像管理
管理本地保存镜像资源,images
、rmi
、rm
子命令。
docker images
列出本地的镜像,默认只列出最顶层镜像,-a
显示所有镜像
[danner@localhost project]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/haproxy latest a14eeb9c0f50 3 weeks ago 91.1 MB
docker.io/ubuntu latest a2a15febcdf3 3 weeks ago 64.2 MB
docker.io/redis latest f7302e4ab3a8 3 weeks ago 98.2 MB
docker.io/django latest eb40dcf64078 2 years ago 436 MB
docker rmi/rm
docker rmi
删除镜像,docker rm
删除容器;它们也可同时删除多个镜像或容器,也可按条件来删除。当使用 rmi
删除镜像时,若当前镜像有容器在运行,需先删除容器或使用 -f
强制删除镜像;rm
同理可用 -f
强制删除正在运行的容器。
容器运维操作
docker attach
docker attach
可以连接到正在运行的容器,观察该容器的运行情况或与容器进行交互。
sudo docker attach bff010c2d6ad // container ID ;
docker inspect
查看容器和镜像的详细信息,默认列出全部信息,可以通过 --format
参数来指定输出的模板格式。
// 默认输出太长了,这里不列出
[danner@localhost project]$ sudo docker inspect --help
Usage: docker inspect [OPTIONS] NAME|ID [NAME|ID...]
Return low-level information on Docker objects
Options:
-f, --format string Format the output using the given Go template
--help Print usage
-s, --size Display total file sizes if the type is container
--type string Return JSON for specified type
docker ps
显示正在运行的容器信息
[danner@localhost project]$ sudo docker ps //主要用来查看容器ID ^-^
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
626f9efb575b django "/bin/bash" 16 hours ago Up 16 hours app1
4164c692f262 haproxy "/docker-entrypoin..." 16 hours ago Up 16 hours 0.0.0.0:6401->6301/tcp HAProxy
04db445bf95c redis "docker-entrypoint..." 16 hours ago Up 16 hours 6379/tcp redis-slave2
a630ba2ca4f7 redis "docker-entrypoint..." 16 hours ago Up 16 hours 6379/tcp redis-slave1
94df1a760c30 redis "docker-entrypoint..." 16 hours ago Up 16 hours 6379/tcp redis-master
-a
选项:查看所有容器,包含已停止的容器-l
选项:只查看最新创建的容器,包括不在运行中的容器
其他命令
docker commit
[danner@localhost project]$ sudo docker commit
"docker commit" requires at least 1 and at most 2 argument(s).
See 'docker commit --help'.
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new image from a container's changes
将一个正在运行的容器固化为一个新的镜像:当需要制作特定的镜像时,会进行修改容器的配置,可以通过 commit
命令将这些修改保存起来,使其不会因为容器的停止而丢失。官方不推荐使用此命令来制作镜像,建议通过 docker build
命令结合 Dockerfile
创建和管理镜像。
event history logs
这三个命令查看 Docker
的系统*日志信息:
events
命令打印出实时的系统事件;history
命令打印出指定镜像的历史版本信息(构建该镜像的每一层镜像的命令记录);logs
命令打印出容器中进程的运行日志