docker 镜像操作逻辑图:
docker 是一个容器, 而运行一个容器必须要有镜像, 因为镜像是容器的核心, 我们在 docker 上运行一个服务时需要通过 docker run 运行一个镜像, 才能够进入到该容器中, 我们也可以使用 docker commit 命令 将一个容器制作成一个镜像, 但注意制作一个镜像时需要指定一个完整的镜像名称 (镜像名称 + 版本号), 它默认的版本号是 latest, 表示为最新版本的镜像, 如果不写, 将默认已 latest 结尾.
还可以执行 docker save --output 命令导出该镜像, 而当你需要下载一个服务时, 可以使用 docker load --input 命令导入该镜像, 当然也可以使用 > 号或者 < 号来导入或导出.
也可以从 docker hub 公共仓库中使用 docker pull 拉取镜像, 除了可以拉取, 我们也可以使用 dokcer push 将自己本地的镜像上传到公共仓库中.
如果在公司中是不可能将自己的镜像上传到公共仓库中的, 所以我们可以将镜像上传到自己内部的私有仓库中, 这个私有仓库可以通过官方的 registry 容器来进行构建, 当需要下载某个服务时, 也可以从私有仓库中使用 pull 命令进行拉取.
docker 基本命令:
- // 查看正在运行的容器:
- [[email protected] ~]# docker ps
- // 查看所有容器 (包括没有正在运行的容器)
- [[email protected] ~]# docker ps -a
- // 查看 docker 的信息:
- [[email protected] ~]# docker info
- // 查找镜像:
- [[email protected] ~]# docker search MySQL
- // 下载, 拉取镜像:
- [[email protected] ~]# docker pull httpd
/ 保存镜像为 tar 包:
[[email protected] ~]# docker save --output my-httpd.tar httpd
或者使用:
- [[email protected] ~]# docker save > httpd.tar httpd:latest
- // 查看本地镜像:
- [[email protected] ~]# docker images
注意: latest: 表示是最新版本的镜像, 但不是绝对最新, 因为 TAG 标签可以进行更改.
完整的镜像名称 ----->>> image:latest(镜像名称 + 版本号)
如果版本号默认是以 latest 为结尾, 可以省略不写.
- // 删除镜像:
- [[email protected] ~]# docker rmi httpd:latest
- # 加上 - f 选项可以强制删除:
- [[email protected] ~]# docker rmi -f CentOS:latest
- // 删除容器:(先停止容器后再删除)
- [[email protected] ~]# docker stop my_nginx
- my_nginx
- [[email protected] ~]# docker rm my_nginx
- my_nginx
同样加上 - f 选项可以强制删除:
- [[email protected] ~]# docker rm -f my_nginx
- my_nginx
- // 导入镜像:
- [[email protected] ~]# docker load < my-httpd.tar
或者使用:
- [[email protected] ~]# docker load --input my-httpd.tar
- // 进入容器:
- [[email protected] ~]# docker exec -it test /bin/bash
或者
[[email protected] ~]# docker attach test
注意: 如果是 attach 进入容器, 退出之后, 容器会停止运行, 而 exec 不会
exec 进入容器会开启新的进程, attach 不会 (进入的还是同一个终端).
ctrl + p ctrl +q : 如果是 attach 进入的容器, ctrl + p ctrl +q 退出容器, 并且保持容器运行. #注意两个快捷键得同时按
- // 开启容器:
- [[email protected] ~]# docker start test
- // 关闭容器:
- [[email protected] ~]# docker stop test
- // 重启容器:
- [[email protected] ~]# docker restart test
- // 删除所有容器:
- [[email protected] ~]# docker ps -a -q | xargs docker rm -f
- // 删除所有镜像:
- [[email protected] ~]# docker images -q | xargs docker rmi -f
- // 开启所有容器:
- [[email protected] ~]# docker ps -a -q | xargs docker start
- // 关闭所有容器:
- [[email protected] ~]# docker ps -a -q | xargs docker stop
- // 查看容器的日志:
- [[email protected] ~]# docker logs test2
- // 实时更新日志:
- [[email protected] ~]# docker logs test2 -f
- // 保持容器开启状态 (用于 docker 服务重启之后)
- [[email protected] ~]# docker run -itd --name test3 --restart=always httpd
--restart=always: 随着容器的重启而重启
- // 将容器制作成镜像:
- [[email protected] ~]# docker commit web01 test-Web:v1.0
docker commit 后面跟的是需要制作成镜像的容器, 制作成的镜像名称和标签可以自定义.
- // 运行容器:
- [[email protected] ~]# docker run -itd --name my_nginx -p 80:80 --restart=always nginx:latest
参数解释:
run: 运行一个容器
-itd: i: 可交互
t: 伪终端
d: 保持容器后台运行
--name: 自定义名称为 my_nginx
p: 映射端口, 宿主机端口: 容器内端口
--restart=always: 保持容器运行
以上是 docker 操作的基本命令, 其他方面的 docker 操作命令在后续的博客中会写到.
来源: http://www.bubuko.com/infodetail-3262482.html