Docker - 容器虚拟化技术,解决了运行环境和配置问题的软件容器。
环境配置相当麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。
一次镜像,处处运行。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
Docker 运行在CentOS 7 (64-bit)上,要求系统为64位、Linux系统内核版本为 3.8以上。
参考:https://blog.csdn.net/m0_63099094/article/details/121178929
systemctl status docker 查看docker 服务状态 or ps -ef | grep docker
systemctl start docker 启动 docker
docker version / docker -v 查看版本
测试是否成功 docker run hello-world (本地没有这个景象,是从仓库拉取的)
1.2 Docker 基本组成
镜像、容器、仓库。
先从本地拉镜像,本地没有,从仓库找。
1.2.1 镜像
Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
它也相当于是一个root文件系统。比如官方镜像 centos:7 就包含了完整的一套 centos:7 最小系统的 root 文件系统。
相当于容器的“源代码”,docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。
1.2.2 容器
1 从面向对象角度
Docker 利用容器(Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台
2 从镜像容器角度
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
1.2.3 仓库
仓库(Repository)是集中存放镜像文件的场所。
类似于
Maven仓库,存放各种jar包的地方;
github仓库,存放各种git项目的地方;
Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云、网易云等。
systemctl status docker or ps -ef | grep docker | 查看docker 服务状态 |
---|---|
systemctl start docker | 启动 docker |
docker version | 查看版本 |
docker run hello-world | 启动 hello-world 镜像 |
镜像命令 | |
docker images | 列出本地主机上的镜像 |
docker search 某个XXX镜像名字 | 查找镜像(在 docker hub上) |
docker search --limit 5 redis | 查找点赞数前5 的redis 镜像 |
docker pull 某个XXX镜像名字 | 拉取镜像(从 docker hub 上) |
docker pull redis:6.0.8 | 拉取 redis 6.0.8 版本的镜像 |
docker system df | 查看镜像/容器/数据卷所占的空间 |
docker rmi 某个XXX镜像名字ID | 删除镜像 |
docker rmi feb5d9fea6a5 | 删除 hello-world 镜像 |
docker rmi -f feb5d9fea6a5 | 强制删除镜像,当镜像在使用时候会删除不了 |
docker rmi -f ${docker images -qa} | 删除全部, docker images -qa 是查处所有的镜像id |
docker image ls -f dangling=true | 查看所有的虚悬镜像 |
docker image prune | 删词所有的虚悬镜像 docker rmi -f 就行 |
容器命令 | |
docker run -it ubuntu /bin/bash | 启动容器(前台交互式启动) |
docker run -it --name=myu1 ubuntu bash | 启动 ubuntu 容器,并且重名为 myu1 |
exit | run -it 进去,退出容器容器停止。 |
Ctrl + P + Q | run -it 进去,退出容器容器不停止 |
docker run -d redis:6.0.8 | 启动容器(后台守护式启动) |
docker logs 容器ID | 查看容器日志 |
docker exec -it 容器ID /bin/bash | 进入容器,exit 退出,不会停止。 |
docker ps | 查看所有正在运行的容器 |
docker ps -a | 查看所有正在运行的+ 历史运行的容器 |
docker ps -l | 查看最近创建的容器(正在运行+ 历史运行) |
docker ps -n 2 | 查看最近2个创建的容器(正在运行+ 历史运行) |
docker ps -q | 查看所有正在运行的容器 id。 |
docker start 容器ID 或容器名 | 启动已停止运行的容器(docker ps -n 10 查看容器ID) |
docker restart容器ID 或容器名 | 重启容器 |
docker stop容器ID 或容器名 | 停止容器 |
docker kill容器ID 或容器名 | 强制停止容器 |
docker rm 容器ID | 删除容器(正在运行的无法删除,需stop后才可以) |
docker rm -f 容器ID | 强制删除容器 |
docker rm -f $(docker ps -a -q) | 强制删除所有容器 |
docker top 容器ID | 查看容器内运行的进程,进程号、端口号等。 |
docker inspect 容器ID | 查看容器内部细节 |
docker cp 容器ID:容器内路径目的主机路径 | 从容器内拷贝文件到主机上 |
docker export 927e21b06561 > /root/exportUbutun.tar | 导出容器到主机上。 |
cat exportUbutun.tar | docker import - cg/ubuntu:1.0 | 导入导出的容器cg 随便写,1.0 版本号随便写 |
docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名] | docker commit -m=“vim cmd add ok” -a=“cg” 927e21b06561 cg/myubuntu:1.1 |
容器卷命令 | |
docker inspect 803b5d9531c0 | 查看容器挂载 |
网络命令 | |
docker network ls | 查看 docker 网络列表 |
docker network create test_network | 创建网络 |
docker network inspect test_network | 查看网络源数据 |
docker network rm test_network | 删除网络 |
docker inspect 容器名 | tail -n 20 | 查看容器网络 |
docker-compose | |
docker-compose --version | 查看 docker-compose 版本 |
docker run -it ubuntu /bin/bash
i:interactive,t:tyy(伪终端)
进入了 ubuntu 系统,并且以终端形式打开的。
ps -ef 可以看到 ubuntu 系统的/bin/bash 已运行。
docker ps 查看所有正在运行的容器
可以看到IMAGE ubuntu 镜像正在运行,CONTAINER ID 容器ID,和上面 root@778248e34084 是一样的。
docker run -it --name=myu1 ubuntu bash,又启动了一个容器,这次NAMES 为 myu1,前面返回了容器ID 就是正常启动了。新开一个终端查看 docker ps。
进入了 ubuntu 命令行模式后,输入exit 即可退出,或者关闭 xshell选项卡也可以退出,容器停止。
Ctrl + P + Q退出容器不停止。
上面 run -it 都是前台交互式启动, 后台守护式启动 run -d,比如 redis。
docker exec -it acb16932c06b /bin/bash 进入容器。 一般用 -d 后台启动,然后 exec 进入对应容器实例。
docker export 927e21b06561 > /root/exportUbutun.tar 导出容器到主机上
cat exportUbutun.tar | docker import - cg/ubuntu:1.0 导入导出的容器,进入到这个容器 a.txt 还在。
docker commit 提交容器副本使之成为一个新的镜像
docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
docker commit -m=“vim cmd add ok” -a=“cg” 927e21b06561 cg/myubuntu:1.1