1.Docker应用场景
Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker(模板)将软件运往各个环境(测试环境和生产环境拉取镜像(实例)),相当于是一个模子刻出来的
- Web应用自动化打包和发布
- 自动化测试和持续集成、发布
- 在服务型环境中部署和调整数据库或其他的后台应用
- 使用Docker可以实现开发人员的开发环境、测试人员的测试环境、运维人员的生产环境一致性
搭建化境、基于容器构建微服务架构
2.Docker与传统VM对比
Docker:在操作系统层面实现虚拟化,直接复用本地操作系统。启动速度快,占用体积小
传统虚拟机:硬件层面实现虚拟化
3.Docker三个基本概念
镜像(静态)
创建Docker容器的模板(静态只读-类),相当于一个root文件系统。
镜像和容器的关系, 就像面向对象程序设计中类和实例一样,镜像是静态的定义,容器是镜像运行时的实体
容器(动态)
容器是一个运行时环境,是镜像的运行状态,是镜像执行的动态表现。是独立运行的一个或一组应用,Docker容器通过Docker镜像创建,容器可以被创建、启动、停止、删除、暂停等
仓库
仓库是用来保存镜像的,可以理解为代码控制中的代码仓库
过程(关系):
镜像存在仓库里
先把镜像从仓库pull拉到Linux系统上,然后创建容器,运行容器
4.Docker操作
准备:一台测试机,一台服务器
(1)静态IP设置
进入ip配置文件设置
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改静态ip
BOOTPROTO=static
IPADDR=192.168.32.129(自己的ipconfig)
NETMASK=255.255.255.0
GATEWAY=192.168.32.2
DNS1=8.8.8.8
重启网卡服务
systemctl restart network
使用xshell工具连接
(2)docker进程相关操作
docker卸载和安装
# 卸载旧版本
sudo yum remove docker
# 设置docker仓库
sudo yum install -y yum-utils
# 设置稳定的仓库-阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker engine-community
sudo yum install docker-ce docker-ce-cli contained.io
# 启动docker
sudo systemctl start docker
# 查看是否有docker环境
docker -v
# 查看docker命令
docker --help
# 查看docker 服务端与客户端版本详情
docker version
# 启动docker进程
systemctl start docker
#关闭docker
systemctl stop docker
#重启docker
systemctl restart docker
#开机自启
systemctl enable docker
# 查看docker运行状态
systemctl status docker
# 关闭防火墙
systemctl stop firewalld
#永久关闭防火墙
systemctl stop firewalld disable
镜像操作
需求:使用docker搭建一个tomcat\mysql\redis
操作流程:
- 获取对应镜像
docker pull tomcat
可以使用官方的仓库地址或自己的镜像仓库 - 使用镜像创建容器
- 运行容器
实际操作
# 查看本地镜像
docker images
# 搜索镜像-首先本地-默认地址,用STARS星级最高的版本
docker search tomcat
# 找到所有镜像,进行拉取
docker pull tomcat#最新版本
docker pull tomcat:7#指定版本7
# 不想要镜像,需要删除
docker rmi 镜像id
# 有镜像,可以创建容器---名称和id均是唯一的
#根据tomcat镜像,创建一个myTomcat的容器
docker create --name=myTomcat tomcat #仅创建,还不能运行
# 查看已经运行的容器
docker ps
# 查看所有容器
docker ps -a
# 容器很多,需要筛选指定容器--名称含tomcat的容器
docker ps |grep tomcat
# 运行容器(运行状态为up)--通过名称或CONTAINER ID
docker start myTomcat
#停止容器--通过名称或CONTAINER ID
docker stop myTomcat
# 删除没有运行的容器(需要先停止容器)
docker rm 容器id或名称
# 删除在运行的容器
docker rm -f 容器id或名字
#删除所有容器
#先停止所有容器
docker stop $(docker ps -a -q)
#删除(慎用)
docker rm $(docker ps -a -q)
#删除所有镜像(慎用)
docker rmi $(docker images -q )
#查看容器详情信息
docker inspect --format '{{ .NetworkSettings .IPAddress}}' <container-ID>
例如:查挂载目录
docker inspect -f '{{.Mounts}}' tomcat01
下载太慢,可以使用docker下载加速器
docker加速
- 在指定目录创建文件
vim /etc/docker/daemon.json
- 修改文件内容为
从阿里云控制台复制的,每个用户不一样
{
"registry-mirrors":["https://v2c6fjn8.mirror.aliyuns.com"]
}
- 重启docker服务
systemctl restart docker
运行容器的一些操作
需要搭建一个web项目–tomcat
(1)访问端口 需要访问的是容器内部的端口
(2)war项目文件传给容器里的tomcat里的webapps下
# 查看docker run 命令--创建并且启动容器docker run --help1.判断本地是否有这个镜像,如果没有先自动pull2.然后创建容器3.然后运行容器docker run 参数
-i #运行容器
-t #容器启动后,进入命令行
-v #目录映射-挂载 -v 宿主机目录:容器的目录(没有会自动新建目录)
-d #守护进程-后台运行
-p #端口映射 -p 宿主机的端口:容器的端口
#如果容器里有tomcat,本机windows想访问
#docker tomcat 端口号是8080,需要在虚拟机映射一个端口9099
#windows才可以访问 http://虚拟机ip:9099#组合使用-创建一个运行守护的容器
docker run -id --name=tomcat01 -p 7070:8080 -v /usr/local/zm:/usr/local/tomcat/webapps tomcat
#退出
exit
#进入容器
docker exec -it tomcat01 /bin/bash
#启动时关联其他容器--link mysql独立容器
docker run -di --name=tomcat02 -p 8080:8080 --link mysql --link redis --link rabbitmq
关于目录映射挂载的解释:
本地pc不能直接访问容器里的目录(或上传文件),但可以在宿主机和容器之间进行目录的映射,这样pc就可以通过访问宿主机的目录,去操作容器里的目录了
docker logs命令–查看容器日志
docker logs
-details 显示提供给日志的额外细节
-f 按日志输出
-since 从某个时间开始
-tail 从日志末尾多少行开始显示
-t 显示时间戳
-until 打印每一个时间以前的日志
# 查看指定时间后的日志 只显示最后100行
docker logs -f -t --since="2020-02-09" --tail=100 容器id
# 查看最近30分钟的日志
docker logs --since 30m 容器id
#查看某时间之后的日志
docker logs -t --since="2018-09-02T13:14:20" 容器id
#查看某个时间段的日志
docker logs --since="2024-05-10T23:00:00" --until "2024-05-11T23:00:00" 容器id
5.web管理平台Portainer
不熟悉指令时,可以通过web ui页面可视化管理平台
#查看portainer镜像
docker search portainer
#选择喜欢的风格,下载
docker pull portainer/portainer
#启动dockerui容器--自启动
docker run -id --name portainerUI -p 9000:9000 -v var/run/docker.sock:/var/run/docker.sock --restart=always portainer/portainer
浏览器访问http://虚拟机ip:9000,设置密码8位以上