Docker的认知
-
核心概念 docker是一种linux容器技术。容器有效的将由单个操作系统挂管理的资源划分到孤立的组中,以便更好的在组之间平衡有冲突的资源使用需求。可简单理解为一种沙盒 。每个容器内运行一个应用,不同的容器之间相互隔离,容器之间也可以建立通信机制。容器的创建和停止都十分快速,资源需求远远低于虚拟机。 Docker通过隔离机制,可以将服务器利用到极致。 -
基于GO语言开发的。 -
官网地址:https://www.docker.com/ 文档地址:https://docs.docker.com/ 仓库地址:https://hub.docker.com/ -
区别 -
传统的虚拟机,虚拟出一个硬件,运行一个完整的操作系统 -
容器内的应用直接运行在宿主机上,容器没有自己的内核,也没有虚拟硬件 每个容器是相互隔离的,每个容器都有属于自己的文件系统,互补影响 5.docker与虚拟化 -
虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器,网络,内存等抽象、转化后呈现出来,使用户以更好的方式来应用这些资源。虚拟化目标往往是为了在同一个主机上运行多个系统或者应用,从而提高资源的利用率,降低成本,方便管理及容错容灾。 -
操作系统级的虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。docker以及其他容器技术就属于此范畴。 -
传统虚拟化方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。而docker容器是在操作系统层面上实现虚拟化,直接复用本地主机操作系统,更加轻量。
- 作用
1、应用可以更加快捷的交付和部署 2、使用的分层存储以及镜像的技术,更便捷的升级和扩容,轻松的迁移扩展 3、更简单的系统运维, 简单的更新管理 4、更高效的计算资源利用 5、能高效地构建应用。 6、更快速的启动时间,由于直接运行于宿主内核,无需启动完整的操作系统 一个虚拟机上可以运行多个容器实例 - 结构
镜像(image):可以看作一个模板,可以通过这个模板来创建容器服务 容器(container):独立运行一个或一个组应用,通过镜像创建,相当于一个实例 仓库(repository):存放镜像的地方
安装Docker
- 卸载旧的版本
$sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 安装
sudo yum install -y yum-utils
- 设置镜像地址
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo --- 推荐使用阿里云镜像
- 更新软件索引
sudo yum makecache fast
- 安装docker相关内容
docker -ce 社区版 docker -ee 企业版
sudo yum install docker-ce docker-ce-cli containerd.io
- 启动Docker
sudo systemctl start docker
- 获取docker的版本
docker versiondock
- 测试
docker run hello-world
- 查看下载的 hello-world镜像
[root@localhost ~]
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 2 months ago 13.3kB
nacos/nacos-server 2.0.1 90c4c6c5d925 7 months ago 1.04GB
卸载Docker
- 卸载依赖
yum remove docker -ce docker -ce-cli containerd,io
- 删除资源
rm -rf /var/lib/docker ---默认工作路径
阿里云镜像加速
- 阿里云 --容器服务
- 镜像加速器
- 配置使用
sudo mkdir -p ./etc/docker
sudo tee ./etc/docker/daemon.jsin<<-'EOF'
{
"registry-mirrors":["地址"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker的常用命令
帮助命令
docker version
docker info
docker help
帮助文档地址:https://docs.docker.com/reference/
镜像命令
docker images 查看所有本地主机上的镜像
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATE 镜像的创建时间
SIZE 镜像的大小
-a, --all 列出所有的镜像
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet 只显示镜像的ID
docker search 搜索镜像
例子:docker serach mysql
添加参数:--filter=STARS=3000
docker pull mysql
等价于:docker pull docker.io/library/mysql:latest
添加参数: :tag
联合文件系统
docker rmi -f 镜像ID
docker rmi -f $(docker images -aq)
容器命令
docker run[可选参数] image
--name= "容器名称" 容器名称,用于区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口
-P 随机指定端口
-e 环境配置
例子
docker run -it 容器名称 /bin/bash
exit
Ctrl + P + Q
docker ps
docker ps -a
-n = ?
-q
docker rm 容器的ID
docker rm -f ¥(docker ps -aq)
docker ps -a -q|xargs docker rm
docker start 容器ID
docker restart 容器ID
docker stop 容器ID
docker kill 容器的ID
commit镜像
docker commit -a = "提交用户名" -m= "日志" 镜像ID 目标镜像名称:【tag】
docker commit -a = "sun" -m= "add message to tomcat" 7easak434223 tomcat02:1.0
其他容器命令
docker run -d 镜像名称
问题: docker ps 发现镜像停止了
原因: docker 容器使用后台运行时,就必须有一个前台的进程,docker发现没有应用,就会自动停止
如 nginx容器启动后,法相自己没有提供服务,就会立即停止
docker logs -f -t --tail t条数 容器ID
docker top 容器ID
docker inspect 容器的ID
docker inspect 容器的ID
docker stats
进入当前正在运行的容器
方式一:进入容器后开启一个新的终端,可以在里面操作
docker exec -it 容器的ID bashShell
例子:
[root@localhost ~]
root@90185ae982b0:/apache-zookeeper-3.6.0-bin
方式二:进入容器正在执行的终端,不会启动新的进程
docker attach 容器的ID
docker cp 容器的ID:容器内的路径 目标主机的路径
练习
安装Nginx
docker search nginx
docker pull nginx
docker run -d --name nginx01 -p :3344:80 nginx
-d 后台运行
-p 宿主机端口:容器内部端口 暴漏端口于宿主机
curl localhost:3344
[root@localhost ~]
root@4200055aa7ae:/
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@4200055aa7ae:/
root@4200055aa7ae:/etc/nginx
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
安装tomcat
docker run -it --rm tomcat:9.0
该命令表示用完即删,一般用于测试
docker pull tomcat
docker run -d -p 3355:8080 --name tomcat01 tomcat
docker exec -it tomcat01 /bin/bash
发现 1:linux命令少了 2:没有webapps 原因:阿里云镜像的原因,默认是最小的镜像,所有不必要的都被剔除 解决方法:
docker exec -it tomcat01 /bin/bash
cp -r webapps.dist/* webapps
部署es
[root@localhost ~]
[root@localhost ~]
{
"name" : "12c7a95dad74",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "OqhjqILdQ3SetCie7pnOSg",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
-e 添加环境配置
[root@localhost ~]
配置可视化(pointainer)
docker run -d -p 8088:9000\
--restart=always -v /var/run/docker.sock:var/run/docker.sock --name portainer1 --privileged=true portainer/portainer
|