一、docker背景介绍
- 之前的虚拟机技术

- 容器技术

- 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
- 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
- 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响
二、docker组成

从仓库中拉取镜像,运行镜像来创建容器,一个镜像可创建多个容器
三、安装docker
https://docs.docker.com/engine/install/
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engineyum install -y yum-utilsyum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repoyum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fastyum install docker-ce docker-ce-cli containerd.io systemctl start dockerdocker versiondocker run hello-world
yum remove docker-ce docker-ce-cli containerd.iorm -rf /var/lib/docker
四、docker创建容器流程

五、docker常用命令
docker logs -t --tail n 容器id docker version docker infodocker 命令 --help
docker images docker search [镜像名] docker pull [镜像名] docker rmi [镜像名]
docker run 镜像名 docker run -d 镜像名 docker run -it centos /bin/bash docker exec -it 容器id /bin/bash docker ps 列出所有运行的容器docker start 容器iddocker restart 容器iddocker stop 容器iddocker kill 容器iddocker inspect 容器id exit ctrl +P +Q docker rm 容器id docker rm -f $(docker ps -aq) docker cp b2552adaeb74:/home/test.java /usr/local
- dockers命令可爱图

六、安装nginx示例
docker search nginx
docker pull nginx
docker images
注意这里的端口映射需要在linux防火墙中开放对应的端口
docker run -d -p 3344:80 --name nginx01 nginx
docker exec -it nginxTest /bin/bash
- 端口映射图解

七、安装tomcat示例
docker run -d -p 3355:8080 --name tomcat01 tomcat
docker exec -it tomcat /bin/bash
- 发现webapps下面没有任何文件

- 此时打开tomcat页面,发现404,原因就是webapps下面没有对应文件

- webapps.list存在webapps对应的文件,把所有文件复制过来即可

- 此时打开网页可以查看到tomcat启动

八、安装elasticsearch
- es非常消耗内存,启动需要增加内存的限制
- 查看docker资源
docker stats

docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" --name es elasticsearch:7.6.2
- docker容器内部互相隔离,kibana连接es需要通过linux内网ip

九、portainer可视化面板
docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
- 打开界面

- 选择local连接,进入可查看

十、镜像讲解
- 用来打包软件运行环境和基于运行环境开发的软件,包含运行某个项目所需的所有内容,包括代码,运行时库,环境变量和配置文件
- 打包镜像
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
十一、容器数据卷
容器之间数据共享,数据可以持久化到本地。就是目录的挂载,将容器的目录挂载到linux服务器上面
- 方式一:利用命令挂载
docker run -it -v /usr/test/dockertest:/home centos /bin/bashdocker inspect 容器id
查看挂载信息

启动mysql并挂载,注意是后台启动
docker run -d -p 9002:3306 -v /home/test/mysqltest/conf:/etc/mysql/conf.d -v /home/test/mysqltest/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
# 查看所有数据卷 docker volume ls
[root@iZwz9bbmlfbm8e53rmdyldZ data]DRIVER VOLUME NAMElocal 6bed29f75b9e01f5bb0c863d4eee619aa8cc9094e784a3e432ad372d51bf45f8local 418ccd4bf694edc60e8311a18faf43b57b6f32ec2a7ebeccd63eba196ca0328alocal 876d80eb1f2f2964fcac3b7f3ab9cd1cf877f74298a14b4c4f541c86e40eb6f1local bdced74445397950156218d690b9ea09359f74d6928b619d486f65b6ff8c37e2local e16b1d001cbb62a81105f993a0c4dab610c88320d1b08fde4f1511e6420d6fdb
# 以上都是匿名的挂载,可以使用docker volume inspect [卷名] 查看数据卷的信息
[root@iZwz9bbmlfbm8e53rmdyldZ data][ { "CreatedAt": "2022-03-23T11:41:50+08:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/e16b1d001cbb62a81105f993a0c4dab610c88320d1b08fde4f1511e6420d6fdb/_data", "Name": "e16b1d001cbb62a81105f993a0c4dab610c88320d1b08fde4f1511e6420d6fdb", "Options": null, "Scope": "local" }]
# 可以看到以上数据卷的数据存在/var/lib/docker/volumes/XXX 下面 # 只要没有指定挂载目录,都是放在/var/lib/docker/volumes/XXX 下面的 # 可以使用下面的具名挂载 docker run -d -v juming-nginx:/etc/nginx nginx
[root@iZwz9bbmlfbm8e53rmdyldZ mysql]DRIVER VOLUME NAMElocal 6bed29f75b9e01f5bb0c863d4eee619aa8cc9094e784a3e432ad372d51bf45f8local 418ccd4bf694edc60e8311a18faf43b57b6f32ec2a7ebeccd63eba196ca0328alocal 876d80eb1f2f2964fcac3b7f3ab9cd1cf877f74298a14b4c4f541c86e40eb6f1local bdced74445397950156218d690b9ea09359f74d6928b619d486f65b6ff8c37e2local e16b1d001cbb62a81105f993a0c4dab610c88320d1b08fde4f1511e6420d6fdblocal juming-nginx

-v 容器内路径 匿名挂载-v 卷名:容器内路径 具名挂载-v /宿主机路径:/容器内路径 指定路径挂载
- dockerfile命令脚本挂载
dockerfile是用来构建dockers镜像的文件,命令脚本通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层# 下面来一个demo
[root@iZwz9bbmlfbm8e53rmdyldZ dockertest]FROM centos VOLUME ["volume1","volume2"]CMD echo "-----end------"CMD /bin/bash[root@iZwz9bbmlfbm8e53rmdyldZ dockertest][root@iZwz9bbmlfbm8e53rmdyldZ dockertest]REPOSITORY TAGIMAGE IDCREATEDSIZExbj/centos latest a53f6e729d0e About a minute ago 231MB<none> <none> 033c421e4ae2 53 minutes ago231MBtomcattest 1.0f500c9825421 3 days ago 684MB[root@iZwz9bbmlfbm8e53rmdyldZ dockertest]CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1ef7ace106ee 033c421e4ae2 "/bin/bash" 24 minutes ago Up 24 minutes [root@iZwz9bbmlfbm8e53rmdyldZ dockertest]"Mounts": [ { "Type": "volume", "Name": "769d8c2a9b8a47b3c9454b851ad44122fc78459d5d15b086bfd7ac2df6d0b4e8", "Source": "/var/lib/docker/volumes/769d8c2a9b8a47b3c9454b851ad44122fc78459d5d15b086bfd7ac2df6d0b4e8/_data", "Destination": "volume01", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" }, { "Type": "volume", "Name": "38413e11b2aedfec9a3653d31bec640a99043e67b60e5ed28d947daa157e9b1c", "Source": "/var/lib/docker/volumes/38413e11b2aedfec9a3653d31bec640a99043e67b60e5ed28d947daa157e9b1c/_data", "Destination": "volume02", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ],
十二、数据卷容器(容器之间共享数据)

[root@iZwz9bbmlfbm8e53rmdyldZ _data]docker run -it --name docker02 --volumes-from docker01 xbj/centos