Docker常见命令

Docker常见命令

九月 03, 2019

容器相关操作

创建一个容器但是不启动它

docker create

创建并启动一个容器

docker run

停止容器运行,发送信号SIGTERM

docker stop

启动一个停止状态的容器

docker start

重启一个容器

docker restart

删除一个容器

docker rm

发送信号给容器,默认SIGKILL

docker kill

连接(进入)到一个正在运行的容器

docker attach

阻塞到一个容器,直到容器停止运行

docker wait

获取容器相关信息

显示状态为运行(Up)的容器

docker ps

显示所有容器,包括运行中(Up)的和退出的(Exited)

docker ps -a

深入容器内部获取容器所有信息

docker inspect

查看容器的日志(stdout/stderr)

docker logs

得到docker服务器的实时的事件

docker events

显示容器的端口映射

docker port

显示容器的进程信息

docker top

显示容器文件系统的前后变化

docker diff

导出容器

从容器里向外拷贝文件或目录

docker cp

将容器整个文件系统导出为一个tar包,不带layers、tag等信息

docker export

执行

在容器里执行一个命令,可以执行bash进入交互式

docker exec

镜像操作

显示本地所有的镜像列表

docker images

从一个tar包创建一个镜像,往往和export结合使用

docker import

使用Dockerfile创建镜像(推荐)

docker build

从容器创建镜像

docker commit

删除一个镜像

docker rmi

从一个tar包创建一个镜像,和save配合使用

docker load

将一个镜像保存为一个tar包,带layers和tag信息

docker save

显示生成一个镜像的历史命令

docker history

为镜像起一个别名

docker tag

镜像仓库(registry)操作

登录到一个registry

docker login

从registry仓库搜索镜像

docker search

从仓库下载镜像到本地

docker pull

将一个镜像push到registry仓库中

docker push

获取Container IP地址(Container状态必须是Up)

docker inspect id | grep IPAddress | cut -d '"' -f 4

获取端口映射

docker inspect -f '{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' id

获取环境变量

docker exec container_id env

杀掉所有正在运行的容器

docker kill $(docker ps -q)

删除老的(一周前创建)容器

docker ps -a | grep 'weeks ago' | awk '{print $1}' | xargs docker rm

删除已经停止的容器

docker rm `docker ps -a -q`

删除所有镜像,小心

docker rmi $(docker images -q)

Dockerfile

Dockerfile是docker构建镜像的基础,也是docker区别于其他容器的重要特征,正是有了Dockerfile,docker的自动化和可移植性才成为可能。

不论是开发还是运维,学会编写Dockerfile几乎是必备的,这有助于你理解整个容器的运行。
FROM , 从一个基础镜像构建新的镜像
FROM ubuntu

MAINTAINER , 维护者信息
MAINTAINER William

ENV , 设置环境变量
ENV TEST 1

RUN , 非交互式运行shell命令
RUN apt-get -y update
RUN apt-get -y install nginx

ADD , 将外部文件拷贝到镜像里,src可以为url
ADD http://nicescale.com/  /data/nicescale.tgz

WORKDIR /path/to/workdir, 设置工作目录
WORKDIR /var/www

USER , 设置用户ID
USER nginx

VULUME <#dir>, 设置volume
VOLUME [‘/data’]

EXPOSE , 暴露哪些端口
EXPOSE 80 443

ENTRYPOINT [‘executable’, ‘param1’,’param2’]执行命令
ENTRYPOINT ["/usr/sbin/nginx"]

CMD [“param1”,”param2”]
CMD ["start"]

docker创建、启动container时执行的命令,如果设置了ENTRYPOINT,则CMD将作为参数

Dockerfile最佳实践

尽量将一些常用不变的指令放到前面

CMD和ENTRYPOINT尽量使用json数组方式

通过Dockerfile构建image

docker build csphere/nginx:1.7 .

镜像仓库Registry

镜像从Dockerfile build生成后,需要将镜像推送(push)到镜像仓库。企业内部都需要构建一个私有docker registry,这个registry可以看作二进制的scm,CI/CD也需要围绕registry进行。

部署registry

mkdir /registry
docker run  -p 80:5000  -e STORAGE_PATH=/registry  -v /registry:/registry  registry:2.0

