测试环境: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