Docker
什么是Docker
Docker是一个开发、交付和运行应用程序的开放平台
Docker允许将应用程序与基础设施分开,以便快速交付软件。使用Docker,可以像管理应用程序一样管理基础设施。利用Docker交付、测试和部署代码,可以显著减少编写代码和生产环境中运行代码的延迟
容器
轻量的虚拟化技术,目的和虚拟机一样,都是为了创造“隔离环境”,虚拟机采用的是系统级别的资源隔离,而容器采用的进程级别的系统隔离。它可以让开发者将企业需要的各种应用及应用依赖文件封装在Docker镜像文件中,然后在任何物理设备上安装实现虚拟化,让应用程序彻底脱离底层设备,可以在物理机之间灵活迁移部署
Docker 和 虚拟机
-
Docker容器可以在秒级时间内快速启动和停止,相较传统虚拟机显著提升
-
Docke容器对系统资源要求低,数千个Docker可以同时运行在同一个主机上
-
Docker容器通过类似于Git的操作来方便用户获取和更新应用镜像
-
Docker容器通过Docker file配置文件实现自动化创建和灵活部署,提高工作效率
-
Docker除了运行其中的应用外,基本不消耗额外的系统资源,保证应用性能的同时,尽量减少系统开销
核心组件
仓库、镜像、容器
-
镜像:Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些运行时准备的配置参数。镜像可以用来创建Docker容器,用户可以使用设备上已有的镜像来安装多个相同的Docker容器
-
仓库:存放镜像的文件的地方,用户创建完镜像后,可以将其传到公共仓库或私有仓库,另一台主机需要使用时,直接下载即可
-
容器:镜像创建的运行实例(进程),Docker利用容器来运行应用,每个容器都是相互隔离的、保证安全的平台
安装
官方安装文档地址: 在 CentOS 上安装 Docker
-
卸载旧版本
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine \ docker-selinux -
设置存储库
(二选一) #国内yum源 yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #官方yum源 yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -
安装Docker(docker-ce是社区版,docker-ee是企业版)
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -
Docker启动相关命令
#开启docker systemctl start docker #关闭docker systemctl stop docker #docker状态 systemctl status docker #重启 systemctl restart docker #设置开机启动 systemctl enable docker -
Docker的卸载
-
卸载依赖
systemctl stop docker yum remove docker-ce docker-ce-cli containerd.io -
删除资源(docker的默认工作路径),因为主机上的映像、容器、卷或自定义配置文件不会自动删除。
rm -rf /var/lib/docker rm -rf /var/lib/containerd
-
-
配置镜像加速服务
# 创建目录 mkdir -p /etc/docker # 复制内容 tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "http://hub-mirror.c.163.com", "https://mirrors.tuna.tsinghua.edu.cn", "http://mirrors.sohu.com", "https://ustc-edu-cn.mirror.aliyuncs.com", "https://ccr.ccs.tencentyun.com", "https://docker.m.daocloud.io", "https://docker.awsl9527.cn" ] } EOF 回车: # 重新加载配置 systemctl daemon-reload # 重启Docker systemctl restart docker
常用命令
-
显示Docker的版本信息
docker version
-
查看镜像
# 查看本地主机上的镜像 docker images [OPTIONS] # 查看本地所有的镜像 docker images -aOPTIONS 说明:
-a:列出本地所有的镜像(含中间镜像层)
-q:只显示镜像ID
--digests:显示镜像的摘要信息
--no-trunc:显示完整的镜像信息
各个选项说明:-
REPOSITORY:表示镜像的仓库源
-
TAG:镜像的标签
-
IMAGE ID:镜像ID
-
CREATED:镜像的最后时间
-
SIZE:镜像的大小
-
-
搜索镜像(也可在DockerHub上搜索)
# 从网络中查找需要的镜像,可以通过以下命令搜索 docker search [OPTIONS] 镜像名称 # 例如搜索mysql docker search mysql # 搜索镜像并且是官方的 docker search --filter "is-official=true" mysql # 搜索镜像并starts大于多少的 docker search --filter stars=10 mysqlOPTIONS说明:
--filter=:过滤
--no-trunc:只显示完整的镜像描述
--automated:只列出automated build类型的镜像 -
拉取镜像
# 特别注意:如果版本号不指定则默认最新的版本 docker pull 镜像名称 docker pull 镜像名称:版本号 # 例如下载mysql8.0镜像 docker pull mysql:8.0 -
删除镜像
如果镜像已经生成了容器,则不允许删除,必须先停止该容器并删除,然后再删除镜像
docker rmi 镜像名字或者说镜像id docker rmi 镜像名字1 镜像名字2 -
列出正在运行的容器
docker ps [OPTIONS]OPTIONS说明:
-a:列出当前所有正在运行的容器+历史上运行过的
-l:显示最近创建的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号
--no-trunc:不截断输出
-
创建容器
#创建容器命令如下 docker run [OPTIONS] 镜像ID/镜像名称 [COMMAND] #创建并启动容器的简单举例 docker run -it --name=mycentos centos:7 /bin/bash # /bin/bash:放在镜像名后的是命令,表示容器创建之后执行,这里我们希望有个交互式Shell,因此用的是 /bin/bashOPTIONS说明:
--name=容器新名字(=可以用空格代替):为创建的容器命名。
-p:表示端口映射,格式为:主机(宿主)端口:容器端口。前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
-v 或者 --volume:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-
进入正在运行的容器
docker exec -it 容器名称或者容器ID /bin/bash -
启动容器、重启容器
#启动容器 docker start 容器ID或者容器名 #一次启动多个 docker start $(docker ps -a -q) #重启容器 docker restart 容器ID或容器名 -
停止容器
#停止容器 docker stop 容器ID或容器名 #强制停止容器 docker kill 容器ID或容器名 #一次停止多个 docker stop $(docker ps -a -q) -
删除容器
#删除已停止的容器 docker rm 容器ID或容器名 #强制删除容器(包括运行中的) docker rm -f 容器ID或容器名 #一次性删除多个容器 docker rm -f $(docker ps -a -q) -
容器的其他命令
#查看容器日志 docker logs 容器ID或容器名 #查看容器详细信息 docker inspect 容器ID或容器名 #列出或指定容器端口映射 docker port 容器ID或容器名 #显示一个容器运行的进程 docker top 容器ID或容器名 -
挂载
双向绑定与映射,从虚拟机中进行修改,就可以改变容器中的内容。
对于mysql的存储文件路径,一般都会挂载到容器里,因为容器一旦删除了数据也就不再了,但是宿主机的数据不会被删除。
# 创建并启动容器mycentos3,并挂载linux中的/usr/local/mytest目录到容器的/usr/local/mytest; # 也就是在linux中的/usr/local/mytest操作相当于对容器相应目录操作 docker run -di --name=容器的名字 -v 宿主机目录:容器目录 --name=容器名称 centos:7 #比如: docker run -it --name=mycentos3 -v /usr/local/mytest:/usr/local/mytest centos:7 /bin/bash #这样无论我们在宿主机上还是在容器中,在这个目录下对文件做了增删改操作,那么两边都是同步的。
浙公网安备 33010602011771号