Docker的学习与使用 本文是基于CentOS 7.3系统环境,进行Docker的学习和使用
- CentOS 7.3
- Docker-ce
- 解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术
文章图片
- 轻量、秒级的快速启动速度
- 标准统一的打包/部署/运行方案
- 镜像支持增量分发,易于部署
- 易于构建】良好的REST API
- 性能,尤其是内存和IO的开销
a. 镜像
- 镜像就是一个只读的模板
- 镜像用来创建多个容器实例
- 容器是利用镜像创建的运行实例
- 可以把容器看作一个轻量、简易版的Linux环境和运行在其中的应用程序
- 仓库是集中存放镜像文件的场所
- 仓库注册服务器存放着多个仓库
- CentOS 7.3
若之前没有安装过Docker,则跳过该步骤
- 命令行终端执行下面命令
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
(3) 修改yum源
- 命令行终端执行下面命令
yum -y install yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
文章图片
(4) 安装Docker-ce的依赖环境
- 命令行终端执行下面命令
yum-config-manager --enable docker-ce-edge
yum-config-manager --enable docker-ce-test
(5) 安装Docker-ce
- 命令行终端执行下面命令
yum -y install docker-ce
文章图片
(6) 启动Docker-ce
- 命令行终端执行下面命令
systemctl enable docker
systemctl start docker
(7) 配置阿里云镜像加速器
- 命令行终端执行下面命令
vim /etc/docker/daemon.json
- 键入以下内容
{
"registry-mirrors": ["https://6i50hm7r.mirror.aliyuncs.com"]
}
- 命令行终端执行下面命令
systemctl daemon-reload
systemctl restart docker
- 验证加速器是否配置成功
docker info
(8) 测试hello-world
- 验证客户端是否可用
docker run hello-world
三、Docker的帮助类命令 (1) 查看docker版本信息
docker version
(2) 查看docker详细信息
docker info
(3) docker帮助命令
docker --help
(4) docker日志命令
- Docker 引擎日志
cat /var/log/upstart/docker.log
- Docker 容器日志
jounarlctl -u docker
四、Docker的镜像类命令 (1) docker images [options]
- 查看本地的镜像
docker images
- 查看本地的镜像(含中间层)
docker images -a
- 只显示本地的镜像的唯一ID
docker images -q
- 显示本地的镜像的摘要信息
docker images --digests
- 显示完整的镜像信息
docker images --no-trunc
(2) docker search [options]
- 查找镜像
docker search tomcat
- 列出收藏数不小于指定值的镜像
docker search -s 30 tomcat
- 查找镜像时,显示完整信息
docker search tomcat --no-trunc
- 查找镜像时,只列出automated build类型的镜像
docker search tomcat --automated
(3) docker pull [options]
- 拉取镜像
docker pull tomcat
- 拉取指定版本的镜像
docker pull tomcat:latest
docker pull tomcat:7.0
(4) docker rmi [options]
- 删除镜像
docker rmi tomcat:latest
- 删除多个镜像
docker rmi -f 镜像1:TAG 镜像2:TAG
# 强制删除多个镜像
- 删除全部镜像
docker rmi -f $(docker images -qa)
# 强制删除多个镜像
三、Docker的容器命令 (1) 新建并启动容器
docker run [options] image [command][arg...]
--name "容器的新名字":为容器指定一个名词
-d:后台运行容器,返回容器ID,启动守护式容器
-i:以交互模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端
-P:随机端口映射
-p:指定端口映射
--privileged=true:如果写权限不够,加上这句话
docker run -it --name mycentos b5b4d78bc90c
# 启动centos容器,并命名为mycentos
docker run -it --name mycentos b5b4d78bc90c --privileged=true
(2) 列出所有正在运行的容器
docker ps [options]
无参数:列出当前正在运行的容器
-a:列出当前正在运行的容器和历史上运行过的容器
-l:显示最近创建的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号
--no-trunc:显示完整信息
(3) 退出容器
停止并退出容器
exit退出不停止容器
ctrl + P + Q
(4) 启动容器
docker start 容器ID或者容器名
(5) 重启容器
docker restart 容器ID或者容器名
(6) 停止容器
docker stop 容器ID或者容器名
(7) 强制停止容器
docker kill 容器ID或者容器名
(8) 删除容器
docker rm 容器ID或者容器名
(9) 删除多个容器
docker rm f $(docker ps -aq)
docker ps -aq | xargs docker rm
(10) 查看容器日志
docker logs [options] 容器ID
-t:加入时间戳
-f:跟随最新的日志打印
--tail:数字显示最后多少条
(11) 查看容器运行的进程
docker top 容器ID
(12) 查看容器内部的细节
docker inspect 容器ID
(13) 重新进入正在运行的容器
docker attach 容器ID或者容器名
docker exec -it 容器ID或者容器名 /bin/bash
(14) 拷贝文件到/root目录
docker cp mycentos1030:/tmp/temp.log /root
(15) 将修改后的容器发布成镜像
docker commit -m "tomcat without docs" -a "xuzheng" 8312674095ff inspur/tomcat01:1.0
四、Docker的数据卷 (1) 场景
容器在运行时,会产生一些数据,对于有些数据来说,是需要进行保存的,也就是我们要求对数据进行持久化存储。容器是在内存中运行的,一旦容器停止运行或者关闭,那么这些数据都将会消失
(2) docker保存数据的方式
- 通过commit生成新的镜像
docker容器产生的数据,可以通过docker commit生成新的镜像,使得数据作为镜像的一部分保存下来 - 数据卷
数据卷就是在宿主中可以在容器之间进行共享和重用的一系列和文件和文件夹
【docker|docker】数据卷就是在宿主中可以在容器之间进行共享和重用的一系列和文件和文件夹
(4) 作用
- 容器的持久化
- 容器间的继承+共享数据
- 数据卷可在容器之间共享或重用数据
- 数据卷中的更改可以之间生效
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
- 命令方式添加容器数据卷
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
#对于容器来说,只读不可写
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
- DockerFile方式添加容器数据卷
- 编写Dockerfile文件
FROM centos
VOLUME ["/dataVolume1","/dataVolume2"]
CMD echo "finished...successful"
CMD /bin/bash
- 构建新镜像
docker build -f /data/Dockerfile -t xuzheng/centos .
(7) 继承父容器
子父之间的容器数据卷中的内容可以实现传递和共享(全都是双向的传递数据的)
docker run -it --name dc01 centos
#继承dc01
docker run -it --name dc02 --volumes-from dc01centos
五、DockerFile (1) DockerFile的定义
DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本
(2) DockerFile构建步骤
- 编写DockerFile文件
- docker build
- docker run
- docker从基础镜像运行一个容器
- 执行一条指令并对容器作出修改
- 执行类似docker commit的操作提交一个新的镜像层
- docker再基于刚提交的镜像运行一个新的容器
- 执行dockerfile中的下一条指令直到所有指令都执行完成
- FROM
基础镜像,当前新镜像是基于哪个镜像的
FROM centos
# 基础镜像,当前镜像基于哪一个镜像
- MAINTAINER
镜像维护者的姓名和邮箱地址
MAINTAINER xuzheng<601797071@qq.com>
# 标记作者和邮箱
- RUN
容器构建时需要运行的命令
RUN ls -l
# 容器在构建时,需要执行的命令
- EXPOSE
当前容器运行时暴露的端口
EXPOSE 8080
# 暴露的端口号
- WORKDIR
在创建容器后,指定终端默认登录进来时的工作目录
WORKDIR /usr/local
# 登录容器内,默认的目录
- ENV
用来在构建镜像过程中设置环境变量
ENV MYPATH /usr/local
# 设置环境变量
- ADD
将宿主机目录下的文件拷贝进镜像,且ADD命令会自动处理URL和解压tar压缩包
ADD centos-7-docker.tar.gz
# 加载tar压缩包进入镜像,并解压缩
- COPY
拷贝文件和目录到镜像中
COPY centos-7-docker.txt
# 拷贝文件或者目录进入镜像
- VOLUME
容器数据卷,用于数据保存和持久化工作
VOLUME ["/dataVolume1","/dataVolume2"]
# 设置数据卷
- CMD
指定一个容器启动时要运行的命令
DockerFile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换
CMD ls -l
# 容器启动时要执行的命令,可以带多个cmd,但只有最后一个生效
- ENTRYPOINT
指定一个容器启动时要运行的命令,并可以追加在后面
ENTRYPOINT ls -l
# 容器启动时要执行的命令
- ONBUILD
当构建一个被继承的dockerfile时运行命令,父镜像在被子镜像继承后,父镜像的onbuild被触发
ONBUILD RUN echo "father image is inherited"
# 父镜像被继承时,父镜像的ONBUILD被触发
六、DockerFile案例 (1) 带有vim和ifconfig的centos7
FROM centos:7
MAINTAINER xuzheng<601797071@qq.com>ENV MYPATH /tmp
WORKDIR $MYPATH
# 配置网络代理
ENV http_proxy "http://192.168.0.198:808"
ENV https_proxy "http://192.168.0.198:808"RUN yum -y install vim
RUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATH
CMD echo "success------------------ok"
CMD /bin/bash
- 构建镜像
docker build -f /opt/containerd/mydocker/DockerFile -t xuzheng/centos7-vim-ifconfig:1.0 .
七、上传镜像至阿里云
# 登录
docker login --username=hitwh1106102 registry.cn-beijing.aliyuncs.com
docker tag [ImageId] registry.cn-beijing.aliyuncs.com/inspur_xuzheng/tomcat01:[镜像版本号]
docker push registry.cn-beijing.aliyuncs.com/inspur_xuzheng/tomcat01:[镜像版本号]
推荐阅读
- 服务器|一文玩转 Docker
- Docker入门(部署app)
- 虚拟机|linux常用命令及环境搭建
- Windows Docker管理器推荐(Portainer替代软件和类似软件)
- 10大Docker替代品(最佳容器虚拟化软件推荐)
- kubeedge|kubeedge1.3.1阿里云ECS部署(基于公网IP)
- SLAM&VIO|slambook2_in_Docker——视觉Slam十四讲代码Docker封装
- runtime|谷歌编程之夏即将开启,快来申请开源任务吧(远程)
- Docker存储驱动之Device Mapper简介