产品: 开发-到上线 两套环境,应用环境,应用配置!
1.解决 “在我的电脑上可以运行的问题”
2.解决配置开发环境麻烦的问题
3.开发即运维
Docker:jar+环境(镜像) 进行打包 下载镜像,直接运行即可。
Doker的思想来自于集装箱,每一个箱子相互隔离,可以将服务器压榨到极致。相对于虚拟机技术,十分轻巧。
vm:Linux centOS原生镜像(一个电脑),虚拟出一系列的硬件,运行一个完整的操作系统。 隔离需要开启多个虚拟机(笨重)
1.资源占用多
2.冗余步骤多
3.启动很慢
docker:应用直接运行在宿主机的内核中,容器没有自己的内核。隔离(最核心的环境 4m + jdk + mysql) 运行镜像就可以了(秒级启动),每个容器内有一个属于自己的文件系统,互不影响。
官网:Home - Docker
Docker的基本组成:
镜像(image):就好比是一个模板,通过这个模板创建容器服务,通过镜像可以创建多个容器。
容器(container):独立运行一个或者一组应用,通过镜像创建,启动,停止,删除基本命令
简易的linux系统
仓库(repository): 存放镜像的地方
共有仓库,私有仓库
Docker hub是国外的,国内使用配置镜像仓库
1.CentOS7以上
2.使用Xshell连接
内核在3.10以上
uname -r
确认系统版本 :
cat /etc/os-release
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 \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager \
--add-repo \
# https://download.docker.com/linux/centos/docker-ce.repo #默认是国外的
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#阿里云
yum makecache fast
#docker-ce 指的是社区版 ee是企业版
sudo yum install docker-ce docker-ce-cli containerd.io
选择y直到安装完成
sudo systemctl start docker
docker version
sudo docker run hello-world
看到Hello from Docker! 就说明启动成功了
#卸载依赖
sudo yum remove docker-ce docker-ce-cli containerd.io
#删除目录
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://el6hwwqp.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
1.开始
2.Docker在本机寻找镜像(判断是否有镜像)
2.1 yes 直接使用这个镜像运行
2.2 no 从仓库下载镜像
2.2.1 判断是否可以在仓库找到镜像
2.2.1.1 yes 下载镜像到本地
2.2.1.2 no 返回错误,找不到镜像
Client - Server 结构的系统,Docker的守护进程运行在主机上,通过Socket客户端访问
Docker - Server接收到Docker - Client 的命令,就会执行这个命令。
1.Docker有比虚拟机更少的抽象层,Docker Engine直接运行在宿主机上,不需要安装虚拟的OS
2.Docker用的是宿主机的内核,相当于是利用宿主机操作。而vm是Guest OS,分钟级。
docker version #查看版本信息
docker info #查看信息(更多的系统信息,镜像和容器的数量等)
docker 命令 --help #查看命令帮助
帮助文档地址:Reference documentation | Docker Documentation
docker images #查询所有本地主机上的镜像
REPOSITORY #镜像的仓库源
TAG #镜像的标签
IMAGE ID #镜像的ID
CREATED #镜像的创建时间
SIZE #镜像的大小
通过 doker images --help可以得到其他的可选项:
Options:
-a, --all #Show all images (default hides intermediate images)
#列出所有的镜像
--digests #Show digests
#列出摘要
-f, --filter filter #Filter output based on conditions provided
#根据提供的条件筛选输出过滤
--format string #Pretty-print images using a Go template
#使用Go模板打印漂亮的图像
--no-trunc #Don't truncate output
#不要截断输出
-q, --quiet #Only show image IDs
#只显示镜像的ID
docker search
搜索mysql:
docker search mysql
mysql MySQL is a widely used, open-source relation… 11880 [OK]
mariadb MariaDB Server is a high performing open sou… 4541 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 888 [OK]
#对应了官网上的镜像
docker search --help
Options:
-f, --filter filter Filter output based on conditions provided
#搜索出来的镜像进行过滤
--format string Pretty-print search using a Go template
#使用Go模板打印漂亮的图像
--limit int Max number of search results (default 25)
#最大值限制,结果只显示前X个
--no-trunc Don't truncate output
#不要截断输出
假设我们要搜索mysql有关的,并且星级大于3000的:
docker search mysql --filter=STARS=3000
结果是:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11880 [OK]
mariadb MariaDB Server is a high performing open sou… 4541 [OK]
docker pull 镜像名 【:版本】
执行:
docker pull mysql
结果:
Using default tag: latest #如果不写tag,默认就是最新版本
latest: Pulling from library/mysql
72a69066d2fe: Pull complete #分层下载,docker image的核心,联合文件下载:已经下载好的文件可以公用,不再下载
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 #签名(防伪标志)
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
完全相等
docker pull mysql == docker pull docker.io/library/mysql:latest
docker rmi -f 容器ID #指定ID删除
docker rmi -f 容器ID 容器ID 容器ID 容器ID #删除多个容器
docker rmi -f (docker images -aq) #递归删除全部容器
我们必须先有了镜像,才能创建容器 :
1.下载centOS
docker pull centos
2.新建容器并启动
docker run 命令:
docker run 【可选参数】 image
#参数说明:
--name="Name" #容器名字 tomact01等,用于区分容器
-d #后台方式运行
-it #使用交互方式运行,进入容器查看内容
-p #指定容器的端口
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
-P #随机指定端口
3.列出容器
docker run -it centos /bin/bash #启动并且进入容器
root@44.../ #主机名就是镜像ID
exit #退出容器
docker ps #查看正在运行的容器
docker ps -a #查看曾经运行过的容器
docker ps -n=? #查看最近创建的容器
docker ps -q #只显示容器的编号
4.退出容器
exit #直接停止容器并退出
快捷键:Control+p+q #不停止容器退出
通过快捷键的方式,退出容器后,容器依旧在运行
5.删除容器
docker rm 容器id #删除指定容器(不能删除正在运行的容器,只能用rm-f)
docker rm -f $(docker ps -aq) #删除所有容器
docker ps -a -q|xargs docker rm #删除所有容器
不能删除正在运行的容器,只能rm -rf强制删除
6.启动和停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止容器
docker kill 容器id #杀死容器
1.后台启动命令
docker run -d 镜像名 #后台运行容器
#docker ps 发现服务停止
#常见坑:docker容器使用后台运行,就必须要有一个前台进程。docker发现没前台应用,就会自动停止
2.查看日志
docker logs -f -t --tail 容器id
3.查看容器中的进程信息
top 命令
docker top 容器id
4. 查看镜像中的源数据
docker inspect 容器id
5.进入当前正在运行的容器
#通常容器是使用后台方式运行的,需要进入容器,修改配置
docker exec -it 容器id /bin/bash #进入容器后开启一个新的终端,可以对里面进行操作
docker attach -it 容器id /bin/bash #进入容器正在执行的终端,不会启动新的进程
6.从容器拷贝文件到主机
docker cp 容器id
attach #当前shell下attach连接指定运行镜像
build #通过Dockerfile定制镜像
commit #提交当前容器为新的镜像
cp #从容器中拷贝指定文件或者目录到宿主机
create #创建一个新的容器,通run,但是不启动容器
diff #查看docker容器变化
events #从docker服务获取容器实时事件
exec #已存在的容器上运行命令
export #导出容器的内容刘作为一个tar归档文件【对应inport】
history #展示一个镜像形成历史
images #列出系统当前镜像
info #显示系统相关信息
inspect #查看容器详细信息
kill #kill指定docker容器
load #从一个tar包中加载一个镜像【对应save】
login #注册或登录一个docker源服务器
logout #从当前Docker registry退出
logs #输出当前容器日志信息
port #查看映射端口对应的容器内部源端口
pause #暂停容器
ps #列出容器列表
pull #从docker镜像源服务器拉取指定镜像
push #推送指定镜像或者库镜像到docker源服务器
restart #重启运行的容器
rm #移除一个或多个容器
rmi #移除一个或多个镜像【无容器使用该镜像才可删除,否则需要删除相关容器才可继续或-f强制删除】
run #创建一个新的容器并运行一个命令
save #保存一个镜像为一个tar包【对应load】
search #在docker hub中搜索镜像
start #启动容器
stop #停止容器
tag #给源中的镜像打标签
top #查看容器中运行的进程信息
unpause #取消暂停容器
version #查看docker版本号
wait #截取容器停止是的退出状态值