Docker 学习笔记
Docker 安装
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低
脚本安装(推荐)
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh
Centos 安装
sudo yum install docker-ce docker-ce-cli containerd.io
Ubuntu安装
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - #导入密钥 sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" #添加源地址 sudo apt-get update #更新 sudo apt-get install docker-ce docker-ce-cli containerd.io #安装Docker
其他发行版就不写了,感觉用不到的啦
输入命令 docker -v 查看版本号,出现版本号即安装成功
基本命令和用法
docker search
:从dockerhub上搜索镜像的名字 (docker search -s 30 ubuntu –no-trunc )
选项: -s 30 :筛选星标30 –no-trunc : 显示所有信息
2.docker pull
下载镜像
3.docker rmi
删除镜像
4.docker rm
删除容器
5.docker images
查看下载的镜像
6.docker ps
查看运行中的容器
容器
新建并运行容器
docker run -d --name 容器名 -v 宿主机文件路径:容器路径 -p 宿主机端口:容器端口 镜像名:版本号
本地镜像不存在则会执行
docker pull 镜像
-d
为后台运行模式 可选-it
参数 为容器分配一个伪终端,输入exit
后会关闭容器,也可以用Ctrl+P+Q
:不关闭容器,退出,--restart=always
运行容器时添加启动策略,加入-it
参数后exit
也不会退出容器进入正在运行的容器
docker attach 容器ID
进入容器,exit后会关闭容器docker exec 容器ID
进入容器 或 (不进去)执行一个任务 很重要!
eg:docker exec -it 容器ID /bin/bash
//进入主机docker exefc ID ls
//不进入,执行ls
命令容器ID也可用容器名替换
启动一个被关闭的容器:
docker start +id
(ps查id)停止容器:
docker stop 容器ID //温柔
docker kill 容器ID//拔掉电源
删除已停止的容器
docker rm 容器ID
删除正在运行的镜像先docker stop 容器ID
查看容器日志
docker logs -f -t --tail 容器ID
(-t加入时间戳 -f 刷新日志)
查看容器内部进程docker top 容器ID
docker cp 容器ID:/tmp/a.log /root
//把a.log 拷贝到主机/root下
镜像
- 特点:一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件。包括代码,云从事,库,环境变量,配置文件。
UnionsFS联合文件系统:一种分层,轻量级的文件系统。对文件系统的修改作为一次提交层层叠加。是docker分层继承的基础斜体样式。 - Docker加载原理:bootfs+rootfs。
- bootfs :包括最基本命令,工具,程序库(内核来自宿主机) ;
- rootfs :控制Centos,Ubntu等发行版本。
思考 :Centos与Ubntu的Linux版本中,bootfs是否相同?
——相同
UnionsFS联合文件系统的优点?
—— 复用,共享资源。
- 对镜像的操作
docker commit
提交容器副本,保存修改过后的容器,成为一个新的镜像 .
当我们run一个容器后,对容器内容进行了修改时,可以保存此容器,作为一个新的镜像。docker commit -m="描述" -a="作者" 容器ID 目标镜像名字:[标签名]
Dockerfile初识
先认识以下几个关键字:
From :基于**创建
ENV: 配置环境
EXPOSE :暴露端口
CMD :启动
再来了解一个概念——容器卷:
保存容器中数据,数据持久化。容器之间,主机与容器之间,共享数据。相当于挂载!可以使得主机与容器内同步更新!
容器卷的两种使用方式:
1.使用命令,在创建镜像时直接添加容器卷。直接举例说明:docker run -it -v /主机绝对路径:/容器内目录 镜像名
docker run -it -v /主机绝对路径:/容器内目录:ro 镜像名
只读
2.在dockerfile中编写,使用VOLUME指令VOLUME["/file1","/file2","/file3"]
//只支持容器内的目录,不支持宿主机目录(为了可移植性)
docker inspect ID
//查看挂载在主机的目录
容器间传递共享:docekr run --volumes-from 容器名 镜像名
eg: docker run -it --name dc02 --volumes-from dc01 zxd/centos //dc02 与dc01 共享文件!!
//思考:当dc01被kill ,文件是否还存在?——存在,且共享均保持