Docker
Docker学习
开发打包跨平台部署上线,一套流程做完!
打包项目带上环境(镜像),Docker类似于商店,下载发布的镜像,直接运行即可。
Docker概述
Docker 通过隔离机制,可以将服务器利用到极致
Docker历史
将自己的技术(容器化技术)命名
刚刚诞生时,没有引起行业的注意,2013年,Docker开源,2014年4月9日,Docker1.0发布!
- 轻巧(在容器技术出来之前,使用的都是虚拟机技术)
- 虚拟机:通过VMware,虚拟出一台或者多台电脑,占用内存。
- 虚拟机属于虚拟化技术,Docker容器技术,也是一种虚拟化技术
- docker隔离,镜像(最核心的环境4m+jdk+mysql等),秒级启动
Docker是基于Go语言开发的
Doker和虚拟机技术的不同:
- 传统虚拟机,虚拟出一条硬件,运行出一个完整的操作系统,然后在这个系统上安装和运行软件
- 容器内的应用直接运行在宿主机的内核,容器是没有自己的内核的,也没有虚拟硬件,所以轻便
- 每个容器见是互相隔离的,每个容器内都有一个属于自己的文件系统,互不影响
DevOps(开发\运维)
-
应用更快速的交付和部署
打包镜像发布测试,一键运行
-
更便捷的升级和扩容
部署、升级应用更简单
-
更简单的系统运维
在容器化之后,开发环境、测试环境都是高度一致的
-
更高效的计算资源利用
一个物理机上可以运行多个容器实例
Docker安装
名词介绍
镜像(image):
docker镜像类似于一个模板,可以通过这个模板来创建容器服务
eg:tomcat镜像,先运行run这个镜像,会创建一个tomcat容器(提供服务),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在这个容器中的)。
容器(container):
docker利用容器技术,独立运行一个或者一个组应用,容器通过镜像运行来创建。
启动,停止,删除等基本命令
目前就可以把在这个容器理解为就是一个简易的linux系统
仓库(repository):
仓库就是存放镜像的地方
- 公有仓库:Docker Hub(默认国外)
- 私有仓库:阿里云,华为云(配置镜像加速)
安装步骤
**参考官方文档:****https://docs.docker.com
https://docs.docker.com/get-docker/**
环境准备
- linux基础
- CentOS 7
- Xshell连接远程服务器进行操作
环境查看
-
系统内核是 3.0 以上的
uname -r
-
系统版本是CentOS 7
cat /etc/os-release
安装
-
卸载旧的版本
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
-
需要的安装包
yum install -y yum-utils
-
设置镜像的仓库(推荐使用阿里云的)
yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
更新yum软件包索引
yum makecache fast
-
安装docker相关的内容
docker-ce 是社区版 -ee是企业版
yum install docker-ce docker-ce-cli containerd.io
-
安装指定版本
要安装特定版本的 Docker Engine,请在存储库中列出可用版本,然后选择并安装
一种。列出并排序您存储库中可用的版本。本示例按版本号(从高到低)对结果进行排序,并被截断
$ yum list docker-ce --showduplicates | sort -r docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
-
docker run hello-world
寻找镜像-拉取镜像-运行-验证Docker安装成功
docker inage 镜像
-
查看下载的hello-world 镜像
docker images
-
卸载docker
#1. 卸载依赖 $ sudo yum remove docker-ce docker-ce-cli containerd.io #2. 删除资源 $ sudo rm -rf /var/lib/docker # docker的默认工作路径 $ sudo rm -rf /var/lib/containerd
-
配置阿里云镜像加速
-
run hello world的流程分析图
底层原理
Docker是怎么工作的?
Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问,DockerServer接收到Docker-Client的指令,执行命令
Docker为什么比VM快?
- Docker有着比虚拟机更少的抽象层
- docker利用的是宿主机的内核,VM需要的是GuestOS
docker 有着比虚拟机更少的抽象层。由于 docker 不需要 Hypervisor 实现硬件资源虚拟化,运行在 docker 容器上的程序直接使用的都是
实际物理机的硬件资源。因此在 CPU、内存利用率上 docker 将会在效率上有明显优势。
docker 利用的是宿主机的内核,而不需要 Guest OS。因此,当新建一个 容器时,docker 不需要和虚拟机一样重新加载一个操作系统内核。
仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载 GuestOS,返个新建过程是分钟
级别的。而 docker 由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个 docker 容器只需要几秒钟。
Docker命令
帮助命令
docker version # docker版本信息
docker info # docker详细系统信息,包括镜像和容器的数量
docker --help # 万能命令
帮助文档的地址:
https://docs.docker.com/engine/reference/commandline/cli/
1.Docker本身命令
1.1启动Docker
systemctl start docker
1.2停止Docker
systemctl stop docker
1.3重启Docker
systemctl restart docker
1.4查看Docker状态
systemctl status docker
1.5开机自启动
systemctl enable docker
1.6取消开机启动
systemctl disable docker
1.7查看Docker概要信息
docker info
2.Docker容器命令
说明:有了镜像才可以创建容器
2.1 查看运行的容器
docker ps #查看当前正在运行的容器
2.2 查看所有容器
docker ps -a #查看正在运行的容器,以及过去运行过的容器
docker ps -n=? #?=数字,查看最近创建的容器
举例:docker ps -n=2 #查看最新创建的两个容器
2.3 创建容器
docker run [可选参数] image
# 参数说明
--name="name" # 创建容器并命名
-d #后台方式运行容器
-it #使用交互方式创建容器
-P #大写P,指定容器的端口 -P:8080
-P 主机端口:容器端口 #(常用)
-p #小写p,随即指定端口
- -i:表示运行容器
- -t:表示容器启动后会进入命令行
- -name:为创建的容器命名
- -v:表示目录映射
- -d:表示守护式运行
- -p:表示端口映射
交互式方式创建:
docker run -it 容器名 /bin/bash #随机命名
#创建容器,并运行,/bin/bash 系统下的驱动文件,如果创建镜像不存在的容器,则会优先拉去最新的镜像,并创建容器,运行容器
语法:docker run -it --name=自定义容器名字 镜像名称:镜像标签 /bin/bash #自定义名称
举例:docker run -it --name=my centos centos:7 /bin/bash
守护式方式创建:
语法:docker run -id --name=自定义容器名称 镜像名称:镜像标签
举例:docker run -id --name=mycentos centos:7
2.4 退出容器
exit #容器停止并退出
Ctrl+P+Q #不停止容器退出
2.5 停止容器
语法:docker stop 容器名称 或 容器ID
举例:docker stop mycentos
2.7 启动容器
语法:docker start 容器名称 或 容器ID
举例:docker start mycentos
2.8 容器文件拷贝
- 文件 拷贝到 容器
语法:docker cp 本地文件地址 容器名称:docker目标地址
举例:docker cp /tmp/jenkins.war mycentos:/usr/tmp
- 容器 拷贝到本地
语法:docker cp 容器名称:docker目标地址 本地文件地址
举例:docker cp mycentos:/usr/tmp/jenkins.war /tmp/jenkins2.war
2.9 容器目录挂载
- 创建时挂载目录
语法:docker run -id --name=容器名称 -v 宿主机目录:容器目录 镜像名称:镜像标签
举例:docker run -id --name=mycentos -v /tmp:/tmp centos:7
-
运行时挂载
?
2.10删除容器
语法:docker rm 容器名称或容器ID #删除指定的容器,不能删除正在运行的容器
举例:docker rm mycentos
docker rm -f 容器名称或容器ID #删除容器,包括正在运行的容器
3.Docker镜像命令
3.1 查看镜像
docker images #展示详细镜像信息
docker images -a #展示所有镜像
docker images -q #只展示镜像ID
以下镜像都是存储在Docker宿主机的/var/lib/docker目录下
- REPOSITORY:镜像名称
- TAG:镜像标签
- IMAGE ID:镜像ID
- CREATED:镜像的创建日期
- SIZE:镜像大小
3.2 搜索镜像
# 正常搜索
语法:docker search 镜像名
举例:docker search centos
# 过滤搜索,后缀条件
docker search mysql --filter=STARS=3000
- NAME:仓库名称
- DESCRIPTION:镜像描述
- STARS:用户评价
- OFFIOCIAL:是否官方
- AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建
3.3 拉取最新镜像
语法:docker pull 镜像名称(默认最新版)
举例:docker pull centos #分层下载,docker的核心
3.4 拉取指定镜像
语法:docker pull 镜像名称:镜像标记
举例:docker pull centos:7
# 下载不同版本的镜像,若系统检测到存在重复文件,不会下载,公用文件
3.5 删除镜像
# 删除指定的容器
语法:docker rmi 镜像ID #remove image
举例:docker rmi 9e4a20b3bbbc
3.6 删除所有镜像
docker rmi \`docker images -q\`
docker rmi -f $(docker images -aq) #删除全部的镜像
docker rmi -f 镜像ID 镜像ID 镜像ID #删除多个镜像
常用其他命令
后台启动容器
docker run -d 镜像名称 #后台启动运行容器
# 注意:如果前台没有进程,后台容器运行,docker发现没有进程,就会自动停止
查看日志命令
docker logs -f -t --tail 10 容器ID
# 查看该容器的日志信息前十行,前提是该容器在运行
查看容器内部的进程信息
docker top 容器ID或容器名称
查看镜像的元数据
docker inspect 容器iD
进入当前正在运行的容器
方式一:
docker exec -it 容器id /bin/bash
#进入容器后开启一个新的终端,可以在里面进行操作
方式二:
docker attach 容器id
#进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件
docker cp 容器id:/home/text.java /home
docker 连不上网
虚拟机-网络适配器-桥接模式(勾选“复制物理网络连接状态”)-确定
进入终端输入指令“cd /etc/sysconfig/network-scripts/”目录下,ls展示,查看是否有“ifcfg-ens33”这个文件
输入指令“vim ifcfg-ens33”进入编辑器,跟图片修改至一致,保存退出
输入“systemctl restart network”重启,“ping www.baidu.com”是否ping通