docker 常用命令


测试环境:CentOS 7

镜像操作

docker images 列出本地主机上的镜像,等同于 docker image ls

docker pull ubuntu:13.10 拉去 ubuntu:13.10 镜像到本地

docker search 镜像源 从 Docker Hub 网站来搜索镜像

docker rm -f 镜像源[或IMAGE ID] 删除一个本地的镜像

运行一个镜像

用 run 命令运行一个镜像容器

docker run -it ubuntu:15.10 /bin/bash

  • -i: 交互式操作。
  • -t: 终端。
  • -d: 默认不会进入容器,而是后台运行
  • ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。ubuntu 为镜像源,15.10为标签。如不知道标签,默认使用 latest 标签。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

创建镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  • 1、从已经创建的容器中更新镜像,并且提交这个镜像
  • 2、使用 Dockerfile 指令来创建一个新的镜像

更新镜像

在使用镜像创建一个容器之后,进入容器进行一些操作,在退出容器后,可以将更新后的改容器提交成一个新的镜像。

例如,启动一个容器。

docker run -t -i ubuntu:v1 /bin/bash

在运行的容器内使用 apt-get update 命令进行更新。

在完成操作之后,输入 exit 命令来退出这个容器。

我们可以通过命令 docker commit 来提交容器副本。

docker commit -m="has update" -a="itle" 1ba2aa2b9f56 itle/ubuntu:v2

各个参数说明:

  • -m: 提交的描述信息
  • -a: 指定镜像作者
  • 1ba2aa2b9f56:容器 ID
  • itle/ubuntu:v2: 指定要创建的目标镜像名,v2为标签名。

构建镜像

使用Dockerfile,一般不建议自己构建镜像,建议在原有的镜像上进行修改更新。

所以 Dockerfile 要自己去看。


设置镜像标签

docker tag 镜像ID或镜像名 新的镜像名:新标签名

docker tag 1ba2aa2b9f56 itle/ubuntu:v4

仓库管理

仓库(Repository)是集中存放镜像的地方。目前 Docker 官方维护了一个公共仓库 Docker Hub 。大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。

在免费注册一个 Docker 账号之后,就可以在上面存储自己的镜像。

登录和退出

登录需要输入用户名和密码,登录成功后,我们就可以从 docker hub 上拉取自己账号下的全部镜像。

$ docker login

退出 docker hub 可以使用以下命令:

$ docker logout

拉取和推送

可以通过 docker search 命令来查找官方仓库中的镜像,并利用docker pull命令来将它下载到本地。

例如以 redis 为关键词进行搜索

$ docker search redis

拉取默认标签的版本到本地

$ docker pull redis

这时候本地已经有了 redis 的镜像,只需要运行镜像,我们就可以使用 redis 的容器了

$ docker run -itd --name redis-vhr -p 6379:6379 redis:latest

推送镜像

用户登录后,可以通过 docker push 命令将自己的镜像推送到 Docker Hub。

【注意】

需要注意的是,推送镜像的时候需要进行身份验证,而验证的方式是镜像的名称。

镜像名的格式是:username/镜像名:标签

其中,username是你的账户

例如我们要推送 redis 镜像到自己的仓库。先要修改镜像标签,然后再推送

docker tag 镜像ID或镜像名 新的镜像名:新标签名
docker push 新的镜像名:新标签名


容器操作

docker ps -a 查看所有容器

docker start <容器ID> 启动某个已停止的容器

docker stop <容器ID> 停止某个容器

docker restart <容器ID> 重启某个容器

进入容器

在使用 -d 参数时,容器启动后会在后台运行。此时想要进入容器,可以通过以下指令进入:

  • docker attach
  • docker exec:推荐大家使用 docker exec 命令,因为该命令退出容器终端,不会导致容器的停止。

格式:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

例如:

docker exec -it 243c32535da7 /bin/bash

删除容器

docker rm -f <容器ID> 删除某个容器

docker container prune 清除所有处理停止状态的容器

导出容器

使用 docker export 命令可导出本地某个容器。

docker export容器ID > 文件名 将某个容器导出,并命名为指定文件名

导出容器 1e560fca3906 快照到本地文件 ubuntu.tar:

docker export 1e560fca3906 > text.tar

导入容器

使用 docker import 从容器快照文件中再导入为镜像

cat 文件名 | docker import - 镜像名:标签

将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:

cat docker/ubuntu.tar | docker import - test/ubuntu:v1

容器运行 web 应用

在docker容器中运行一个 Python Flask 应用来运行一个web应用。

docker run -d -p 8082:5000 training/webapp python app.py

参数说明:

  • -d:让容器在后台运行。
  • -P:将容器内部使用的网络端口随机映射到我们使用的主机上。
  • -p:指定端口,后面跟随端口
  • 8082:5000: 指定使用8082端口。如使用 -P 不指定,会随机分配
  • training/webapp:容器名称
  • python app.py:web应用运行的命令

查看 web 应用的日志

通过 docker logs [ID或名字] 查看容器内部的标准输出。

root@itle:~$ docker logs -f bf08b7f2cd89
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
192.168.7.111 - - [10/May/2020 16:30:37] "GET / HTTP/1.1" 200 -
192.168.7.111 - - [10/May/2020 16:30:37] "GET /favicon.ico HTTP/1.1" 404 -

-f:docker logs 像使用 tail -f 一样来输出容器内部的标准输出。

查看 web 应用的进程

可以使用 docker top [ID或名字] 查看容器内部运行的进程

root@itle:~$ docker top bf08b7f2cd89
UID     PID         PPID          ...       TIME                CMD
root    23245       23228         ...       00:00:00            python app.py
原文地址:https://www.cnblogs.com/luler/p/15428325.html