Docker的简单使用
[TOC]
Docker的简单使用
Docker 是什么
Docker 是一个应用打包、分发、部署的工具。你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要,而普通虚拟机则是一个完整而庞大的系统,包含各种不管你要不要的软件。
Docker是内核级别的虚拟化,可以在一个物理机上可以运行很多的容器实例!服务器的性能可以被压榨到极致。
Docker的基本组成
镜像(image)
docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像===>run==>tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
容器(container)
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。
启动,停止,删除,基本命令!
目前就可以把这个容器理解为就是一个简易的linux系统
仓库(repository)
仓库就是存放镜像的地方!
仓库分为公有仓库和私有仓库!
Docker Hub(默认是国外的)阿里云.…都有容器服务器(配置镜像加速!)
安装Docker
docker要求系统内核是3.10以上,可以使用uname -r命令来查看系统内核发行版本号。
1.卸载旧的版本
yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
2.需要的安装包
yum install -y yum-utils
3.设置镜像的仓库
yum-config-manager
–add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 使用阿里云镜像安装容器之前,更新yum软件包索引。
yum makecache fast
4.安装容器相关的。docker-ce(社区版)docker-ee(企业版)
yum install docker-ce docker-ce-cli containerd.io
5.启动docker
systemctl start docker
6.使用docker version查看是否安装成功
docker version
卸载docker
1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
2.删除资源
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
配置docker镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://docker.mirrors.ustc.edu.cn"]
}
EOF//中国科学技术大学镜像
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker的常用命令
docker 命令 –help # 帮助命令
#查看所有本地的主机上的镜像
dokcer images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 10 months ago 13.3kB解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小命令参数可选项
-a, –all # 显示所有镜像 (docker images -a)
-q, –quiet # 仅显示镜像id (docker images -q)
搜索镜像
docker search 镜像名
下载镜像
docker pull 镜像名[:版本号]
可以指定版本,不指定默认下载最新版,docker下载是分层下载,可以实现层级复用
删除镜像
docker rmi -f 镜像id # 删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id # 删除多个镜像(空格分隔)
docker rmi -f $(docker images -aq) # 删除全部的镜像
新建容器并启动
docker run [可选参数] image
-d 后台启动
常见的坑:docker容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用,就会自动停止。
比如:nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
–name 指定容器名字
-it 使用交互方式运行:进入容器内查看内容
exit 关闭容器并从容器中退出
ctrl+P+Q 不关闭容器退出容器
-p 指定容器的端口(小写p)
-P 随机指定端口(大写p)
进入正在运行的容器
docker exec -it 容器id /bin/bash
退出容器
exit # 容器直接停止,并退出
ctrl+p+q 容器不停止退出
列出当前正在运行的容器
docker ps
-a # 列出当前正在运行的容器+历史运行过的容器
-q # 只显示容器的编号
-n=? # 显示最近创建的容器(可以指定显示几条,比如-n=1)
删除容器
docker rm 容器id # 不能删除正在运行的容器
docker rm -f 容器id # 强制删除,包括正在运行的容器
docker rm -f $(docker ps -aq) #删除所有容器
docker rm -f -q|xargs docker rm #删除所有容器
启动和停止容器
docker start 容器id #启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的主机的路径
查看镜像的元数据
docker inspect 容器id
docker安装nginx(docker简单使用)
docker pull nginx 下载nginx镜像
docker run -d –name=”nginx-1” -p 3344:80 nginx 启动nginx
# -d 后台运行
# –name=”nginx01” 给容器命名
# -p 宿主机端口:容器内部端口
测试访问 : 访问宿主机公网ip:宿主机端口
出现以下页面即为成功!
失败可能的原因,云服务器未暴露3344端口(以我容器端口号为例)。
Docker镜像
镜像是什么
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
所有的应用,直接打包docker镜像,就可以直接跑起来!
如何得到镜像:
- 从远程仓库下载
- 朋友拷贝给你
- 自己制作一个镜像DockerFile
UnionFS(联合文件系统)
UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。
Docker镜像加载原型
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是UnionFS。
bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
rootfs(root file system),在bootfs之上。包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。
rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
对于一个精简的OS,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs就可以了。
镜像分层
所有的Docker 镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层。
举一个简单的例子,假如基于Ubuntu Linux 16.04创建一个新的镜像,这就是新镜像的第一层;如果在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层。
Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!
这一层就是我们通常说的容器层,容器之下的都叫镜像层!
容器数据卷
使用
1 | 直接使用命令来挂载:-v |
好处:我们以后修改只需要在本地修改即可,容器内会自动同步!
匿名和具名挂载
1 | 如何确定是具名挂载,还是匿名挂载,还是指定路径挂载 |
DockerFile
介绍:
dockerfile是用来构建docker镜像的文件!命令参数脚本!
构建步骤:
1、编写一个dockerfile文件
2、docker build 构建成为一个镜像
3、docker run运行镜像
4、docker push发布镜像(DockerHub、阿里云镜像仓库!)
注意:
1、每个保留关键字(指令)都是必须是大写字母
2、执行从上到下顺序执行
3、# 表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交!
DockerFile命令
1 | FROM # 基础镜像,一切从这里开始构建 |
CMD和ENTRYPOINT的区别
1 | CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代 |
使用Docker搭建ES
拉镜像
1 | docker pull elasticsearch:7.14.0 |
创建容器并运行
1 | docker run -d --name es -p 9200:9200 -p 9300:9300 -v /usr/local/docker/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ |
配置允许跨域
1 | 进入es容器内部 |
下载分词器
1 | wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.14.0/elasticsearch-analysis-ik-7.14.0.zip |
存储数据挂载未配置,分词未测试
1 | docker cp 容器名称或id:容器内文件地址 本机地址 |
ik分词器包含两种模式:
- ik_smart:最少切分
- ik_max_word:最细切分