时间:2020年11月2日
Docker官网:https://www.docker.com/
在线Docker实验室:https://labs.play-with-docker.com/ 需要自己注册账号 登录即可
帮助文档: https://docs.docker.com/ https://docs.docker.com/engine/install/centos/
准备工作
首先查看系统内核版本
uname -r
然后查看系统版本
cat /etc/os-release
常见命令
启动docker
systemctl start docker
或者:docker restart
关闭docker
systemctl stop docker
查看docker的运行状态
systemctl status docker
Docker安装
先卸载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
安装docker
yum -y install docker // -y 是指不询问是否安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun(自己提前安装的)
查看是否安装了docker
docker version
安装docker引擎与容器
sudo yum install docker-ce docker-ce-cli containerd.io
查看docker是否安装列表
yum list installed | grep docker
设置docker开机自启动
systemctl enable docker.service
更新软件包索引
yum makecache fast
配置阿里云国内镜像加速
#1 编辑配置文件 如果报错添加sudo 命令再执行
vi /etc/docker/daemon.json
#2 里面一开始是就是花括号,直接添加第二行的内容,切记不要换行
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
]
}
然后重新加载配置文件
systemctl reload daemon
# 如果这个不行 切换这个
sudo systemctl daemon-reload
然后重启Docker
systemctl restart docker
启动docker
systemctl start docker
查看是否启动状态
docker stats
测试docker
docker run hello-world
查看下docker的镜像
docker images
卸载docker
sudo yum remove docker-ce docker-ce-cli containerd.io
卸载docker不会删除映像、容器、卷、自定义配置文件
要删除所有图像,容器和卷
sudo rm -rf /var/lib/docker
自定义配置文件 需要手动删除
docker默认工作路径
可以从docker info 查看Docker的系统信息
一般是这个位置:/var/lib/docker
docker run 镜像名 /bin/bash
选取本地查找镜像,有就运行,没有就远程dockerHUB中拉取,最后找到了就运行,找不到就报错
Docker为什么比虚拟机快
- docker比虚拟机更少的抽象层(跳过系统运行)
- 小巧、共用一套lib(用的是宿主机的内核,VM使用的是Guest OS)
所以说 新建一个容器的时候,docker不需要像虚拟机一样重新加载操作系统内核,避免引导,VM是加载GuestOS,分钟级别的,而docker使用的是宿主机内核,避免复杂的过程,更加的快。
Docker 概念
镜像是什么?
镜像是一种轻量级、可执行的独立软件包,它包含某个软件运行所需的所有内容
包括代码、运行时、库、环境变量、配置文件 等等
Docker 镜像加载原理
UnionFS(联合文件系统)
将镜像拆成一个个组件,每次下载镜像的时候,重复的组件,就不需要再次下载!
比如:完整Tomcat镜像需要centos镜像的某些文件,Mysql运行也需要,如果提前下载了centos的镜像,再下载tomcat、mysql等就不需要额外下载了。
当你删除某个容器的时候,某个组件被其他镜像所使用,删除就不会删除公用的部分。当最后一个使用公用组件的镜像删除时,此公共文件才会被同时删除!
Docker常用命令
docker version # 查看docker版本
docker info # 查看更加详细系统的信息,包括镜像与容器的数量
docker --help # docker帮助
镜像命令
查看所有镜像
docker images
- 展示列表所带来的含义
- RESPOSITORY 镜像的仓库源
- TAG 奖项的标签
- IMAGE ID 镜像的ID
- CREATED 镜像的创建时间
- SIZE 镜像的大小
docker images --help # 查看镜像帮助
docker images -qa # 查看所有镜像的ID
搜索命令:docker search 镜像Name
例如:搜索MySql镜像
docker search mysql
docker search --help
# 查询DockerHub中 大于标星3000的Mysql
docker search mysql --filter=STARS=3000
# 下载镜像 (tag代表版本,不写 默认就是latest)
docker pull tag
# 下载最新版本的Mysql
docker pull mysql
docker pull --help
安装Mysql案例 & 详解:
[root@localhost ~]# docker pull mysql
Using default tag: latest # 使用默认的latest版本
latest: Pulling from library/mysql
bb79b6b2107f: Pulling fs layer # 分层下载 docker images核心 联合文件系统
49e22f6fb9f7: Pull complete
842b1255668c: Pull complete
9f48d1f43000: Pull complete
c693f0615bce: Pull complete
8a621b9dbed2: Pull complete
0807d32aef13: Pull complete
a56aca0feb17: Pull complete
de9d45fd0f07: Pull complete
1d68a49161cc: Pull complete
d16d318b774e: Pull complete
49e112c55976: Pull complete
Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 下载的真实地址
得出结论:
# 不指定tag
docker pull mysql
# 等价于
docker pull docker.io/library/mysql:latest
指定版本下载(对比一下上面的案例分析)
docker pull mysql:5.7
[root@localhost ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql //下面蓝色表注的 正是之前lastest版本的mysql
bb79b6b2107f: Already exists
49e22f6fb9f7: Already exists //这里就体现出来docker文件系统优势
842b1255668c: Already exists
9f48d1f43000: Already exists
c693f0615bce: Already exists
8a621b9dbed2: Already exists
0807d32aef13: Already exists
f15d42f48bd9: Pull complete
098ceecc0c8d: Pull complete
b6fead9737bc: Pull complete
351d223d3d76: Pull complete
Digest: sha256:4d2b34e99c14edb99cdd95ddad4d9aa7ea3f2c4405ff0c3509a29dc40bcb10ef
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
删除镜像
docker rmi -f 镜像的id # 删除指定id的镜像
docker rmi -f 镜像id 镜像id 镜像id # 删除多个指定id的镜像
docker rmi -f $(docker images -qa) # 删除全部镜像
同样的道理 当有一个lastest 与5.7的mysql时候,删除mysql5.7的时候 不会全部删除mysql5.7 会先删除mysql5.7对比lastest版本独有的地方 当全部删除mysql时才会全部删除所有的共同部分
容器命令
docker run [可选参数] 镜像名字
可选参数说明:
- --name="Name" 指定容器的名字
- -d 后台方式运行
- -it 使用交互方式运行,进入容器,可查看内容
- -p 指定端口 例如-p 8080:8080
- -p 主机端口:容器端口 (常用)
- -p 容器端口
- -p 主机ip:端口:容器端口
案例 Docker 安装CentOS
[root@localhost ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
3c72a8ed6814: Pull complete
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
[root@localhost ~]# docker run -it centos
[root@fc4e5fcea052 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@fc4e5fcea052 /]# exit
exit
[root@localhost ~]# ls
anaconda-ks.cfg Desktop Documents Downloads Music original-ks.cfg Pictures Public Templates Videos
对比一下 主机centos 与docker运行的centos 文件是不一样的
docker ps [参数] # 查看已经运行的docker容器
-a # 查看当前运行的容器,以及历史运行过的容器
-n=? # 查看最近创建的容器 n代表几个
-q # 查看容器的编号
退出容器
exit # 停止容器并退出
Ctrl + P + Q # 退出不停止容器
删除容器
docker rm 容器id #删除一个指定id的容器 不能删除运行中的容器
docker rm -f $(docker ps -aq) #删除所有容器 可以删除所有运行非运行的容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq) # 停止全部容器并删除,如果没有容器会报错
常用命令
docker start 容器id #启动容器
docker resrart 容器id #重启容器
docker stop 容器id #停止容器
docker kill 容器id #杀死容器
docker -d 容器id #后台启动一个容器
# 常见的坑 docker容器后台运行 必须要有一个前台进程,docker发现没有应用,就会自动停止
# nginx 容器启动后 发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志命令
docker logs [参数]
- -t #显示时间
- -f
- --tail num #显示num条
- --tail=num #显示num条
# 容器mynginx从2016年7月1日后的最新10条日志。
docker logs --since="2016-07-01" --tail=10 mynginx
docker logs --since="2016-07-01" --tail 10 mynginx
# 自己写shell脚本
docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"
docker logs -ft --tail 10 218
docker top 容器ID #查看容器运行情况
docker inspest 容器id #查看容器元数据
进入正在运行的容器
# 容器我们通常都是后台运行的,需要进入容器,修改一些配置
#命令
方式1
docker exec -it 容器id /bin/sh
方式2
docker attach 容器id #一旦写入死循环 你将出不来,不建议使用
对比:
- exec 开启一个新的终端,可以在里面操作
- 而attach是进入正在执行的终端
将容器内文件拷贝到主机上
docker cp 容器id:/容器文件 主机位置
docker cp 容器id:/home/test.java /home 将容器内部的home下test.java 拷贝到主机上的home下 ,容器运不运行无关
将主机文件拷贝纸容器内
docker cp 主机文件 容器id:/容器位置
未来可以可以使用数据卷的技术 实现自动同步
上手实验 部署Nginx
docker search nginx --filter=Stars=3000 #建议去dockerhub 可以看到更多的信息
docker pull nginx
docker run -d --name nginx001 -p:公网端口:容器运行端口
#如果是本地测试的环境,需要开启本地服务器的防火墙,如果是云服务器,可能还要有安全组需要开放!
#干掉防火墙 就跑起来了
systemctl stop firewalld.service
docker exec -it 镜像id /bin/bash
Whereis nginx
说明:如果使用的在线的网页版docker 再开一台实例即可,他们俩在一个网段,可以直接互通,代替公网访问!
查看到nginx后 可以进行修改配置文件,达到修改nginx配置文件,但是目前修改文件的命令,我们需要使用数据卷技术,来实现修改文件的目的,在Docker 高级中会讲解!
不过想看单独在此镜像的内容,请输入
nginx -help
部署Tomcat (切换镜像加速下载快)
# 拉取镜像
docker pull tomcat
# 用完即删除,一般用于做测试
docker run -it --rm tomcat
# 启动tomcat
docker run -d --name tomcat001 -p8080:8080 tomcat
curl 127.0.0.1:8080 #一定会看到404
# 发现镜像的tomcat的webapps里没有Root文件夹,所以无法查看相关web
docker exec -it 镜像id /bin/bash
# Root文件夹在 "webapps.dist"文件夹里面 复制到tomcat的webapp文件夹下 就可以访问了!
cp -r webapps.dist/ROOT webapps
curl 127.0.0.1:8080 #这次需要等待一会进入,就不再示404了
Ctrl + P + Q 退出
部署ElastcSearch + Kibana
首先先去DockerHub 查找一下ElastcSearch:https://hub.docker.com/_/elasticsearch
#下载加启动ElastcSearch 注意,此命令敲后,内存会激增,ElasticSerarch大约被使用了1.28G了 但是Docker自身占用了内存也会变高。
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
#发现ElastcSearch有些卡
#查看先Docker运行状态
docker stats
#查看ES 是否启动
curl localhost:9200
#停止下search服务
docker stop 镜像id
docker start 镜像id或名字 启动镜像
#增加内存对ES的限制 (这里要修改下名字,不然容器名字一样不允许)
docker run -d --name elasticsearch002 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
其中加入的-e ES_JAVA_OPTS="-Xms64m -Xmx512m" 表述的指定内存参数最小64M 最大512m 但是内存越小运行越慢。
#查看ES 是否启动
curl localhost:9200
可视化 portainer(暂时使用这个 读音 pro Ti na)
Docker 图形化界面管理工具 镜像名就是:portainer/portainer
docker run -d -p:8088:9000 --restart=always -v "/var/run/docker.sock:/var/run/docker.sock" --privileged=true portainer/portainer
既然提示让我们操作
那我们就按照指令操作
docker run -d --name portainer -p:8088:9000 --restart=always -v "/var/run/docker.sock:/var/run/docker.sock" portainer/portainer
第一次需要注册一个账号即可。如果无法连接本地 请检查run 命令 最好自己重新打一遍!
直接访问 127.0.0.1:8088
将 容器 变成 镜像
docker commit -m="提交的信息" -a="作者" 容器id 目标镜像名:tags
然后 docker images 就会出现了新的镜像了
到这里就是Docker 入门(精髓在下面) !
https://www.zanglikun.com/4903.html
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
评论(0)