docker概述
Docker的思想来自于集装箱
隔离机制 核心思想 互相隔离
轻巧 与VM比较
虚拟机 Docker容器技术 均为虚拟化技术
vm linux centos 原生镜像(一个电脑)隔离,多开虚拟机 较大
docker 隔离,镜像(最核心的 环境)运行镜像 小巧
基于go语言的开源项目
Docker历史
2010年 美国 dotcloud
做 pass的云计算服务 ! LXC 有关的容器技术(命名为docker)
2013年开源(每月更新一个版本)
2014年4月9日,Docker1.0发布
Docker的作用
虚拟机技术
虚拟机技术特点:
1.资源占用多
2.冗余步骤多
3.启动慢
- > 容器化技术
容器化技术不是模拟的一个完整的操作系统
比较
-
传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在系统上安装和运行软件
-
容器内的应用直接运行在宿主机 的内容你,容器是没有自己的内核的,也没有虚拟硬件,因此轻便
-
每个容器间互相隔离,每个容器内部都有属于自己的文件系统,互不影响
DevOps(开发、运行)
应用更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一键运行
更便捷的升级和扩缩容
Docker类似于搭积木
项目打包为一个镜像,拓展,服务器A,服务器B
更简单的系统运维
容器化后, 开发,测试高度一致
更高效的计算资源利用
Docker是内核级别的虚拟化,可以在同一个物理机上运行很多个容器实例。服务器的性能可以发挥到极致!
Docker安装
Docker的基本组成
镜像(image)
docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像==>run==>tomcat01容器(提供服务器),通过镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中)
容器(container)
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建。
启动 停止 删除 基本命令
简易的linux系统
仓库(repasitory)
存储镜像的地方
分为公有仓库和私有仓库
Docker hub (默认国外)
阿里云 华为云 都有容器服务器(配置镜像加速)
Docker的安装与卸载
环境准备
- 需要linux基础知识
- 系统
debian系,ubuntu,mint
redhat 系 RedHat,Fedora,CentOs等
3.Putty、XShell、SecureCRT、SSH Secure Shell Slien软件
环境查看
#系统内核查看 必须3.10以上
uname —r
手动安装
帮助文档
mac https://docs.docker.com/get-docker/#docker-for-mac
windows https://docs.docker.com/get-docker/#docker-for-windows/install/
linux https://docs.docker.com/get-docker/#docker-for-linux
以centos为例
#1.卸载旧版本 Docker 的旧版本被称为 docker,docker.io 或 docker-engine
#当前称为 Docker Engine-Community 软件包 docker-ce 。
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#2.需要的安装包
sudo yum install -y yum-utils
#3.设置镜像仓库
yum-config-manager \
--add-repo \
https://mirrors.bfsu.edu.cn/help/docker-ce/#北京外国语大学开源软件镜像站
#更新索引
yum makecache fast
#4.安装docker ce社区 ee企业
yum install docker-ce docker-ce-cli containerd.io
#5.启动docker
systemctl start docker
#6.查看版本
docker version
#7.hello-world
docker run hello-world
#8.查看下载hello-world
docker images
脚本自动安装
国内安装命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
国外
sudo curl -sSL https://get.daocloud.io/docker | sh
卸载docker
#1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#2.删除资源
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
#/var/lib/docker 默认位置
安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Ubuntu用户快速安装
docker-compose
sudo apt-get update && sudo apt-get install -y python3-pip curl vim git moreutils
pip3 install --upgrade pip
pip install docker-compose
Docker的原理
Run的流程
底层原理
Docker是怎样工作的?
Docker是一个Client-Sever结构的系统,Docker的守护进程在本地运行在本地主机,通过Socket从客户端访问。
DockerSever接收到Docker Client的指令,就会执行命令。
Docker快的原因
Docker的抽像层比vm少
Docker利用的是宿主机的内核,vm需要的是Guest os
新建容器时docker不需要重新加载操作系统内核避免引导,虚拟机需要加载Guest os,docker利用操作系统内核。
Docker的常用命令
帮助命令
docker version #显示版本信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker --help #命令帮助文档
帮助文档地址:https://docs.docker.com/engine/reference/commandline/
镜像命令
docker images#查看所有本地的镜像
#可选项
--all , -a #列出所有的镜像
--quiet , -q #只显示镜像ID
docker search #搜索镜像
#可选项
docker pull #下载镜像
docker rmi #删除镜像
#可选项
-f 容器ID #删除单个容器
-f 容器ID -f 容器ID -f 容器ID #删除多个容器
-f $(docker images -aq) #删除全部容器
容器命令
docker run [可选参数] images
#参数说明
--name="Name" #容器名字
-d #容器后台运行
-it #使用交互方式运行,进入容器查看内容
-p #指定容器的端口 -p 8080:8080
-p ip
-p 主机端口:容器端口(常用)
-p 容器端口
-p 随机端口
docker exec -it [name] /bin/sh 启动并进入容器
ls 查看目录
exit 退出
#列出运行的容器
docker ps # 列出正在运行的容器
#可选项
-a #列出当前正在运行的容器+历史运行过的容器
-n=[number] #显示最近创建的[number]个容器
-q #只显示容器编号
#退出容器
exit #容器停止并退出
Ctrl+P+Q #容器不停止退出
#删除容器
docker rm 容器ID #删除指定容器
docker rm -f $(docker ps -aq) #删除所有容器
docker ps -a -q| xargs docker #删除所有容器
#启动和停止容器操作
docker start 容器ID #启动容器
docker restart 容器ID #重启容器
docker stop 容器ID #停止正在运行的容器
docker kill 容器id #强制停止当前容器
常用其他命令
#后台启动容器
docker run -d [imagesname]
#问题docker ps,发现[imagesname]停止了
#常见的坑:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#nginx,容器启动候,发现自己没有提供服务,就会立刻停止,就没有程序了
#查看日志
docker logs -f -t --tail
-tf #显示日志
--tail number #要显示的条数
#查看容器中的进程信息
docker top 容器ID
#查看镜像元数据
docker inspect 容器ID
#进入当前正在进行的容器
#我们通常容器都是在后台运行的,需要进入容器修改一些配置
#命令
docker exec -it 容器ID bashshell
方法二
docker attach 容器ID
#docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
#docker attach #进入容器正在执行的终端,不会启动新的进程
从容器内拷贝到主机上
docker cp 容器ID:容器内路径 目的的主机路径
小结
attach Attach to a running container #当前shell下attach连接指定运行镜像
build Build an image from a Dockerfile #通过Dockerfile定制镜像
commit Create a new image from a container's changes #提交当前容器为新的镜像
cp Copy files/folders from a container to a HOSTDIR or to STDOUT #从容器中拷贝指定文件或者目录到宿主机中
create Create a new container #创建一个新的容器,同run 但不启动容器
diff Inspect changes on a container's filesystem #查看docker容器变化
events Get real time events from the server#从docker服务获取容器实时事件
exec Run a command in a running container#在已存在的容器上运行命令
export Export a container's filesystem as a tar archive #导出容器的内容流作为一个tar归档文件(对应import)
history Show the history of an image #展示一个镜像形成历史
images List images #列出系统当前镜像
import Import the contents from a tarball to create a filesystem image #从tar包中的内容创建一个新的文件系统映像(对应export)
info Display system-wide information #显示系统相关信息
inspect Return low-level information on a container or image #查看容器详细信息
kill Kill a running container #kill指定docker容器
load Load an image from a tar archive or STDIN #从一个tar包中加载一个镜像(对应save)
login Register or log in to a Docker registry#注册或者登陆一个docker源服务器
logout Log out from a Docker registry #从当前Docker registry退出
logs Fetch the logs of a container #输出当前容器日志信息
pause Pause all processes within a container#暂停容器
port List port mappings or a specific mapping for the CONTAINER #查看映射端口对应的容器内部源端口
ps list containers #列出容器列表
pull Pull an image or a repository from a registry #从docker镜像源服务器拉取指定镜像或者库镜像
push Push an image or a repository to a registry #推送指定镜像或者库镜像至docker源服务器
rename Rename a container #重命名容器
restart Restart a running container #重启运行的容器
rm Remove one or more containers #移除一个或者多个容器
rmi Remove one or more images #移除一个或多个镜像(无容器使用该镜像才可以删除,否则需要删除相关容器才可以继续或者-f强制删除)
run Run a command in a new container #创建一个新的容器并运行一个命令
save Save an image(s) to a tar archive#保存一个镜像为一个tar包(对应load)
search Search the Docker Hub for images #在docker
hub中搜索镜像
start Start one or more stopped containers#启动容器
stats Display a live stream of container(s) resource usage statistics #统计容器使用资源
stop Stop a running container #停止容器
tag Tag an image into a repository #给源中镜像打标签
top Display the running processes of a container #查看容器中运行的进程信息
unpause Unpause all processes within a container #取消暂停容器
version Show the Docker version information#查看容器版本号
wait Block until a container stops, then print its exit code #截取容器停止时的退出状态值
作业练习
练习1:安装Nginx
#1.搜索镜像 search
#2.下载镜像 pull
#3.运行测试
#-d 后台运行
#--name 容器命名
#-p 宿主机端口:容器内部端口
root@ecs-kc1-large-2-linux-20210405130538:~# docker run -d --name nginx01 -p 3389:80 nginx
04dd3a53cb4c641708187d717f9ada1cf49f208494a944b75a688a3d93163dfa
root@ecs-kc1-large-2-linux-20210405130538:~# curl localhost:3389
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
#4.进入容器
root@ecs-kc1-large-2-linux-20210405130538:~# docker exec -it nginx01 /bin/bash
root@04dd3a53cb4c:/# ls
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var
#5.退出容器
root@04dd3a53cb4c:/# exit
exit
#6.停止容器
root@ecs-kc1-large-2-linux-20210405130538:~# docker stop nginx01
nginx01
端口暴露
作业二:安装tomcat
#官方的使用
docker run -it --rm tomcat:9.0#用完即删,一般用于测试
#下载再启动
docker pull tomcat:9.0
#启动
docker images
docker run -d -p 8888:80 --name tomcat01 tomcat
#进入容器
#docker exec -it tomcat01 /bin/bash
#出现linux没有命令,没有wabapps
cp -r wabapps.dist/* wabapps
作业3:部署es+kibana
#es暴露端口多
#es十分耗内存
#es十分耗内存一般需要放置在安全目录!挂载
#-net somenetwork ? 网络配置
#启动elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
#启动后 linux卡 docker stats 查看cpu状态
#测试es是否成功
#curl localhost:9200
#赶紧关闭,增加内存限制,-e 修改配置文件
docker stop 容器ID
#docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node"
-e ES_JAVA-OPTS="Xms64 -Xmx512" elasticsearch:7.6.2
#查看docker stats
作业:如何使用kibana连接es,网络如何连接