Docker学习篇——基础篇
基础篇主要包括五个部分:Docker简介,Docker安装,Docker基础命令,Docker镜像命令,Docker容器命令。
Docker简介
假定我们在开发一个项目,我们在自己的笔记本上进行了开发,同时开发依赖本机的环境配置。我们正在开发的项目依赖于我们当前的配置且还要依赖于某些配置文件。但是企业或者客户可能不具备这些环境,或者说两者环境不匹配。
我们要如何确保项目能够在这些环境中运行和通过质量检测?并且在部署过程中不出现令人头疼的版本、配置问题,也无需重新编写代码和进行故障修复?
答案就是使用容器。Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案-----系统平滑移植,容器虚拟化技术。
环境配置相当麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。
Docker基本组成:镜像(image),容器(container),仓库(repository)。
Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。它也相当于是一个root文件系统。比如官方镜像 centos:7 就包含了完整的一套 centos:7 最小系统的 root 文件系统。相当于容器的“源代码”,docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。
Docker 利用容器(Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
仓库(Repository)是集中存放镜像文件的场所。类似于Maven仓库,存放各种jar包的地方;github仓库,存放各种git项目的地方;Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。仓库分为公开仓库(Public)和私有仓(Private)两种形式。最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云等。
Docker安装([官方安装文档](Install Docker Engine on CentOS | Docker Documentation))
Docker安装及卸载方式
-
确定linux是CentOS7及以上版本
cat /etc/redhat-release #查看版本命令
-
卸载旧版本
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
-
安装相关环境
yum -y install gcc
yum -y install gcc-c++
-
安装需要的软件包
yum install -y yum-utils
-
设置stable镜像仓库(此处安装阿里云镜像仓库,官网推荐安装GitHub上的仓库,在国内下载可能会比较慢,不推荐按使用)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
更新yum软件包索引
yum makecache fast
-
安装DOCKER CE
yum -y install docker-ce docker-ce-cli containerd.io
-
启动docker
systemctl start docker
-
测试
docker version
docker run hello-world
执行第一个命令出现版本号相关内容,执行第二个命出现如下图内容,即测试成功
-
卸载
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
阿里云镜像加速
-
获得加速器地址连接
-
登陆阿里云开发者平台
-
点击控制台
-
选择容器镜像服务
-
获取加速器地(注意:要使用自己的地址)
-
配置镜像加速器
mkdir -p /etc/docker
注意:要使用自己的地址
tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://aa25jngu.mirror.aliyuncs.com"] } EOF
-
重启服务器
systemctl daemon-reload
systemctl restart docker
-
启动Docker后台容器(测试运行 hello-world)
docker run hello-world
-
docker run命令执行理解
-
Docker基础命令
启动类命令
-
启动docker
systemctl start docker
-
停止docker
systemctl stop docker
-
重启docker
systemctl restart docker
-
查看docker状态
systemctl status docker
-
设置开机启动docker
systemctl enable docker
帮助类命令
-
查看docker概要信息
docker info
-
查看docker总体帮助文档
docker --help
-
查看docker命令帮助文档
docker 具体命令 --help
镜像命令
查看本地镜像
-
列出本地主机上的镜像
docker images
-
列出本地所有的镜像(含历史映像层)
docker images -a
-
只显示镜像ID
docker images -q
-
列出本地所有的镜像(含历史映像层)的ID
docker images -aq
搜索镜像仓库中的某个镜像
-
搜索镜像仓库中的某个镜像,默认显示25个
docker search 某个XXX镜像名字
-
搜索镜像仓库中的某个镜像,只显示收藏个数靠前几个的镜像,可以设置任意正整数
docker search --limit 5 某个XXX镜像名字
下载镜像
-
下载镜像
docker pull 镜像名字[:TAG]
-
没有TAG默认下载最新版
docker pull 镜像名字 等价于 docker pull 镜像名字:latest
-
Docker虚悬镜像:仓库名、标签都是的镜像,俗称虚悬镜像dangling image
删除镜像
-
删除单个
docker rmi -f 镜像ID
-
删除多个
docker rmi -f 镜像1ID 镜像2ID ...
-
删除所有
docker rmi -f $(docker images -aq)
容器命令
查看容器
-
列出当前所有正在运行的容器
docker ps
-
列出当前所有正在运行的容器+历史上运行过的
docker ps -a
-
静默模式,只显示容器编号
docker ps -q
-
列出所有的容器(历史上运行过的)的ID
docker ps -aq
-
显示最近创建的容器
docker ps -l
-
显示最近创建的x个容器,x为任意正整数
docker ps -n x
启动容器
-
新建+启动容器
docker run 镜像名/镜像ID
-
启动交互式容器(前台命令行),以交互模式启动一个容器(前台交互式启动)
docker run -it 镜像名:TAG/镜像ID bash
docker run -it 镜像名:TAG/镜像ID /bin/bash
理解:i:interaction(交互),t:tty(终端),启动容器之后还有交互任务要完成
例如:以交互模式启动ubuntu
docker run -it ubuntu /bin/bash
此时会进入到ubantu容器内,可以执行相关命令,如下图所示
-
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的后台运行模式 (后台交互式启动)
docker run -d 镜像名:TAG/镜像ID
如图所示
-
设置容器名称,如果不设置随机分配
docker run -it --name=自定义容器名称 镜像名:TAG/镜像ID /bin/bash
如图所示
退出容器
-
exit:run进去容器,exit退出,容器停止运行
exit
-
ctrl+p+q:run进去容器,ctrl+p+q退出,容器不停止运行
ctrl+p+q
删除容器
-
删除单个
docker rm -f 容器名/容器ID
-
删除多个
docker rm -f 容器1ID 容器2ID ...
-
删除所有
docker rm -f $(docker ps -aq)
停止和启动容器
-
启动已停止运行的容器
docker start 容器名/容器ID
-
重启容器
docker restart 容器名/容器ID
-
停止容器
docker stop 容器名/容器ID
-
强制停止容器
docker kill 容器名/容器ID
进入正在运行的容器并以命令行交互
-
exec
docker exec -it 容器ID bashShell
-
attach
docker attach 容器ID
-
上述两种方式区别
exec 是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器停止运行。
attach 直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器停止运行。
-
示例如图
-
重新进入ubuntu
-
重新进入redis
-
容器内文件拷贝
-
从容器内拷贝文件到主机上(在主机中执行命令)
docker cp 容器ID:文件在容器内路径/文件名 主机路径/文件名
如图所示
导入和导出容器
-
导出容器(默认导出到当前文件夹下,可以自行设置)
docker export 容器ID > 文件名.tar
如图所示
-
导入容器成为镜像
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
如图所示
查看容器使用内存情况
可以使用docker stats命令来查看容器占用内存,并且使用格式化参数来将结果以表格的形式显示。
示例命令如下:
docker stats --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}"
这个命令将会列出所有正在运行的容器的名称、ID、CPU使用率、内存使用量和内存占用百分比。输出结果将会以表格的形式显示。
如果需要查看特定容器的内存使用情况,则可以在命令末尾加上容器名称或ID,例如:
docker stats --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}" container_name_or_id
设置容器开机自启
- 查看指定容器的自启动配置
docker inspect 容器名称/Id | grep "RestartPolicy" -A 3
docker inspect ca6146074a33 | grep "RestartPolicy" -A 3
参数说明:
no:不自动重启
on-failure:容器错误退出则自动重启
always:容器停止则自动重启,手动停止后将在docker守护程序重启后自动重启
unless-stopped:除了当容器停止(手动或其他方式)时,即使在Docker守护程序重新启动后也不会重新启动容器
- 开启指定容器自启动
docker update --restart=always 容器名称/Id
- 关闭指定容器自启动
docker update --restart=no 容器名称/Id
其他容器命令
- 查看容器日志
docker logs 容器ID
- 查看容器最后100行日志
docker logs --tail 100 容器ID
- 查看容器内运行的进程
docker top 容器ID
- 查看容器内部细节
docker inspect 容器ID
总结
本篇文章主要讲解Docker基础知识和基础命令,后续会继续更新Docker进阶知识。最后,感谢大家的观看,如有问题和文章错误,请在评论区@我。