---------------------------------------------------
Docker
docker三要素
- 镜像 image 是一个只读模板
- 容器 container 一个镜像产生多个容器
- 仓库 repository
安装docker
centos 6:
yum install -y epel-release
yum install -y docker-io
配置文件 /etc/sysconfig/docker
other_args
service docker restart 启动docker
docker version 验证docker
-- centos 7:
Get Docker CE for CentOS
-- 使用存储库安装
[一] 卸载旧版本 docker
1 .sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
[二] 在新主机上首次安装Docker CE之前,需要设置Docker存储库 好处:自动匹配系统对应的版本
1. 安装所需的包
-- yum install -y yum-utils device-mapper-persistent-data lvm2
2. 设置稳定存储库
-- sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3. 要启用测试通道
-- yum-config-manager --enable docker-ce-test
4. 安装最新版本的Docker CE和containerd
-- yum install docker-ce docker-ce-cli containerd
5. systemctl start docker 启动docker
-- centos 7 :systemctl
-- centos 6 :service
6. 检验 docker run hello-world ps -ef | grep docker
-- 使用包安装
转到 Index of linux/centos/7/x86_64/stable/Packages/ 并下载.rpm要安装的Docker版本的文件。
注意:要安装每晚 或测试(预发布)包,stable请将上述URL中的单词更改为nightly或test。 了解夜间和测试频道。
1. 安装Docker CE,将下面的路径更改为您下载Docker软件包的路径。
sudo yum install /path/to/package.rpm
2. 启动 docker
sudo systemctl start docker
3. 通过运行hello-world 映像验证是否正确安装了Docker CE
sudo docker run hello-world
[问题]
启动docker失败:
1. 查看启动日志
journalctl -u docker
or : baidu google
阿里云镜像加速配置 容器镜像服务 :
-- https://6ind3ec9.mirror.aliyuncs.com 从阿里云查询
[centos 6]
-- /etc/sysconfig/docker
other_args = "https://6ind3ec9.mirror.aliyuncs.com" 保存并重启
[centos 7]
-- vim /etc/docker/daemon.json
-- {
"registry-mirrors": ["https://6ind3ec9.mirror.aliyuncs.com"]
}
-- sudo systemctl daemon-reload
-- sudo systemctl restart docker
底层结构:
容器虚拟化技术 和 虚拟机
面向软件开发 面向硬件
部署速度 秒级 分钟级
存储小 存储庞大
DOCKER 常用命令
-- 帮助命令
docker version
docker info
docker -H --help
-- 镜像命令
docker images 列出本地镜像
-a all
-q 显示镜像ID
docker search
-s START 字段 -s 30
docker pull ***
docker rmi *** 删除镜像 -f 强制删除 删除镜像之前先删除引用的容器
docker rmi-f ** ** ** 删除多个 有i是image ,没i是容器
docker rmi -f $(docker images -qa ) 批量删除
-- 容器命令
创建并启动容器
docker run [options] image [command][ARG....]
docker run -it image_id 进入docker并伪终端交互
关闭容器
exit
退出但是不关闭 重新进入 不进容器 执行容器内命令
Ctrl +p +q docker attach 容器_ID docker exec -t a106a7a86923 ls -l /tmp
-- attach 进入容器终端, 不会启动新的进程
-- exec 实在容器中打开新的终端, 并且可以启动新的进程
-- -t 需要两个参数 容器名 命令|/bin/bash
例子:
docker exec -t a106a7a86923 ls -l /tmp
docker exec -t a106a7a86923 /bin/bash
从容器内拷贝文件到主机
docker cp 容器_ID:容器内路径 目标主机路径
启动容器
docker start 容器_id
停止
docker stop
docker kill
守护进程方式运行 -d
docker run -d 容器名
查看容器日志
docker -logs 容器_ID
-f 跟随最新的日志打印
-t 时间
--tall 多少条
查看容器内的进程
docker top 容器_ID
查看容器细节
docker inspect 容器_ID
Docker commit 提交容器副本成为一个新的镜像
docker commit -a="Author" -m="this is info" 容器_ID atguigu/my_image:1.2 ${images}/${ima_name} version
docker run -it :
-p(小p) 主机端口:容器端口
-P(大p) 随机分配端口
容器数据卷
数据卷 -- 数据持久化
直接命令添加
1.docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名 注:数据共享
2.查看是否挂载成功 :docker inspect a3e425b56493 | grep Binds -A 3
3.主机 / 容器 两边同时会共享目录, exit退出容器时,主机修改目录,再次重启容器(docker ps -a)进入 会看到修改内容
4.docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名 ro:表示只读 read only
备注:如果出现 cannot open directory Permission denied
在挂载目录后加参数 --privileged=true
dockerfile添加
1. 新建dockerfile 文件 一定要新建 并且在新的目录下执行 docker build,否则数据传输很大
2. 编辑dockerfile
使用 VOLUME 指令 来个镜像添加一个或者多个数据卷
FROM centos
VOLUME ["/dataContainer1","dataContainer2"]
CMD echo"finished, -------success"
CMD /bin/bash
3. docker build -f /${dockerfile_path} -t liuhao/centos . 注意有点
数据卷容器
数据卷挂载的容器
--volumes-from 容器间传递共享 以已有的容器 复制容器名不同的容器,实现数据间共享, 父亲有两儿子,儿子有父信息,父也有儿信息,即使挂了一个,数据不会改变
例: docker run -it -name "***" --volumes-form 容器name 容器名
DockerFile 解析
file执行流程
1 有一个dockerfile 文件,符合file规范
2 docker build 获得自定义的镜像
3 docker run
基础知识
关键字大写
指令从上到下顺序执行,
每条指令创建新的镜像层
# 表示注释
执行dockerfile 内部流程
1 运行基础镜像
2 每条执行命令对容器作出修改
3 修改后并commit 提交成新的镜像,并生成容器
4 直致命令运行完毕
dockerfile 是软件的原材料
docker images 是 file的产物,交付品
docker container 是 images运行态
保留字指令
FROM 继承于哪个镜像
MAINTAINER 作者及作者邮箱
RUN 容器构建需要执行的命令
EXPOES 容器启动后, 默认的对外暴露的端口号
WORKDIR 默认的启动后工作路径
ENV 构建镜像过程中设置环境变量
ADD 拷贝文件并解压 从宿主机拷贝到容器内
COPY 拷贝文件
VOLUME 保存数据并持久化工作
CMD 指定容器是要执行的命令 只会执行最后一条命令, CMD 会被docker run 之后的参数替换
ENTRYPOINT 和CMD效果一直,但是不会被docker run 的命令覆盖 docker run 之后的命令会被追加
ONBUILD 触发器触发父类镜像