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安装
1. `## 下载docker源`
2. `curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo`
4. `## 安装docker服务`
5. `yum install -y docker-ce`
7. `## 启动docker服务`
8. `systemctl start docker`
Docker镜像管理
1. `## 下载docker镜像`
2. `docker pull centos // 从官方下载centos镜像,速度很慢`
安装/升级你的Docker客户端
- 推荐安装
1.10.0
以上版本的Docker客户端,参考文档 docker-ce
如何配置镜像加速器
- 针对Docker客户端版本大于1.10.0的用户
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
1. `sudo mkdir -p /etc/docker`
2. `sudo tee /etc/docker/daemon.json <<- 'EOF'`
3. `{`
4. `"registry-mirrors":["https://sqvb9629.mirror.aliyuncs.com"]`
5. `}`
6. `EOF`
7. `sudo systemctl daemon-reload // 重启daomon`
8. `sudo systemctl restart docker // 配置后,重启docker服务`
每次重启docker服务时,都会停止当前所有正在运行中的容器
创建镜像
通过容器创建镜像
1. `## 1. 准备一个现有镜像`
2. `docker tag centos centos:liubao`
4. `## 2. 启动容器`
5. `docker run -itd centos:liubao`
7. `## 3. 进入容器`
8. `docker exec -it [容器ID] bash // 针对这个容器进行创建新的镜像`
9. `yum install net-tools -y`
11. `## 4. 通过容器创建镜像`
12. `docker commit -m "[改动信息]" -a "[指定做着相关信息]" [容器id] [新镜像名称]`
13. `docker commit -m "install net-tools" -a "liubaolong" 1640295ec284 centos_with_nettools`
通过容器创建镜像时,必须在针对 运行中的容器
安装相应信息才能使 commit
命令所创建的容器生效相应服务
通过模板创建****镜像
1. `## 1. 下载一个模板镜像`
2. `wget http://download.openvz.org/template/precreated/centos-6-x86-minimal.tar.gz`
4. `## 2. 导入该模板镜像【命名为centos6】`
5. `cat centos-6-x86-minimal.tar.gz |docker import - centos6`
7. `## 3. 把现有镜像,导出为一个文件`
8. `docker save -o centos_with_nettool.tar centos_with_nettool`
10. `## 4. 用导出的文件恢复本地镜像`
11. `[root@localhost ~]$ ll centos_with_nettool.tar`
12. `-rw-------. 1 root root 307501568 Mar 19 00:42 centos_with_nettool.tar`
14. `docker load < centos_with_nettool.tar // 恢复本地镜像`
容器管理
1. `docker create -it [image_name] bash ## 创建容器,但该容器并没有启动`
2. `docker start [容器id] ## 启动容器,可通过 docker ps 命令查看运行状态;`
3. `docker stop [容器id] ## 停止容器`
4. `docker restart [容器id] ## 重启容器`
6. `docker run -itd [image_name] bash ## 创建并启动容器`
7. `// -i 参数: 让容器标准输入打开`
8. `// -t 参数: 分配一个伪终端`
9. `// -d 参数: 后台启动`
11. `docker run --name [容器名字] -itd [image_name] ## 给容器自定义名称`
12. `docker run --rm -it centos bash -c "sleep 30" ## 通过--rm可让容器退出后直接删除`
14. `docker logs [容器id] ## 获取容器的运行历史信息`
15. `docker attach [容器id] ## 进入一个后台运行的容器【该命令不好用】`
16. `docker exec -it [容器id] bash ## 临时打开一个虚拟终端,并exit退出后容器依然运行`
17. `docker rm [容器id] ## 删除一个容器,-f参数表示为强制删除运行中的容器`
19. `docker export [容器id] > file.tar ## 导出容器,可以迁移到其它机器上面;`
20. `cat file.tar | docker import - [new_image_name] ## 导入容器,`
22. `#### import 和 load 命令区别`
23. `import命令:加载容器导出的归档文件,导入容器归档文件时并不会维护文件系统历史;`
24. `load命令: 加载镜像归档文件,导入image归档文件是会维护历史记录;`
26. `#### export 和 save 命令区别`
27. `export命令: 导出容器的命令,导出的归档文件不包含文件系统的历史记录,只有最近一次的读写层数据;【docker不建议移植容器,但预留了export命令来导出容器】`
28. `save命令: export命令只能一次导出一个容器的文件系统,而save命令可以同时导出多个镜像文件系统;且多个镜像互无关系,同一个镜像的不同tag`
docker仓库管理
1. `docker pull registry ## 下载registry镜像,该镜像为docker官方提供的可用阿里创建私有仓库`
3. `docker run -d -p 5000:5000 registry ## 创建启动registry容器【私有仓库】`
4. `## -p 参数: 将容器的端口映射到宿主机上 [宿主机监听端口]:[容器监听端口]`
6. `curl 127.0.0.1:5000/v2/_catalog ## 访问私有仓库`
7. `docker tag [image_name] [宿主机IP地址:端口]/[tag_name] ## 打标签【上传镜像到仓库前】`
9. `$ cat /etc/docker/daemon.json`
10. `{"insecure-registries":["宿主机ip:5000"]} ## 更改配置文件,并重启docker`
12. `systemctl restart docker`
14. `## 上传镜像到仓库`
15. `docker push [宿主机IP]:5000/[标签名称]`
17. `## 下载私有仓库中的镜像`
19. `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
END
本文分享自微信公众号 - 杰哥的IT之旅(Jake_Internet)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。