Docker快速回忆笔记
Docker是一个很好用的工具,许多程序员把docker看成是高大上的工具,是不对的。作为一个程序员有必要牢牢学会Docker的基本用法,就像是如何使用doc一样信手念来。
Docker 久了不用了,经常会把一些基础的概念,基本的命令忘记。之前写过一篇Docker常用的命令,仅记录一些命令,本文提供了一些案例及问题,了让各位小伙伴快速唤起docker的记忆而写的。
Docker的基本概念
1.Docker 包括三个基本概念:
-
镜像(Image):Docker 镜像(Image),就相当于是一个打包好的系统(想想我们过去常用的系统光盘ISO镜像)
-
容器(Container):容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。画重点:
Docker 容器通过 Docker 镜像来创建
-
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
2.docker概念一览表
No. | 概念名 | 解释 |
---|---|---|
Docker镜像(Images) | 镜像是一个打包好的文件系统,是容器的模板 | |
Docker容器(Container) | 容器是一个运行的应用,是镜像的运行实体 | |
Docker客户端(Client) | 客户端用来与主机进行交互通讯,通过用户通过客户端输入命令,下达到Docker主机 | |
Docker主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 | |
Docker仓库(Docker Registry) | 存储docker镜像的地方 | |
Docker机器(Docker Machine) |
Docker的一些重要工具及地址
Docker常见疑问快速回忆处理
0.常用的容器命令
- 启/停容器
# 中央镜像库中拉去镜像
docker pull training/webapp
# 通过一个镜像后台启动一个容器,并设置随机映射端口
docker run -d -P training/webapp python app.py
# -P(大写P)为内部端口号随机映射到主机的端口号
# -p 5000:5001 使用小写,可定义端口映射 5000为主机端口,5001为容器端口
# 启动/停止/重启镜像/删除
docker <start|stop|restart|rm> <containerName|Id>
- 常用的状态查看命令
# 查看所有运行中的容器
docker ps
# 查看所有本地镜像
docker images
# 查看某个容器的状态
docker inspect <containerName|Id>
# 查看某个容器内部的运行进程
docker top <containerName|Id>
# 查看某个容器的日志
docker logs -f <containerName|Id>
# 在中央库中查找一个镜像
docker search <keyword>
1.如何通过镜像启动容器
docker run -d <imageName:tag>
-d为后台运行,执行完命令后,不会停止容器,会继续挂着(可通过
docker exec
进入容器内部),一般情况下,命令执行完后,会立即关掉容器
2.如何查看本地拥有的镜像列表
及所有容器列表
# 查看本地的镜像列表
docker images
# 查看容器列表
docker ps # 查看当前运行中的容器
docker ps -a # 查看当前所有容器,过去启动过的已停止的,也会列出来
docker ps -a
可以查看所有的容器,所有通过docker run
命令启动的都会列出来
3.如何进入一个容器的内部交互终端
docker exec -it <containerId|containerName> /bin/bash
注意容器未启动则,
docker exec
命令无法使用
其实docker exec
本质是指定一个容器,执行该容器下的某个命令,要想进入该容器,我们需要执行/bin/bash
,所以上面命令可以进入到容器内部;当然也可以通过该命令执行容器内部的其他命令
4.修改了一个容器内部系统的文件,如何持久化对容器的修改(生成一个新docker Image)
我们知道一个容器是经常删除的,是不稳定的,因此,如何
持久化容器
中的修改内容呢?
- 方法一: 使用
docker export
命令将容器导出为*.tar容器快照
docker export <containerName|Id> > <newName>.tar
# docker export 1e560fca3906 > myUbuntu.tar
导出人
myUbuntu.tar
快照包,可以通过docker import
命令重新导入为docker 镜像
(注意,是dokcer镜像),在本地的images镜像库,可通过docker images
命令查看
通过如下命令可将容器快照导入为docker镜像
# 导入tar为docker images
cat ./myUbuntu.tar | docker import - myImages/ubuntu:v1
# 当然,也可以直接指定快照*.tar的目录,甚至是URL都可以直接导入
docker import http://example.com/exampleimage.tgz myImages/testImages:v2
- 方法二: 使用
docker commit
创建一个新镜像版本
可以直接将一个容器提交为一个新版本的镜像
docker commit -m="some msg" -a="Mr.XiaoMing" <containerName|Id> <imageName:tag>
# eg: docker commit -m="some msg" -a="Mr.XiaoMing" e228ed010168 myImages/ubuntu:v2
提交后,直接在本地镜像库中创建了一个新的镜像,可以直接通过该镜像运行一个容器,通过docker images
可以查看新创建的镜像
5.如何导出/导入一个本地的Docker Image镜像
使用docker save
可直接将一个本地镜像导出一个压缩文件,然后复制到其他Docker服务器中导入使用
docker save <sourceImageName> > <tagestFileName.tar.gz>
# 可以直接一次性导出多个Image镜像到压缩文件中
docker save <sourceImageName1> <sourceImageName2> <sourceImageName3> > <tagestFileName.tar.gz>
使用docker load
可以将导出的镜像压缩文件,再次导入到本地镜像
docker load
6.删除容器/镜像
# 删除一个容器
docker rm <containerName> # 运行中的容器无法删除
# 强制删除运行中的容器
dcoker rm -f <containerName>
# 删除镜像
docker rmi <imageName>
# 强制删除
docker rmi -f <imageName>
如果镜像正在运行,或曾经运行过是无法直接删除的,需要使用强制删除;
批量删除已停止的容器
docker container prune
7.如何挂在数据卷实现主机目录与容器内的目录对应
方法一: 直接挂载目录法(Bind Mount)
使用docker run
创建容器时,指定-v /host/path/data:/container/path/data
参数,实现本地任意目录挂在到容器目录
docker run -itd --name <newContainerAlias> -v </host/path>:</conatiner/path> <imageName:tag> /bin/bash
# eg docker run -itd --name vUbuntu -v /docker/vUbuntu:/data ubuntu:15.10 /bin/bash
注意通过指定主机目录路径的方式,主机目录必须是完整的
绝对路径
方法二: 使用docker的volumes管理创建volume
使用docker run
创建容器前,先通过docker volume create <newVolumeName>
# 创建数据卷
dokcer volume create myUbuntuData
# 挂载刚才的创建的数据卷
ocker run -itd --name vUbuntu -v myUbuntuData:/data ubuntu:15.10 /bin/bash
注意 Bind方式与Volumes方式是有区别的,前者会忽略容器中的绑定目录的内容,只能读到主机的绑定目录;后者会把容器中的内容复制到主机的volume目录
这里介绍一下对docker volume的相关命令
查看所有数据卷docker volume ls
查看指定数据卷docker volume inspect <volumeName>
删除一个数据卷docker volume rm <volumeName>
删除没使用的数据卷(谨慎使用)docker volume prune
推荐docker学习的网址 http://www.yunweipai.com/34721.html