docker 学习笔记
Docker 三要素
镜像(Images)
- 定义:只读模板,用于创建Docker容器。
- 特点:一个镜像可以创建多个容器。
容器(Containers)
- 定义:独立运行的一个或一组应用。
- 特点:用镜像创建的运行实例,每个容器都是相互隔离的。
仓库
- 定义:集中存放镜像文件的地方。
- 分类:公开仓库和私有仓库。
- 最大公开仓库:Docker Hub (https://hub.docker.com)
- 仓库与仓库注册服务器的区别
- 仓库注册服务器:放置多个仓库,每个仓库中包含多个镜像,每个镜像有不同的标签。
阿里云镜像加速
设置本机Docker加速配置
-
vim /etc/docker/daemon.json
-
把阿里云中的配置案例复制下来,修改其中的配置信息:
{ "registry-mirrors": ["复制的个人加速地址"] }
-
重新加载:
systemctl daemon-reload
-
重启Docker:
systemctl restart docker
-
查看Docker在本机的进程信息:
ps -ef|grep docker
Docker 命令
帮助命令
docker version
- 说明:查看Docker版本。
docker info
- 说明:查看Docker信息。
docker --help
- 说明:查看Docker的帮助。
镜像命令
docker images
- 说明:查看本地所有镜像。
- 参数:
-a
: 列出所有镜像(包括中间映像层)。-q
: 只显示镜像ID。--digests
: 显示镜像的摘要信息。--no-trunc
: 显示完整镜像信息。
docker search [参数] 镜像名
- 说明:查询镜像。
- 参数:
-s
: 收藏数不小于指定值的镜像。--automated
: 只列出automated build类型的镜像。--no-trunc
: 显示完整镜像信息。
docker push 镜像名[:TAG]
- 说明:下载镜像。
docker rmi [参数] 镜像名1[:TAG] 镜像名2[:TAG]...
- 说明:删除一个或多个镜像。
- 参数:
-f
: 强制删除。
docker rmi [参数] $(docker images -qa)
- 说明:删除全部镜像。
- 参数:
-f
: 强制删除。
基本操作
docker inspect 镜像名
- 说明:查看镜像名的配置。
docker start [-i] 镜像名
- 说明:启动镜像,-i参数是以交互式启动。
docker attach 镜像名
- 说明:进入正在运行的镜像。
netstat -anp | grep 端口号
- 说明:查看端口占用。
守护式进程
- 运行
docker run -i -t 镜像名 /bin/bash
Ctrl+p Ctrl+q
: 退出交互式容器,但后台还继续运行。
- 查看运行镜像中的进程
docker top 镜像名
- 在运行的镜像中启动新进程
docker exec [-d] [-i] [-t] 镜像名 [command] [arg....]
- 停止守护容器
docker stop 镜像名
docker kill 镜像名
容器端口映射
docker run [-P|-p] -i -t 镜像名
-P
: publish-all=true | false (默认) 暴露所有端口。-p
: publish=[] 指定端口映射。- 格式:
- 指定容器端口:
docker run -p 端口号 -i -t 镜像名 /bin/bash
- 主机端口:容器端口:
docker run -p 主机端口:容器端口 -i -t 镜像名 /bin/bash
- IP地址::容器端口:
docker run -p IP地址::容器端口 -i -t 镜像名 /bin/bash
- IP地址:主机端口:容器端口:
docker run -p IP地址:主机端口:容器端口 -i -t 镜像名 /bin/bash
- 指定容器端口:
- 格式:
其他常用命令
docker run [参数] 镜像名 [command] [arg...]
- option:
--name="容器新名字"
:为容器指定一个名称。-d
:后台运行容器,并返回容器ID,启动守护式容器。-i
:以交互式模式运行容器,通常与-t同时使用。-t
:为容器重新分配一个伪输入终端,通常与-i使用。-P
:随机端口映射,通常与-t使用。-p
:指定端口映射。
- option:
Ctrl p + q
: 退出容器,但后台继续运行容器。exit
: 退出容器,容器停止运行。docker kill 容器名称
- 说明:强制停止容器的运行。
docker logs -f -t --tail 容器id
- 说明:查看容器运行日志。
-f
:跟随最新的日志打印。-t
:加入时间戳。--tail
:数字,显示最后多少条。
docker top 容器id
- 说明:查看容器内运行的进程。
docker inspect 容器id
- 说明:查看容器内部细节。
docker attach 容器id
- 说明:直接进入容器启动命令的终端,不会启动新的进程。
docker exec -it 容器id bash shell
- 说明:在容器中打开新的终端,并启动新的进程。
docker cp 容器id:容器内路径 目的主机的路径
- 说明:从容器中拷贝文件到主机上。
Docker 镜像
- 联合文件系统
- 特性:分层,轻量级高性能的文件系统,对文件系统的修改作为一次提交来一层层的叠加。
- 一次同时加载多个文件系统。
- 镜像都是只读的。
docker commit [参数] 镜像id 要创建的目标镜像名:[标签名]
- 说明:提交容器副本使之成为一个新的镜像。
- 参数:
-m
: 提交的描述信息。-a
: 作者。
- 示例:
docker commit -a="zhangxiaosan" -m="it is tomcat which is haven't doct" e9bd0c5f0a37 zhangxiaosan/tomcat:9
Docker 容器数据卷
- 功能:做数据持久化+容器数据共享。
- 命令:
docker run -it -v /主机绝对路径目录:/容器内目录:[权限] 镜像名
- 权限:
ro
: read only 只读。wo
: write only 只写。
- 权限:
DockerFile
- 定义:镜像的构建文件,是由命令和参数组成的脚本。
- 构建镜像:
docker build -f Dockerfile所在目录 -t 构建的镜像标识/构建的镜像名
- 示例:
docker build -f /mydocker/Dockerfile -t zhangxiaosan/myDockerfileDemo1
- 示例:
- DockerFile解析过程
- 注意事项:
- 每条保留字指令必须为大写且之后跟有至少一个参数。
- 指令从上往下顺序执行。
#
表示注解。- 每条指令都会创建一个新的镜像层,并对镜像进行提交。
- 解析过程:
- Docker从基础镜像运行一个容器。
- 执行一条指令并对容器进行修改。
- 执行类似的
docker commit
的操作提交一个新的镜像层。 - Docker再基于刚提交的镜像运行一个新的容器。
- 执行DockerFile中的下一条指令,直到所有的指令都执行完成。
- 注意事项:
Dockerfile 保留字指令
FROM
- 定义:基础镜像,当前新的镜像是基于哪个镜像。
MAINTAINER
- 定义:镜像维护者的姓名和邮箱。
RUN
- 定义:容器构建时需要运行的命令。
EXPOSE
- 定义:当前容器暴露的端口号。
WORKDIR
- 定义:指定容器创建后,终端登录进来的工作目录。
- 默认:未指定时工作目录为根目录。
ENV
- 定义:用来在构建镜像过程中设置的环境变量。
ADD
- 定义:将宿主机目录下的文件拷贝到镜像。
- 特点:ADD命令会自动处理URL和解压tar压缩包。
COPY
- 定义:类似ADD,拷贝文件或目录到镜像中。
- 用法:
- 方式1:
COPY src dest
- 方式2:
COPY ["src", "dest"]
- 方式1:
VOLUME
- 定义:容器数据卷,用于保存数据和持久化工作。
CMD
- 定义:指定一个容器启动时需要运行的命令。
- 特点:Dockerfile中可以有多个CMD指令,但只有最后一个生效;CMD会被
docker run
之后的参数替换。
ENTRYPOINT
- 定义:指定一个容器启动时需要运行的命令。
- 特点:与CMD类似,可以有多个,但是不会像CMD被
docker run
之后的参数替换,而是被追加。
ONBUILD
- 定义:当构建一个被继承的Dockerfile时运行命令。
- 特点:父镜像在被子镜像继承之后父镜像的ONBUILD被触发。
构建自定义的Dockerfile镜像
- 命令:
docker build -f DockerFile路径 -t 新镜像名:标签版本 .
- 说明:末尾的点
.
代表当前的路径。 - 示例:
docker build -f DockerFile_MyCenterOS -t mycenteros:1.0 .
- 说明:末尾的点
案例1:自定义CentOS
Dockerfile FROM centos
# 设置环境变量
ENV MYPATH /tmp
# 设置默认工作目录
WORKDIR $MYPATH
# 运行安装vim和net-tools
RUN yum -y install vim RUN yum -y install net-tools
# 暴露端口
EXPOSE 80
CMD ["/bin/bash"]
容器间数据共享
- 命令:
docker run -it --name 容器1别名 --volumes-from 容器2别名 容器2
docker run -it --name 容器1别名 --volumes-from 容器2别名 容器2
- 说明:实现数据共享。
- 示例:
- 容器2,3继承容器1。
- 删除容器1,容器2,3数据依然存在,且容器2,3数据依然共享。