Docker基础知识
Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。
Docker利用Linux核心中的资源分脱机制,例如cgroups,以及Linux核心名字空间(name space),来创建独立的软件容器(containers)。这可以在单一Linux实体下运作,避免启动一个虚拟机造成的额外负担。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括进程树、网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、存储器、block I/O与网络。从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的LXC与systemd - nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施。
Dockers是有能力打包应用程序及其虚拟容器,可以在任何Linux服务器上运行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以运行,无论是公有云、私有云、单机等。
Docker安装
## 下载docker源
curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo
## 安装docker服务
yum install -y docker-ce
## 启动docker服务
systemctl start docker
Docker镜像管理
## 下载docker镜像
docker pull centos // 从官方下载centos镜像,速度很慢
安装/升级你的Docker客户端
推荐安装
1.10.0
以上版本的Docker客户端,参考文档 docker-ce
如何配置镜像加速器
针对Docker客户端版本大于1.10.0的用户
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<- 'EOF'
{
"registry-mirrors":["https://sqvb9629.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload // 重启daomon
sudo systemctl restart docker // 配置后,重启docker服务
每次重启docker服务时,都会停止当前所有正在运行中的容器
创建镜像
通过容器创建镜像
## 1. 准备一个现有镜像
docker tag centos centos:liubao
## 2. 启动容器
docker run -itd centos:liubao
## 3. 进入容器
docker exec -it [容器ID] bash // 针对这个容器进行创建新的镜像
yum install net-tools -y
## 4. 通过容器创建镜像
docker commit -m "[改动信息]" -a "[指定做着相关信息]" [容器id] [新镜像名称]
docker commit -m "install net-tools" -a "liubaolong" 1640295ec284 centos_with_nettools
通过容器创建镜像时,必须在针对 运行中的容器
安装相应信息才能使 commit
命令所创建的容器生效相应服务
通过模板创建镜像
## 1. 下载一个模板镜像
wget http://download.openvz.org/template/precreated/centos-6-x86-minimal.tar.gz
## 2. 导入该模板镜像【命名为centos6】
cat centos-6-x86-minimal.tar.gz |docker import - centos6
## 3. 把现有镜像,导出为一个文件
docker save -o centos_with_nettool.tar centos_with_nettool
## 4. 用导出的文件恢复本地镜像
[root@localhost ~]$ ll centos_with_nettool.tar
-rw-------. 1 root root 307501568 Mar 19 00:42 centos_with_nettool.tar
docker load < centos_with_nettool.tar // 恢复本地镜像
容器管理
docker create -it [image_name] bash ## 创建容器,但该容器并没有启动
docker start [容器id] ## 启动容器,可通过 docker ps 命令查看运行状态;
docker stop [容器id] ## 停止容器
docker restart [容器id] ## 重启容器
docker run -itd [image_name] bash ## 创建并启动容器
// -i 参数: 让容器标准输入打开
// -t 参数: 分配一个伪终端
// -d 参数: 后台启动
docker run --name [容器名字] -itd [image_name] ## 给容器自定义名称
docker run --rm -it centos bash -c "sleep 30" ## 通过--rm可让容器退出后直接删除
docker logs [容器id] ## 获取容器的运行历史信息
docker attach [容器id] ## 进入一个后台运行的容器【该命令不好用】
docker exec -it [容器id] bash ## 临时打开一个虚拟终端,并exit退出后容器依然运行
docker rm [容器id] ## 删除一个容器,-f参数表示为强制删除运行中的容器
docker export [容器id] > file.tar ## 导出容器,可以迁移到其它机器上面;
cat file.tar | docker import - [new_image_name] ## 导入容器,
#### import 和 load 命令区别
import命令:加载容器导出的归档文件,导入容器归档文件时并不会维护文件系统历史;
load命令: 加载镜像归档文件,导入image归档文件是会维护历史记录;
#### export 和 save 命令区别
export命令: 导出容器的命令,导出的归档文件不包含文件系统的历史记录,只有最近一次的读写层数据;【docker不建议移植容器,但预留了export命令来导出容器】
save命令: export命令只能一次导出一个容器的文件系统,而save命令可以同时导出多个镜像文件系统;且多个镜像互无关系,同一个镜像的不同tag
docker仓库管理
docker pull registry ## 下载registry镜像,该镜像为docker官方提供的可用阿里创建私有仓库
docker run -d -p 5000:5000 registry ## 创建启动registry容器【私有仓库】
## -p 参数: 将容器的端口映射到宿主机上 [宿主机监听端口]:[容器监听端口]
curl 127.0.0.1:5000/v2/_catalog ## 访问私有仓库
docker tag [image_name] [宿主机IP地址:端口]/[tag_name] ## 打标签【上传镜像到仓库前】
$ cat /etc/docker/daemon.json
{"insecure-registries":["宿主机ip:5000"]} ## 更改配置文件,并重启docker
systemctl restart docker
## 上传镜像到仓库
docker push [宿主机IP]:5000/[标签名称]
## 下载私有仓库中的镜像
docker pull 10.0.55.134:5000/ubuntu-1
docker小结
docker 常用命令
命令 | 方法[示例] | 说明 |
---|---|---|
docker images | docker images | 查看当前所有镜像 |
docker search | docker search [关键字] | 搜索镜像,其中[]内为搜索对象 |
docker pull | docker pull image_name | 下载一个镜像 |
docker push | docker push image_name | 上传一个镜像 |
docker tag | docker tag centos centos:liubao | 给镜像centos 打标签为一个新的镜像 |
docker run | docker run -itd --name lbl centos | 创建并允许一个单独的容器 |
docker ps | docker ps / docker ps -a | 查看当前容器运行状态 |
docker rmi | docker rmi [image_name] | 删除一个镜像 |
docker exec | docker exec -it [容器id] bash | 进入运行中的容器 |
docker rm -f | docker rm -f [容器id] | 强制删除运行中的容器 |
docker save | docker save -o save-centos.tar centos | 把现有镜像导出为文件 |
docker load | docker load < save-centos.tar | 用该文件恢复本地镜像 |
docker create | docker create -it [image_name] bash | 创建一个容器,但该容器并没有启动 |
docker start | docker start [容器id] | 启动容器,其它相关命令有:start、stop、restart |