docker 三要素:
镜像(images):
只读模板,用于创建docker容器。一个镜像可以创建多个容器
容器(container):
独立运行的一个或一组应用。是用镜像创建的运行实例,每个容器都是相互隔离的。
仓库:
集中存放镜像文件的地方。仓库分为公开仓库和私有仓库
最大公开仓库: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 client 客户端
- docker daemon 守护进程
- docker image 镜像
- docker container 容器
docker命令:
帮助命令:
查看docker版本
docker version
查看docker信息
docker info
查看docker的帮助
docker --help
镜像命令:
查看本地所有镜像
# 参数:
# -a:列出班底所有镜像(包括中间映像层)
# -q:只显示镜像ID
# --digests:显示镜像的摘要信息
# --no-trunc:显示完整镜像信息
docker images
PEPOSITORY: 镜像仓库源
TAG: 镜像标签
IMAGE ID: 镜像id
CREATE: 镜像创建时间
SIZE: 镜像大小
查找镜像
# docker search [参数] 镜像名
# 参数:
# -s:收藏数不小于指定值的镜像
# --automated:只列出automated build类型的镜像
# --no-trunc:显示完整镜像信息
docker hello-world
下载镜像
# docker push 镜像名[:TAG]
# 参数:
# -s:收藏数不小于指定值的镜像
# --automated:只列出automated build类型的镜像
# --no-trunc:显示完整镜像信息
docker push hello-world
删除一个或多个镜像
# 删除单个
# docker rmi [参数] 镜像名1[:TAG] 镜像名2[:TAG]...
# 参数:
# -f:强制删除
docker rmi hello-world
# 删除多个
# docker rmi [参数] $(docker images -qa)
# 参数:
# -f:强制删除
docker rmi -f $(docker images -qa)
查看镜像的配置
# docker inspect 镜像名
docker inspect hello-world
启动镜像
# docker start [-i] 镜像名
# 参数:
# -i: 交互式启动
docker start -i hello-world
进入正在运行的镜像
# docker attach 镜像名
docker attach hello-world
查看运行镜像中的进程
# docker top 镜像名
docker top hello-world
在运行的镜像中启动新进程
docker exec [-d] [-i] [-t] 镜像名 [command] [arg....]
停止守护容器
# docker stop 镜像名
docker stop hello-world
# docker kill 镜像名
docker kill hello-world
容器端口映射
# docker run [-P|-p] -i -t 镜像名
# 参数:
# -P:publish-all=true | false (默认) 暴露所有端口
# -p:publish=[] 指定端口映射
# 格式:
# 1.指定容器端口:
# docker run -p 端口号 -i -t 镜像名 /bin/bash
docker run -p 8080 -i -t hello-world /bin/bash
# 2.主机端口:容器端口:
# docker run -p 主机端口:容器端口 -i -t 镜像名 /bin/bash
docker run -p 80:8080 -i -t hello-world /bin/bash
# 3.ip地址::容器端口
# docker run -p ip地址::容器端口 -i -t 镜像名 /bin/bash
docker run -p 127.0.0.1::8080 -i -t hello-world /bin/bash
# 4.ip地址:主机端口:容器端口
# docker run -p ip地址:主机端口:容器端口 -i -t 镜像名 /bin/bash
docker run -p 127.0.0.1:80:8080 -i -t hello-world /bin/bash
查看容器运行日志
# docker logs -f -t --tail 容器id
# 参数:
# -f:跟随最新的日志打印
# -t:加入时间戳
# --tail:数字,显示最后多少条
docker logs -f -t --tail d2c94e258dcb
查看容器内部细节
# docker inspect 容器id
docker inspect d2c94e258dcb
进入容器启动命令的终端
直接进入,不会启动新的进程
# docker attach 容器id
docker attach d2c94e258dcb
在容器中打开新的终端,并启动新的进程
# docker exec -it 容器id bashshell
docker exec -it d2c94e258dcb bashshell
从容器中拷贝文件到主机上
# docker cp 容器id:容器内路径 目的主机的路径
docker cp d2c94e258dcb:/home/user/test.txt /root/test/
提交容器副本使之成为一个新的镜像
# docker commit [参数] 源镜像id 要创建的目标镜像名:[标签名]
# 参数:
# -m:提交的描述信息
# -a:作者
docker commit -a="zhangxiaosan" -m="it is tomcat which is haven't doct" e9bd0c5f0a37 zhangxiaosan/tomcat:9
主机和容器文件夹绑定
# docker run -it -v /主机绝对路径目录:/容器内目录:[权限] 镜像名
# 权限:
# ro: read only 只读
# wo: wirte only 只写
# rw: wirte and read 读写
docker run -it -v /home/content1:/home/:rw hello-world
容器间数据共享
# docker run -it -name 容器1别名 --volumes-from -name 容器2别名 容器2
# 容器2,3继承容器1
# 删除容器1,容器2,3数据依然存在,且容器2,3数据依然共享
dockerFile镜像的构建文件
介绍
镜像的构建文件dockerFile是由命令和参数组成的脚本
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”]
VOLUME
容器数据卷,用于保存数据和持久化工作
CMD
指定一个容器启动时需要运行的命令。 Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换
ONBUILD
当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承之后父镜像的ONBUILD被触发
构建镜像
# docker build -f Dockerfile所在目录 -t 构建的镜像标识/构建的镜像名
docker build -f /mydocker/Dockerfile -t zhangxiaosan/myDockerfileDemo1
构建自定义的DockerFile镜像
# docker build -f DockerFile路径 -t 新镜像名:标签版本 .
# 末尾的点 . 代表当前的路径
docker build -f DockerFile_MyCenterOS -t mycenteros:1.0 .
案例1 自定义centos
dockerfile(DockerFile_MyCenterOS):
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