容器声明周期管理
创建容器并运行 run
docker run [OPTIONS] image [command] [ARG]
OPTIONS说明:
- -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -P: 随机端口映射,容器内部端口随机映射到主机的端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- —name=”nginx-lb”: 为容器指定一个名称;
- —dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
- —dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
- -h “mars”: 指定容器的hostname;
- -e username=”ritchie”: 设置环境变量;
- —env-file=[]: 从指定文件读入环境变量;
- —cpuset=”0-2” or —cpuset=”0,1,2”: 绑定容器到指定CPU运行;
- -m :设置容器使用内存最大值;
- —net=”bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
- —link=[]: 添加链接到另一个容器;
- —expose=[]: 开放一个端口或一组端口;
- —volume , -v: 绑定一个卷
# 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
$ docke run -d --name munginx nginx:latest
# 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 8080 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /etc/data。
$ docker run -d -p 8080:80 -v /data:/etc/data --name mynginx nginx:latest
# 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
$ docker run -it nginx:latest /bin/bash
启停命令 start/stop/restart/kill
# 启动容器
$ docker start [容器名/容器ID]
# 停止容器
$ docker stop [容器名/容器ID]
# 重启容器
$ docker restart [容器名/容器ID]
# 杀掉一个运行中的容器
$ docker kill [容器名/容器ID]
删除容器 rm
docker rm [OPTIONS] [容器名/容器ID]
OPTIONS说明:
- -f :通过 SIGKILL 信号强制删除一个运行中的容器。
- -l :移除容器间的网络连接,而非容器本身。
- -v :删除与容器关联的卷。
# 强制删除容器 db01、db02
$ docker rm -f db01 db02
# 移除容器 nginx01 对容器 db01 的连接,连接名 db:
$ docker rm -l db
# 删除容器 nginx01, 并删除容器挂载的数据卷
$ docker rm -v nginx01
# 删除所有已经停止的容器:
$ docker rm $(docker ps -a -q)
暂停/恢复 pause/unpause
# 暂停容器db01
$ docker pause db01
# 恢复容器db01
$ docker unpause db01
创建容器但不运行 create
docker create [OPTIONS]
options同run命令
在容器中执行命令 exec
docker exec [OPTIONS]
OPTIONS说明:
- -d :分离模式: 在后台运行
- -i :即使没有附加也保持STDIN 打开
- -t :分配一个伪终端
# 在容器 mynginx 中开启一个交互模式的终端:
$ docker exec -it mynginx /bin/bash
# 在容器 mynginx 中以交互模式执行容器内 /root/runoob.sh 脚本
$ docker exec -it mynginx /bin/sh /root/runoob.sh
容器操作
容器列表 ps
docker ps [OPTIONS]
OPTIONS说明:
- -a :显示所有的容器,包括未运行的。
- -f :根据条件过滤显示的内容。
- —format :指定返回值的模板文件。
- -l :显示最近创建的容器。
- -n :列出最近创建的n个容器。
- —no-trunc :不截断输出。
- -q :静默模式,只显示容器编号。
- -s :显示总的文件大小。
CONTAINER ID IMAGE COMMAND ... PORTS NAMES
09b93464c2f7 nginx:latest "nginx -g 'daemon off" ... 80/tcp, 443/tcp myrunoob
96f7f14e99ab mysql:5.6 "docker-entrypoint.sh" ... 0.0.0.0:3306->3306/tcp mymysql
输出详情介绍:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
状态有7种:
- created(已创建)
- restarting(重启中)
- running(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
例:
# 根据标签过滤
$ docker ps --filter "label=color"
$ docker ps --filter "label=color=blue"
# 根据名称过滤
$ docker ps --filter"name=test-nginx"
# 根据状态过滤
$ docker ps -a --filter 'exited=0'
$ docker ps --filter status=running
$ docker ps --filter status=paused
# 根据镜像过滤
$ docker ps --filter ancestor=nginx
$ docker ps --filter ancestor=d0e008c6cf02
# 根据启动顺序过滤
$ docker ps -f before=9c3527ed70ce
$ docker ps -f since=6e63f6ff38b0
获取容器日志 logs
docker logs [OPTIONS] [容器名/容器ID]
OPTIONS说明:
- -f : 跟踪日志输出
- —since :显示某个开始时间的所有日志
- -t : 显示时间戳
- —tail :仅列出最新N条容器日志
# 查看容器mynginx从2016年7月1日后的最新10条日志。
docker logs --since="2016-07-01" --tail=10 mynginx
从服务器获取实时事件 events
docker events [OPTIONS]
OPTIONS说明:
- -f :根据条件过滤事件;
- —since :从指定的时间戳后显示所有事件;
- —until :流水时间显示到指定的时间为止;
# 显示docker 镜像为mysql:5.6 2016年7月1日后的相关事件。
docker events -f "image"="mysql:5.6" --since="1467302400"
查看容器中运行的进程信息 top
docker top [OPTIONS] [容器名/容器ID]
# 查询所有容器的进程信息
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
注:如果指定的时间是到秒级的,需要将时间转成时间戳。如果时间为日期的话,可以直接使用,如—since=”2016-07-01”。
查看容器端口 port
docker port [容器名/容器ID]
获取容器元数据 inspect
docker inspect [OPTIONS] [容器名/容器ID]
OPTIONS说明:
- -f :指定返回值的模板文件。
- -s :显示总的文件大小。
- —type :为指定类型返回JSON。
镜像仓库
登录指定Doker hub
# 登陆到Docker Hub
docker login -u 用户名 -p 密码
# 登出Docker Hub
docker logout
从镜像仓库中拉取或者更新指定镜像 pull
从Docker Hub查找镜像 search
本地镜像管理
列出本地镜像 images
# 查询本地所有镜像
sudo docker images
# 查询本地镜像中所有gitlab的镜像列表
sudo docker images gitlab
移除本地镜像 rmi
# 移除指定镜像
docker rmi [ 镜像名 或 镜像ID ]
# 删除所有未被 tag 标记和未被容器使用的镜像
docker image prune
# 删除所有未被容器使用的镜像:
docker image prune -a
# 删除所有停止运行的容器:
docker container prune
镜像标记 tag
# 将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像。
docker tag ubuntu:15.10 runoob/ubuntu:v3
历史命令 history
docker history [镜像名]
归档命令 save
docker save -o [归档文件] [镜像名]
# 将镜像 runoob/ubuntu:v3 生成 my_ubuntu_v3.tar 文档
docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
加载归档镜像 load
docker load --input my_ubuntu_v3.tar
从归档文件中创建镜像 import
# 从镜像归档文件my_ubuntu_v3.tar创建镜像,命名为runoob/ubuntu:v4
docker import my_ubuntu_v3.tar runoob/ubuntu:v4
Docker状态
显示 Docker 系统信息,包括镜像和容器数。 info
docker版本信息 version
时间同步
解决方案
1、利用Dockerfile创建镜像时。在Dockerfile中加入
ENV TIME_ZONE=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone
2、容器创建时。加入时区挂载选项:-v /etc/localtime:/etc/localtime。实例:
docker run -d -p 6379:6379 -v /etc/localtime:/etc/localtime —name test-redis redis
3、容器已启动时。
docker exec -it container /bin/bash // 进入交互模式,container为容器ID或名称,下同
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
docker restart container // 重启容器
docker exec container date -R // 查看时区
