Docker是一个开源的`应用容器引擎`,让开发者可以打包他们的应用以及依赖到一个`可移植`的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现`虚拟化`,容器是完全使用`沙箱机制`,相互之间不会有任何接口。
了解Docker Docker是一个开源的应用容器引擎
,让开发者可以打包他们的应用以及依赖到一个可移植
的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化
,容器是完全使用沙箱机制
,相互之间不会有任何接口
一个完整的Docker有以下几个部分组成:
DockerClient客户端
Docker Daemon守护进程
Docker Image镜像
DockerContainer容器
PS:来自百度百科(Docker的简介)
Docker概述 学习视频:Docker最新超详细版教程
参考文档:Docker的概述和安装
Docker是基于GO语言
开发的开源项目
一些学习地址:
Docker与虚拟机的比较
PS:虚拟机技术
PS:Docker容器化技术
传统虚拟机:虚拟出一系列硬件,运行一个完整的操作系统,然后在这个系统安装和运行软件
容器内的应用直接运行在宿主机上,容器没有自己的内核,也没有虚拟出硬件,十分轻便
每个容器都是相互隔离的,每个容器都有属于自己的文件系统,互不影响
Docker基本组成
基本概念:
镜像(image):docker镜像可以比作一个模板,可以通过这个模板创建容器服务,tomcat镜像→run→tomcat01容器,通过镜像可以创建多个容器(最终服务运行或项目运行就是在容器中)
容器(container):docker利用容器技术,独立地运行一个或一组应用,通过image来创建
启动、停止、删除等基本命令
PS:可以蒋容器理解为一个简单的Linux系统
仓库(repository):仓库是存放镜像的地方,有公有和私有仓库之分
PS:Docker Hub(默认是国外的),阿里云等平台都有容器服务器(配置镜像加速)
Docker作用 可以实现DevOps
(开发,运维)
应用更快速的交付和部署:打包镜像发布测试,一键运行
更便捷的升级和扩缩容:使用Docker,部署像搭积木一样,项目打包为一个镜像,方便扩展
更简单的系统运维:在容器化之后,开发和测试环境都是高度一致的
更高效的计算资源利用:Docker是内核级别的虚拟化,可以在一个物理机上运行多个容器实例,容器的性能可以被压榨到极致
Docker安装 环境准备
Linux操作系统
Xshell(连接远程服务器)
1 2 3 4 # 查看系统内核(系统内核3.10以上的) uname -r# 查看系统信息 cat /etc/os-release
安装步骤 官网安装文档:https://docs.docker.com/engine/install/
CentOS系统 1 2 3 4 5 6 7 8 9 10 # 卸载旧版本Docker系统(如果有点话) sudo yum remove docker\# 安装需要的安装包 yum install -y yum-utils# 配置下载Docker镜像 sudo yum-config-manager\ --add-repo\ https://download.docker.com/linux/centos/docker-ce.repo# 安装docker,一路输入确定安装即可 sudo yum install docker-ce docker-ce-li containerd.io
启动测试 1 2 3 4 5 6 7 8 # 查看docker是否安装成功和版本 docker -v# 启动docker systemctl start docker# 运行测试 docker run hello-world# 查看下载的hello-world镜像 docker images
卸载Docker 1 2 3 4 # 卸载 yum remove docker-ce docker-ce-li containerd.io# 删除文件(/var/lib/docker时是docker的默认工作路径) rm -rf /var/lib/docker
Docker配置阿里云镜像仓库地址 参考教程:https://www.cnblogs.com/allenjing/p/12575972.html
登录阿里云找到容器镜像服务
选择镜像加速器复制加速器地址
1 2 3 4 5 6 7 8 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors":["https://bjyjzfeq.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
Docker运行原理
底层原理: Docker工作原理:Docker是一个CS结构
的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问
DockerServer接收到DockerClient的指令,就会执行这个命令
Docker常用命令 帮助命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 # 显示版本 docker version# 显示Docker的系统信息 docker info# 帮助信息 docker --help Commands: attach # 当前 shell 下 attach 连接指定运行镜像 build # 通过 dokcerfile 定制镜像 commit # 提交当前容器为新的镜像 cp # 从容器中拷贝指定文件或目录到宿主机 create # 创建一个新的容器 ,同 run ,但不会启动容器 diff # 查看 docker 容器变化 events # 从 docker 服务器获取容器实时事件 exec # 在已存在的容器上运行命令 export # 导出容器的内容流作为一个 tar 归档文件(对应 import) history # 展示镜像的形成历史 images # 列出系统当前所有镜像 import # 从 tar 包中的内容创建一个新的文件系统映像(对应 export) info # 查看系统相关信息 inspect # 查看容器详细信息 kill #kill 指定的 docker 容器 load # 从一个 tar 包中加载一个镜像(对应 save) login # 注册或登陆一个 docker 源服务器 logout # 登出当前源服务器 logs # 输出当前容器的日志内容 pause # 暂停容器 port # 查看映射端口对应的容器内部源端口 ps # 列出容器列表 pull # 从 docker 镜像源服务器拉取指定镜像或库镜像 push # 推送指定镜像或者库镜像到 docker 源服务器 rename # restart # 重启运行的容器 rm # 移除一个或多个容器 rmi # 移除一个或多个镜像 run # 创建一个新的容器并运行一个命令 save # 保存一个镜像为一个 tar (对应 load) search # 在 docker hub 中搜索镜像 start # 启动容器 stop # 停止容器 tag # 给源镜像打标签 top # 查看容器中运行的进程消息 unpause # 取消暂停容器 version # 查看容器版本号 wait # 获取容器停止时的退出状态值
镜像命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 主机上的所有本地镜像 docker images help REPOSITORY TAG IMAGE ID CREATED SIZE# 解释 REPOSITORY:镜像的仓库源 TAG:镜像的标签 IMAGE ID:镜像的 ID CREATED:创建时间 SIZE:大小 # 可选项 -a --all # 列出所有镜像 -q --quiet # 只列出镜像的 ID docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest feb5d9fea6a5 2 months ago 13.3kB
1 2 3 4 # 搜索镜像 docker search hello-world# 搜索镜像的star>1000的镜像 docker search hello-world --filter=stars=3000
1 2 3 4 5 6 # 下载镜像[:tag] (不写tag默认就是latest) docker pull mysql# 等价写法 (docker.io/library/mysql:latest为存放的镜像的文件真实地址) docker pull docker.io/library/mysql:latest# 下载指定版本 docker pull mysql:5.7
1 2 3 4 5 # 删除镜像 # docker rmi 镜像 ID [镜像 ID,...] 删除没有运行容器的镜像 docker rmi bbf6571db497# docker rmi -f 镜像 ID [镜像 ID,...] 删除连带删除容器的镜像 # docker rmi -f $(docker images -aq) 删除所有容器和镜像
容器命令 1 2 3 4 5 6 7 8 9 10 11 12 # 前置环境:下载一个centos镜像 docker pull centos# 新建并运行容器 docker run --help docker run -it centos /bin/bash# 列出所有运行的容器 docker ps# -q 只显示容器编号,-a 列出当前正在运行的容器+带出历史运行过的容器,-n=? 显示最新常见的容器的个数 # 直接容器停止并退出 exit# 容器不停止而退出 Ctrl+P+Q
1 2 3 4 5 6 # 删除指定的容器,rm -f 表示强制删除正在运行的容器 docker rm [-f] 容器 ID # 删除所有的容器 docker rm -f $(docker ps -aq)# 删除所有容器 docker ps -a -q|xargs docker rm
1 2 3 4 5 6 7 8 9 10 # 启动容器 docker start 容器 ID # 重启容器 docker restart 容器 ID # 停止正在运行的容器 docker stop 容器 ID # 强制停止当前运行的容器 docker kill 容器 ID # 后台启动容器 docker run -d centos
常见问题:-d 运行之后,docker ps 发现它并没有运行
原因:docker 容器使用后台运行,就必须要有一个前台进程,docker 发现没有应用,就会自动停止
nginx 容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了。
1 docker inspect 018801 a5cdcf