docker初识
1.基础简介
1.1 docker是什么?
docker项目的目标是实现轻量级的操作系统的虚拟化解决方案。docker的基础是Linux容器(LXC)技术。
对比传统虚拟机总结:
1.2 docker的安装和卸载命令
centos6安装
–配置yum源
sudo yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
sudo yum install docker-io
centos7安装
方式一:yum install –y docker(默认安装)
方式二:docker-ce安装(最新版安装)
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install docker-ce
查看docker版本/信息
docker version/info
注:docker启动和未启动 docker version信息不一样
查看与docker相关的
yum list installed | grep docker “|”管道符号 前一个命令的输出作为后一个命令的输入
卸载docker
yum remove -y docker.x86_64 docker-client.x86_64 docker-common.x86_64
启动docker
sudo service docker start/restart
sudo chkconfig docker on ##开机自启
关闭docker
sudo service docker stop
1.3 docker仓库命令
查询仓库里面的镜像
docker search redis (带有 official的为官方正版)
Ps:vi /usr/lib/systemd/system/docker.service
从仓库拉镜像到本地(不指定ip端口,默认官方网址)
docker pull docker.io/hello-word:latest
docker拉取慢的问题:1.为docker配置代理,Environment=“HTTP_PROXY=http://172.16.42.124:808”
2.仍然有可能超时,为docker配国内加速器或者直接拉取国内镜像。
从指定仓库拉取镜像
docker pull ip:port/peter2enjoy/hello:1.0
注:peter2enjoy是https://hub.docker.com中的唯一仓库 1.0为版本号
标记本地镜像,将其归入某一仓库(tag==生成副本+取个别名)
docker tag hello-word peter2enjoy/hello:100.0
docker login
Username:perter2enjoy
Password:enjoy123
docker push peter2enjoy/hello:100.0
私有docker仓库的搭建
docker pull registry
docker run -d -p 5000:5000 --name reg registry ##创建私有仓库
curl http://主机ip:5000/v2/_catalog ##查看私有仓库镜像
http://主机ip:5000/v2/hello/tags/list ##查看私有仓库镜像版本,hello为镜像名字
docker tag hello-world 宿主机ip:5000/hello:1.0
docker push 宿主机ip:5000/hello:1.0 ###需修改配置文件https://www.cnblogs.com/hobinly/p/6110624.html
1.4 docker镜像命令
查看镜像
docker images
删除镜像
docker rmi 镜像id(有容器使用此镜像则无法删除,先删容器再删镜像)
查看镜像层
docker history 镜像名
(docker info 查看docker root dir: /var/lib/docker)
镜像文件列表(一个镜像文件是由一个或多个镜像层组成)
cd /var/lib/docker/image/overlay2/imagedb/content/sha256
打开镜像的配置内容
cat 9f38484d220fa527b1fb19747638497179500a1bed8bf0498eb788229229e6e1 前12位是镜像ID
其中history显示镜像层 rootfs:diff_ids:sha256:后面显示的实际的镜像层文件id
镜像层文件列表
cd /var/lib/docker/image/overlay2/layerdb/sha256
镜像层文件结构
ll d69483a6face4499acb974449d1303591fcbb5cdce5420f36f8a6607bda11854
镜像总结:镜像的本质就是一个文件夹
1.5 docker容器命令
创建启动容器并进入内部
docker run -dit --name cent centos:latest /bin/bash
-d:后台运行并返回容器id,不进入容器 -it:保证容器不退出,交互shell进程
-p 8081:8080 ##宿主机端口:容器端口
–privileged=true -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2
注:如果你同步的是多级目录,可能会出现权限不足的提示,Centos7中的安全模块selinux把权限禁掉了,我们需要添加 --privileged=true 来解决挂载的目录没有权限的问题。
退出容器且不关闭容器
ctrl+q+p
进入运行的容器
docker exec -it cent /bin/bash
查看docker所有容器
docker ps -a
在容器外部关闭容器(优雅的关闭:发出信号等待10s)/立刻停止容器
docker stop cent/docker kill cent
删除容器
docker rm cent
启动容器
docker start cent
查看容器信息
docker inspect cent/容器id
查看容器日志 #在宿主机上查看容器生成的日志
docker logs 容器名
复制主机文件到容器内
docker cp 文件 cent:容器路径
2.dockerfile
dockerfile是一个文本格式的配置文件,用户可以使用dockerfile快速创建自定义镜像。
2.1 dockerfile的基本要素
2.2 dockerfile常用指令
FROM:第一条指令必须为FROM指令,用于指定基础镜像。
MAINTAINER:指定维护者信息。
RUN:会在shell终端上执行命令。一个RUN相当于加了一个镜像层。
EXPOSE:格式为[…],声明容器需要暴露的端口号。镜像启动可以通过-p或者-P进行端口映射的绑定。
ENV:指定一个环境变量,可以被后续的RUN引用,并在容器中记录该环境变量。
ADD:该命令复制指定的文件到容器中,其中可以是dockerfile所在目录相对路径,也可以是tar文件(自动解压)。
VOLUME:格式为VOLUME[path],挂载。
USER:指定运行容器时的用户名,后续的RUN也会指定该用户。
WORKDIR:指定工作空间,切换目录。
CMD ENTRYPOINT。
CMD:给出的是一个容器的默认的可执行体
entrypoint:才是正统地用于定义容器启动以后的执行体的