推送镜像保存到仓库

假设192.168.1.2是registry仓库的地址:
docker tag csphere/nginx:1.7 192.168.1.2/csphere/nginx:1.7
docker push 192.168.1.2/csphere/nginx:1.7

几个简单小例子

容器操作

1.创建并拉取redis

docker pull redis:latest

2.创建测试容器

docker run -d --name xxx redis/test:0.1
efc9bda4a2ff2f479b18e0fc4698e42c47c9583a24c93f5ce6b28a828a172709

3.登陆到xxx中

docker exec -it con03 /bin/bash
[root@... /]# exit
  1. 1. 容器相关操作
    1. 1.1. 创建一个容器但是不启动它
    2. 1.2. 创建并启动一个容器
    3. 1.3. 停止容器运行,发送信号SIGTERM
    4. 1.4. 启动一个停止状态的容器
    5. 1.5. 重启一个容器
    6. 1.6. 删除一个容器
    7. 1.7. 发送信号给容器,默认SIGKILL
    8. 1.8. 连接(进入)到一个正在运行的容器
    9. 1.9. 阻塞到一个容器,直到容器停止运行
    10. 1.10. 获取容器相关信息
    11. 1.11. 显示状态为运行(Up)的容器
    12. 1.12. 显示所有容器,包括运行中(Up)的和退出的(Exited)
    13. 1.13. 深入容器内部获取容器所有信息
    14. 1.14. 查看容器的日志(stdout/stderr)
    15. 1.15. 得到docker服务器的实时的事件
    16. 1.16. 显示容器的端口映射
    17. 1.17. 显示容器的进程信息
    18. 1.18. 显示容器文件系统的前后变化
    19. 1.19. 导出容器
    20. 1.20. 从容器里向外拷贝文件或目录
    21. 1.21. 将容器整个文件系统导出为一个tar包,不带layers、tag等信息
    22. 1.22. 执行
    23. 1.23. 在容器里执行一个命令,可以执行bash进入交互式
  2. 2. 镜像操作
    1. 2.1. 显示本地所有的镜像列表
    2. 2.2. 从一个tar包创建一个镜像,往往和export结合使用
    3. 2.3. 使用Dockerfile创建镜像(推荐)
    4. 2.4. 从容器创建镜像
    5. 2.5. 删除一个镜像
    6. 2.6. 从一个tar包创建一个镜像,和save配合使用
    7. 2.7. 将一个镜像保存为一个tar包,带layers和tag信息
    8. 2.8. 显示生成一个镜像的历史命令
    9. 2.9. 为镜像起一个别名
  3. 3. 镜像仓库(registry)操作
    1. 3.1. 登录到一个registry
    2. 3.2. 从registry仓库搜索镜像
    3. 3.3. 从仓库下载镜像到本地
    4. 3.4. 将一个镜像push到registry仓库中
    5. 3.5. 获取Container IP地址(Container状态必须是Up)
    6. 3.6. 获取端口映射
    7. 3.7. 获取环境变量
    8. 3.8. 杀掉所有正在运行的容器
    9. 3.9. 删除老的(一周前创建)容器
    10. 3.10. 删除已经停止的容器
    11. 3.11. 删除所有镜像,小心
  4. 4. Dockerfile
    1. 4.1. Dockerfile是docker构建镜像的基础,也是docker区别于其他容器的重要特征,正是有了Dockerfile,docker的自动化和可移植性才成为可能。
  5. 5. Dockerfile最佳实践
    1. 5.1. 尽量将一些常用不变的指令放到前面
    2. 5.2. 通过Dockerfile构建image
  6. 6. 镜像仓库Registry
    1. 6.1. 镜像从Dockerfile build生成后,需要将镜像推送(push)到镜像仓库。企业内部都需要构建一个私有docker registry,这个registry可以看作二进制的scm,CI/CD也需要围绕registry进行。
  7. 7. 部署registry
    1. 7.1. 推送镜像保存到仓库
  8. 8. 几个简单小例子
  9. 9. 容器操作
    1. 9.1. 1.创建并拉取redis
    2. 9.2. 2.创建测试容器
    3. 9.3. 3.登陆到xxx中