Docker
由于docker不需要虚拟机实现硬件资源虚拟化,运行docker容器上的程序直接使用的是实际的物理机的硬件资源。因此在cpu、内存利用率上有明显的优势。
docker并非通用容器工具,它依赖于已存在并运行的linux内核环境。
镜像:镜像是创建Docker容器的基础,Docker镜像类似于虚拟机镜像,可以把Docker镜像理解成一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变(只读)
容器:Docker容器(Container)类似于一个轻量级的沙箱子(因为Docker是基于Linux内核的虚拟技术,所以消耗资源十分少),可以把每个容器看作一个简易版的Linux系统环境(包括了root用户权限、进程空间、用户空间和网络空间),以及与运行在其中的应用程序打包而成的应用盒子。Docker利用容器来运行和隔离应用。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
仓库:Docker仓库(Repository)类似于代码仓库,是Docker集中存放镜像文件的场所。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放Ubuntu操作系统镜像的仓库,称为Ubuntu仓库,其中可能包括14.04,12.04等不同版本的镜像。但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。理解这个关系就是:一个Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
安装gcc
- yum -y install gcc
- yum -y install gcc-c++
卸载docker
- systemctl stop docker
- yum remove docker-ce-cli containerd.io
- rm -rf /var/lib/docker
- rm -rf var/lib/containerd
指令
- 启动容器:docker restart
- 进入redis:docker exec -it redis redis-cli
- 开机重启:docker update mysql --restart=always
- 启动docker:systemctl start docker
- 启动nacos:startup.cmd -m standalone
- 进入到docker指定容器:docker exec -it /bin/bash
- 压力测试工具:jconsole、jvisualvm
- 查看centos版本:cat /etc/redhat-release
- 查看linux内核版本:uname -r
- 查看docker版本:docker version
- 查看文件系统容量:df -h
- 进入redis:redis-cli -p 6379
- 主机端口(外部端口):docker容器端口: -p小写
- 随机分配端口:-P大写
- 交互:i
- 终端:t
- 后台:d
- 解压文件:tar -jxvf xxx.tar.bz2、tar -zxvf xxx.tar.gz、unzip xxx.zip
- 防火墙重载规则:firewall-cmd --reload
- 查看已配置的规则:firewall-cmd --list-all
- 指定端口和ip访问:firewall-cmd --permanent --add-rich-rule="rule family=“ipv4” source address=“192.168.44.101” port protocol="tcp "port=“8080 accept”
- 移除规则:firewall-cmd --permanent --remove-rich-rule=“rule family=“ipv4” source address=“192.168.44.101” port port=”8080” protocol=“tcp” accpet”
- 将主机中的文件或安装转移到docker容器中:docker cp 主机的绝对路径 容器名字或容器ID:/安装路径
docker帮助启动类命令
- 启动docker:systemctl start docker
- 停止docker:systemctl stop docker
- 重启docker:systemctl restart docker
- 查看docker状态:systemctl status docker
- 开机启动docker:systemctl enable docker
- 查看docker概要信息:docker info
- 查看docker总体帮助文档:docker --help
- 查看docker命令帮助文档;docker 具体命令 --help
docker镜像命令
问题:docker的虚悬镜像就是仓库名和标签都为none的镜像(需要删除)
- docker images 列出本地主机上的镜像 (-a:列出本地所有镜像,包含历史印像层;-q:只显示镜像ID)
- docker search 某个镜像的名字 (例如 docker search --limit 5 redis)
- docker pull 某个镜像名字 (例如 docker pull redis:6.0.8)
- docker system df 查看镜像/容器/数据卷所占的空间
- docker rmi 某个xxx镜像的名字或id(删除镜像,docker rmi -f 镜像id,-f为强制删除;docekr rmi -f ${docker images -qa}删除全部镜像)
docker容器命令(有镜像才能创建容器)
- docker run 容器ID或者镜像名字(例如:docker run -it ubuntu /bin/bash;docker run -it --name=myu1 ubuntu bash,分配名字)
- docer ps -a (列出所有运行过的容器实例)
- exit 退出docker
- docker rm 容器ID或容器名 (删除已停止容器)
- docker rm -f 容器ID或容器名 (强制删除容器)
- docker start 容器ID或容器名
- docker restart 容器ID或容器名
- docker stop 容器ID或容器名
- docker kill 容器ID或容器名(强制停止容器)
- docker run -d centos 后台模式启动容器 (不存在容器时使用)
- docker run -it redis:6.0.8 后台模式启动 (不存在容器时使用)
- docker exec -d centos /bin/bash (容器存在时使用)
- dockers cp 容器ID 容器路径 虚拟机路径 (docekr cp fb296cb71fec /tmp/a.txt /zzxxpp)
- docker export 容器ID > a.tar (将整个容器打包)
- cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号 (将容器打包放到本地镜像)
docker的commit命令
- apt-get update 、apt-get -y install vim(在容器中新增vim)
- docker commit -m=“修改描述例如:vim cmd add ok” -a=“作者例如zzyy” 容器ID 镜像名字(提交容器实例到本地镜像)
- docker pull registry(拉取私有库)
docker本地仓库
- docker run -d -p 5000:5000 -v/zzyyuse/myregistry/:/tmp/registry --privileged=true registry(运行本地仓库)
- apt-get update、apt-get install net-tools (在容器新增ifconfig等命令)
- curl -XGET http://172.30.28.12:5000/v2/_catalog (查询本地仓库)
- docker tag ubuntu 172.30.28.12:5000/fzqubuntu (更换镜像名字)
- “insecure-registries”: [“172.30.28.3:5000”] (docker默认不允许以http的方式推送镜像,通过配置来取消这个限制,修改完后重启docker)
容器数据卷(数据保存在宿主机的磁盘中)
卷就是目录或文件,存在一个或多个容器中,有docker挂载到容器,但不属于联合文件系统,因此能够绕开union file system提供一些数据存储和共享数据的特性。卷的设计目的就是数据持久化,它完全独立于容器的生命周期,因此docker不会在删除容器时删除其挂载的数据卷。
- docker run -it --privileged=true -v/宿主机绝对路径目录:/容器内目录:(ro只读,rw读写) --name 镜像名 镜像id
- docker inspect 容器id
- docker run -it --privileged=true --volumes from u1 --name u2 ubuntu (u2继承u1)
docker安装tomcat
- docker search tomcat (查找tomcat)
- docker pull tomcat:版本号 (拉取tomcat)
- docker run -d -p 8080:8080 --name t1 tomcat (运行tomcat,并分配指定端口和设置名字)
- docker exec -it 容器id /bin/bash (进入已启动的容器内部)
- docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8 (安装版本8的tomcat)
docker安装mysql
1.解决中文乱码问题 2.备份数据
- docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7(运行mysql)
- docker exec -it 容器id /bin/bash
- mysql -uroot -p (输入密码进入mysql)
- docker run -d -p 3306:3306 --privileged=true
-v /zzyyuse/mysql/log:/var/log/mysql
-v /zzyyuse/mysql/data:var/lib/mysql
-v /zzyyuse/mysql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456
–name msyql
mysql 5.7 (设置数据卷)
docker安装redis
- docker exec -it redis /bin/bash;redis-cli (进入redis)
- docker run -p 6379:6379 --name mystr3 --privileged=true
-v /app/redis/redis.conf:/etc/redis/redis.conf
-v/app/redis/data:/data
-d redis:6.0.8 redis-server /etc/redis/redis.conf