xx环境查看
# 系统内核是3.10以上得
[root@localhost ~]# uname -r
3.10.0-1160.el7.x86_64
# 系统版本
[root@localhost ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
安装docker
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
建议更新yun软件包索引
yum makecache fast
4.安装docker
注: docker-ce社区 ee企业版
yum install docker-ce docker-ce-cli containerd.io
5.启动Docker
systemctl start docker
7.检查是否安装成功
docker version
8.配置阿里加速源
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://bcmy56qd.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
hello-world
docker run hello-world
查看一下下载的这个 hello-world 镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 4 months ago 13.3kB
了解:卸载docker
# 1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 2.删除资源
rm -rf /var/lib/docker
# /var/lib/docker docker的默认工作路径
阿里云镜像加速
配置使用
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://bcmy56qd.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker的常用命令
帮助命令
docker version #显示docker的版本信息
docker info #显示docker的系统
docker 命令 --help #万能命令
帮助文档的地址:https://docs.docker.com/engine/reference/commandline/docker/
镜像命令
docker images 查看所有本地主机上的镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 4 months ago 13.3kB
#解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
#可选项
-a, --all #列出所有镜像
-q, --quiet #只显示镜像ID
docker search 搜索镜像
[root@localhost ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12044 [OK]
mariadb MariaDB Server is a high performing open sou… 4615 [OK]
#可选项,通过搜藏来过滤
--filter=STARS=3000 #搜索出的镜像就是STARS大于3000的
docker pull 下载镜像
#下载镜像 docker pull 镜像名[:tag]
[root@localhost ~]# docker pull mysql
Using default tag: latest #如果不写tag,默认就是latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete #分层下载, docker iamge的核心 联合文件系统
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
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
#指定版本下载
[root@localhost ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists
93619dbc5b36: Already exists
99da31dd6142: Already exists
626033c43d70: Already exists
37d5d7efb64e: Already exists
ac563158d721: Already exists
d2ba16033dad: Already exists
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
docker rmi 删除镜像
[root@localhost ~]# docker rmi-f 容器id #删除指定的容器
[root@localhost ~]# docker rmi-f 容器id 容器id 容器id 容器id #删除多个容器
[root@localhost ~]# docker rmi -f $(docker images -aq) #删除全部的容器
容器命令
说明:我们有了镜像才可以创建容器。linux下载一个centos镜像来测试学习
docker pull centos
新建容器并启动
docker run [可选参数] image
# 参数说明
--name="Name" 容器名字 tomcat01 tomcat02 用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进行容器查看内容
-p 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-p 随机指定端口
#测试 启动并进入容器
[root@localhost ~]# docker run -it centos /bin/bash
[root@4e2b6e3449a8 /]# ls #查看容器内的cnetos,基础版本,很多命令都是不完善的!
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
列出所有得运行容器
#docker ps 命令
#列出当前正在运行的容器
-a #列出当前正在运行的容器+带出历史运行过的容器
-n=? #显示最近创建的容器
-q #只显示容器的编号
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4e2b6e3449a8 centos "/bin/bash" 5 minutes ago Exited (0) 3 minutes ago zealous_lewin
e2bf2419cac6 centos "/bin/bash" 6 minutes ago Exited (127) 5 minutes ago festive_shannon
[root@localhost ~]#
退出容器
exit #直接容器停止并退出
Ctrl+P+Q #容器不停止退出
删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f
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 #强制停止当前容器
常用其他命令
后台启动容器
# 命令 docker run -d 镜像名!
[root@localhost ~]# docker run -d centos
#问题docker ps,发现centos停止了
#常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#nginx,容器启动后。发现自己没有提供服务,就会立刻停止,没有程序了
查看日志
docker logs -f -t --tail 容器,没有日志
#显示日志
-tf #显示日志
--tail number #要显示日志条数
查看容器中进程信息
#命令 dockers top 容器id
[root@localhost ~]# docker top 13f84edf9c80
UID PID PPID C STIME TTY TIME CMD
root 4729 4710 0 23:43 pts/0 00:00:00 /bin/bash
查看镜像的源数据
#命令 docker inspect 容器id
#测试
[root@localhost ~]# docker inspect 13f84edf9c80
进入当前正在运行的容器
#我们通常容器都是使用后台方式运行的,需要进行容器,修改一些配置
#命令
docker exec -it 容器id /bin/bash
#方式2
docker attach 容器id
#测试
[root@localhost ~]# docker attach 13f84edf9c80
执行当前的代码
#docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
#docker attach #进入容器正在执行的终端,不会启动新的进程!
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的主机路径
作业1安装nginx
docker run -d -p 3344:80 nginx 启动nginx
curl localhost:3344 检测
#1.搜索镜像 search 建议大家去docker搜索,可以看到帮助文档
#2.下载镜像 pull
#3.运行测试
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 5 weeks ago 141MB
centos latest 5d0da3dc9764 4 months ago 231MB
# -d 后台运行
# --name 给容器命名
#-p 宿主机端口,
作业2安装tomcat
#官方的使用
docker run -it --rm tomcat:9.0
#我们之前的启动都是后台,停止了容器之后,容器还是可以查到, docker run -it --rm 一般用来测试,用完删除
#下载在启动
docker pull tomcat
#启动运行
docker run -d -p 3333:8080 --name tomcat01 tomcat
#测试访问没有问题
#进入容器
[root@localhost ~]# docker exec -it tomcat01 /bin/bash
root@f7e670e1cf5d:/usr/local/tomcat#
#发现问题 1.linux命令少了,2、没有webpps 3、阿里云镜像的原因,默认是最小的镜像,所有不必要的剔除掉
#保证最小运行的环境!
#把root权限给到webapps
root@f7e670e1cf5d:/usr/local/tomcat# cp -r webapps.dist/* webapps
作业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.17.0
#启动了 linux就变卡了 docker stats 查看cpu状态
es 是十分耗内存的
#查看docker stats
#赶紧关闭 增加内存的限制 修改配置文件 -e 环境配置修改
[root@localhost ~]# docker run -d --name elasticsearch -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"限制内存大小
可视化
portainer(先用这个)
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
Rancher(CI/CD再用)
什么portainer?
Docker图形化界面管理工具!提供一个后台面板供我们操作!
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
docker镜像讲解
镜像是什么
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
所有的应用,直接打包 docker镜像,就可以直接跑起来
如何得到镜像:
·从远程仓库下载
·朋友拷贝给你
·自己制作一个镜像 Dockerfile
Docker镜像加载原理
我们下载的时候看到的一层层就是这个!
UnionFS(联合文件系统): Union文件系统( UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下 unite several directories into a single virtualfilesystem). Union文件系统是 Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
特点
Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!
这一层就是我们通常说的容器层,容器之下的都叫镜像层!
如何提交一个自己的镜像
commit镜像
docker commit 提交容器成为一个新的副本
#命令和git原理类似
docker commit -m="提交的描述信息" -a"作者" 容器id 目标镜像名:[TAG]
实战测试
# 启动一个默认的tomcat
#发现这个默认的tomcat 是没有webapps应用,镜像的原因,官方的镜像默认webapps下面是没有文件的!
#我自己拷贝进去了基本的文件
#将我们操作过的容器通过commit提交为一个镜像!我们以后就使用我们修改过的镜像即可,这就是我们自己的一个修改的镜像

学习方式说明:理解概念,但是一定要实践,最后时间和理论相结合一次搞定这个知识
如果你想要保存当前容器的状态,就可以commit来提交,获得一个镜像,就好比我们以前学习vm时候,快照!
到这里才算入门Docker!
容器数据卷
什么是容器数据卷
docker的理念回顾
将应用和环境打包成一个镜像
数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化
MySQL,容器删了,删库跑路!需求:MysQL数据可以存储在本地
容器之间可以有一个数据共享的技术!docker容器中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将我们容器内的目录,挂载到linux上面!
总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!
使用数据卷
方法一:直接使用命令来挂载 -v
docker run -it -v 主机目录:容器目录 (会占用两倍的存储)
# 测试
[root@localhost ~]# docker run -it -v /home/ceshi:/home centos /bin/bash
#启动起来时候我们可以通过 docker inspect 容器id
测试文件的同步
再来测试!
1、停止容器
2、宿主机修改文件
3、启动容器
4、容器内的数据依旧是同步的
好处:我们以后修改只需要在本地修改即可,容器内会自动同步
实战:安装MySQL
思考:Mysql的数据持久化的问题!
# 获取镜像
[root@localhost ~]# docker pull mysql:5.7
# 运行容器,需要做数据
[root@localhost ~]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql
t