目录
一. 安装Docker
二. hello-world项目的运行流程和docker运行原理
三. docker的常用命令(查看官方文档)
四. 日志,元数据,进程的查看
五. 进入当前正在运行的容器
docker 官方文档:https://docs.docker.com/
docker 仓库:https://hub.docker.com/
docker的核心思想:使用镜像进行隔离,使得两部分之间不受影响,类似于一个沙箱;,Docker属于容器化技术,不是模拟一个完成的系统,模拟系统最核心的部分,所以不像虚拟机一样笨重,比较轻量级。
一. 安装Docker
下面是基于Centos 7 使用仓库安装的方式,根据官方文档的提示一步步地安装即可:
1. 如果之前安装了docker版本需要卸载掉之前的版本,使用:
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. 在安装docker之前需要设置docker的镜像,之后就可以使用这个仓库来安装和更新docker,这里可以设置为阿里云的docker仓库这样下载速度比较快:
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新软件包索引确保安装的环境是最新的:
yum makecache fast
安装docker,docker-ce表示社区版,docker-ee表示企业版,使用:
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
4. 启动docker,运行下面的命令,但是运行之后如果没有出现任何信息说明启动的时候应该没有异常:
systemctl start docker
如果哪一个过程出现错误,还是重新卸掉再安装否则docker中的哪一部分没有安装成功是无法成功启动的;
5. 使用docker version判断启动docker启动的情况:
docker version
6. 使用hello-world 测试,在执行run命令的时候发现现实没有找到hello-world项目,所以从远程仓库中拉取,拉去成功之后输出签名信息,最终输出Hello from Docker!说明成功安装了docker并且运行hello-world项目成功:
docker run hello-world
7. 卸载docker,/var/lib/docker 为docker的工作目录:
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
下面是成功安装docker过程截图,docker安装的时候最麻烦是依赖关系的问题,之前不知道哪里搞错了导致安装了很久都无法启动docker,最后重新安装了centos 7按照上面的步骤才安装成功:
二. hello-world项目的运行流程和docker运行原理
底层原理:docker是如何工作的呢?docker是一个Client-Server结构的系统,docker的守护进程运行在主机上,通过socker从客户端进行访问,DockerServer接收到Docker-Client的指令,就会执行这个指令;
docker为什么比虚拟机快?1. docker有着比虚拟机更少的抽象层; 2. docker使用的是宿主机的内核,虚拟机需要的Guest OS,所以docker新建一个容器的时候不需要像虚拟机一样加载一个操作系统内核,避免引导性的操作,而docker利用宿主机的操作系统,省略了这个复杂的过程
三. docker的常用命令(查看官方文档)
docker命令主要围绕镜像和容器两个核心进行
1. 帮助命令
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息
dock 命令 --help # 帮助命令
帮助文档地址:https://docs.docker.com/reference/
2. 镜像命令
docker images # 查看所有的镜像
docker images --help # 查看当前命令的具体用法
docker images -q # 只显示镜像的id
docker search 镜像名字 # 搜索镜像
docker search mysql --filter=STARS=4000(使用--filter按照条件过滤)
docker pull 为下载镜像的命令,例如docker pull mysql 表示下载mysql镜像(默认下载最新版的镜像),很多时候我们需要指定下载的版本:docker pull mysql:5.7
删除镜像:docker rmi -f 镜像id(一般通过镜像id删除)
删除多个镜像:docker rmi -f 镜像id 镜像id 镜像id...
删除全部镜像:docker rmi -f $(docker images -aq), docker images -aq查询所有的镜像id,找到之后全部删除:
3. 容器命令
说明:有了镜像才可以创建容器,我们可以下载一个centos进行测试:
docker pull centos
新建容器并启动:
docker run [可选参数] iamge
参数说明:
--name="Name" 容器名字, 用来区分容器
-d 后台方式运行
-it 使用交互方式运行
-p 指定容器的端口 有四种使用方式:
1. -p ip:主机端口:容器端口
2. -p 主机端口:容器端口 这种方式比较常用
3. -p 容器端口
4. 容器端口
-P 随机指定端口
启动并进入容器:-it表示交互,交互的时候需要一个控制台,linux 控制台一般在bin目录,linux一般是bash或者sh命令:我们使用run命令启动了centos,
docker run -it centos /bin/bash
使用ls命令查看可以发现其实容器里面与容器外面的文件是一样的,容器本身就是一个小型的服务器(容器内就是一个服务器环境):
从容器中退回到主机:exit命令
列出正在运行的容器使用命令:docker ps;列出正在运行的容器 + 历史运行过的容器:docker ps -a;显示最近创建过的容器:docker ps -n=? ;只显示容器的编号:docker ps -q
退出容器:① exit 容器直接停止并且退出;② Ctrl + P + Q:容器不停止退出
删除容器:① 删除所有的容器:docker rm -f $(docker ps -aq); ② 通过容器id删除某个容器:docker rm 容器id;③ 删除所有的容器:docker ps -a -q | xargs docker rm;注意运行的容器是不可以删除的:
启动和停止容器的命令:
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止正在运行的容器
docker kill 容器id # 强制停止当前容器
四. 日志,元数据,进程的查看
后台通过镜像启动容器:docker run -d 镜像名,例如:docker run -d centos ,使用docker ps -a 命令发现centos停止了,常见的坑:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用就会自动停止,比如使用docker 安装nginx,启动容器后发现自己没有提供服务就会立刻停止,就是没有程序了:
查看日志:
docker logs -f -t --tail n 容器id
自己编写一段shell脚本,不断启动在后台启动centos并输出xiaoming,然后使用上面的命令打印10条日志信息,-tf表示输出日志并且带有响应的时间戳,--tail 后面需要加上显示的日志条数:
docker run -d centos /bin/sh -c "while true;do echo xiaoming;sleep 1;done"
docker logs -tf --tail n 容器id
查看容器中的进程信息:top命令
docker top 容器id
查看容器的元数据: inspect 命令
docker inspect 容器id
五. 进入当前正在运行的容器
通常容器都是使用后台方式运行的,有的时候我们需要进入容器修改一些配置,如何进入容器呢?
docker exec -it 容器id /bin/bash
docker attach 容器id
docker exec 与 docker attach 命令区别:
docker exec命令进入容器后开启一个新的终端,可以在里面操作,这个命令会比较常用,docker attach命令进入容器正在执行的终端,不会启动新的进程;
从容器内拷贝文件到主机上
先进入容器新建test.txt,然后拷贝到Centos 7的home目录:
docker cp 容器id:容器路径 主机路径