太久没有更新文章了,学习或者整理了东西以后一直都存在本地,今天抽时间写了一点,常见操作的下半部分,改天上传
引子
为什么会有 docker
当前痛点
产品从开发到上线过程中需要经历多次部署,环境配置。尤其是每次不同版本之间的环境兼容性对团队来说都需要付出一定的时间经历解决,很容易出现在这台机器上能正常运行,但是部署上线以后运行出问题的情况。例如依赖没有解决,例如环境配置遗漏等。
docker 理念
"Build,Ship and Run Any App, Anywhere",可以理解为“一次封装,到处运行”
docker 与 虚拟机的区别
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。
-
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
-
而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
-
每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源
docker 资料
docker 安装
要求
目前,CentOS 仅发行版本中的内核支持 Docker。
-
Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
-
Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。
安装步骤
安装可以参考官网链接:官网 docker 安装教程
-
官网没有指明需要需要 gcc,但是建议事先安装 gcc,命令如下:
yum -y install gcc yum -y install gcc-c++
-
安装依赖的包,命令如下:
sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
-
设置仓库,其中官网的命令为:
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
但是由于镜像服务器的原因,可以直接改为国内阿里云镜像:
sudo yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
安装 yum 软件包索引(官网不包括这步)
yum makecache fast
-
安装 docker-ce
yum -y install docker-ce
-
启动 docker
systemctl start docker
-
验证安装:
sudo docker run hello-world
-
配置镜像加速:
mkdir -p /etc/docker vim /etc/docker/daemon.json
增加国内加速镜像,例如网易云{"registry-mirrors": ["http://hub-mirror.c.163.com"] } 或者阿里云
重载重启:
systemctl daemon-reload systemctl restart docker
docker 常用命令
基础命令
docker version
docker info
docker --help
镜像命令
查看
docker images
image-20200303154644888.png
其中:
-
REPOSITORY:表示镜像的仓库源
-
TAG:镜像的标签(默认的版本标签为 latest,拉镜像时可以指定 TAG)
-
IMAGE ID:镜像ID
-
CREATED:镜像创建时间
-
SIZE:镜像大小
命令的选项有:
- -a:列出本地所有的镜像
- -q:只显示镜像 ID
- --digests:显示镜像的摘要信息
- --no-trunc:显示完整的镜像信息
其中最常用的为 docker images -qa
搜索
docker search [镜像名]
image-20200303155332052.png
常见的命令选项有:
- --no-trunc:显示完整的镜像描述
- -s:列出星星数不小于指定值的镜像
- --automated:列出所有自动构建的镜像
下载镜像
docker pull [镜像名]
pull 命令类似 git 拉取代码,用于下载镜像,镜像名后可以跟 TAG 用于指定版本 docker pull 镜像名:TAG
,在 docker 中不加 TAG 默认为 latest
删除镜像文件
docker rmi 镜像名ID
可以跟镜像 ID 也可以跟镜像名。可以使用 -f 强制删除,如果需要删除所有镜像可以使用 docker rmi -f $(docker images -qa)
如果删除时提示冲突,可以先删掉记录docker ps -a -q | xargs docker rm
或者 docker rm -f $(docker ps -a -q)
然后再删除即可
容器命令
下载镜像
docker pull centos
新建并运行容器
docker run [OPTIONS] image [COMMAND] [ARG]
常用的选项有:
- --name:给容器指定名字,不指定的话会自动给定一个名字
- -d:后台运行容器,返回容器 ID
- -i 与 -t:-i 表示以交互式方式运行容器,-t 表示为容器分配一个伪终端,通常两者一起使用
- -P:随机端口映射
- -p:指定端口映射关系
- --rm:对于foreground容器,由于其只是在开发调试过程中短期运行,其用户数据并无保留的必要,使用该选项,这样在容器退出时就能够自动清理容器内部的文件系统,但是不能和 -d 同时使用
运行方式:
-
交互式容器
docker run -it centos /bin/bash
表示:使用镜像 centos:latest 以交互模式启动一个容器,在容器内执行/bin/bash命令。
-
守护式容器
docker run -d centos
运行以后在进程中看不到对应的容器。因为 Docker 容器后台运行,就必须有一个前台进程。容器运行的命令如果不是那些一直挂起的命令,就会自动退出。
查看正在运行的容器
docker ps [OPTIONS]
常见的选项有
- -a:列出当前所有正在运行的容器+历史上运行过的
- -l:显示最近创建的容器
- -n:显示最近n个创建的容器
- -q:静默模式,只显示容器编号
- --no-trunc:不截断输出
退出容器
-
停止退出
在容器的交互式终端输入
exit
回车或者使用 "ctrl+D" 即可停止容器并退出 -
容器不停止退出
即容器仍然在后台运行,但是推出交互式终端,使用 "ctrl+P+Q" 即可
启动容器
docker start 容器ID或者容器名
重启容器
docker restart 容器ID或者容器名
停止容器
-
正常停止
docker stop 容器ID或者容器名
-
强制停止
docker kill 容器ID或者容器名
删除已经停止的容器
docker rm 容器ID
如果需要一次性删除多个容器,可以使用:
docker rm -f $(docker ps -a -q)
或者
docker ps -a -q | xargs docker rm
查看日志
docker logs 容器 ID
通常添加如下选项:
- -t:加入时间戳
- -f:跟随最新的日志打印
- --tail 数字:显示最后多少条
查看容器内部
-
查看容器内部进程
docker top 容器ID
-
查看容器内部细节
docker inspect 容器ID
进入正在运行的容器
-
exec 进入
docker exec -it 容器ID /bin/bash
在容器中打开新的终端,并且可以启动新的进程
-
attach 进入
docker attach 容器ID
直接进入容器启动命令的终端,不会启动新的进程
拷贝
-
从容器拷贝到宿主机上:
docker cp 容器ID:容器内路径 目标的宿主机目录
-
从宿主机拷贝到容器:
docker cp 宿主机的目录 容器ID:容器内路径
不管容器是否启动,拷贝都会生效
常用命令-1583396362212.png
网友评论