初识Docker
参考文档
《docker 从入门到实践.pdf》《第一本Docker书 完整版.pdf》
版本
Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,
强调安全,付费使用,支持周期 24 个月。
手册帮助:Docker 教程 | 菜鸟教程CentOS Docker 安装 | 菜鸟教程Docker 教程 | 菜鸟教程
https://docs.docker.com/
docker hub 镜像资源站 :Docker Hub
什么是Docker?
Docker 是使用 Go 语言开发的一种 Linux 容器封装,提供简单易用的使用接口,是目前最流行的 Linux 容器解决方案。
Docker与VM的区别
参考:Docker与VM虚拟机的区别以及Docker的特点_JingZhunBianCheng的博客-优快云博客_docker和虚拟机的区别
docker和传统虚拟机技术的特性比较:docker和传统虚拟机技术的特性比较_hello_清风的博客-优快云博客
Docker容器化虚拟机:抛弃传统虚拟机:Docker容器化虚拟机:抛弃传统虚拟机_boonya的博客-优快云博客_容器化 虚拟机
Docker安装
Centos7.0以下的参考:CentOS 6.5下Docker的安装_猿来如此呀的博客-优快云博客_centos6.5安装dockerCentOS Docker 安装 | 菜鸟教程CentOS 6.5下Docker的安装_猿来如此呀的博客-优快云博客_centos6.5安装docker
以下适用于centos7.0以上
注:最新安装方法参见“CentOS Docker 安装 | 菜鸟教程”
安装命令如下: $ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
1、更新update到最新的版本
# yum -y update
2、卸载老版本docker
# yum remove docker docker-common docker-selinux docker-engine
注意:如果centos 8版本,安装docker会报错“Unable to find a match: docker”。centos8默认使用podman代替docker,所以需要containerd.io(参考centos8 安装docker报错Error: Unable to find a match: docker_架构路上的博客-优快云博客)
# yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
将服务器上的软件包信息 现在本地缓存,以提高 搜索 安装软件的速度
#yum makecache
必要是清除yum缓存,yum clean all,重新生成。
3、安装需要的软件包
# yum install -y yum-utils device-mapper-persistent-data lvm2
4、设置yum源
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum makecache
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
5、查看docker版本
yum list docker-ce --showduplicates|sort -r
6、安装docker
yum install -y docker-ce
指定版本安装,如下:
yum install docker-ce-18.03.1.ce -y
7、启动docker
sudo systemctl start docker
8、加入开机自启
sudo systemctl enable docker
9、配置国内镜像
vi /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
阿里云提供推荐镜像地址的方法如下:
访问阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台,取得如下地址
根据上述界面,复制镜像地址,来配置docker镜像地址,是阿里云给你所属地速度最佳的地址,配置进去就可以用了。
换镜像源还有另外方法(替换文件网址名称)
cd /etc/yum.repos.d/
vim docker-ce.repo
# 按ecs进行非编辑模式
:%s/https:\/\/download.docker.com/https:\/\/mirrors.aliyun.com\/docker-ce/g
几个基本概念
Docker 包括三个基本概念
镜像( Image )
容器( Container )
仓库( Repository )
Docker三剑客
Docker-Composer
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
Docker-machine
Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安
装 Docker 环境。Docker Machine 项目基于 Go 语言实现,目前在 Github 上进行维护。
Docker-Swarm
Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。使用它,用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。
镜像操作
- 获取镜像 #docker pull redis:latest
- 列出镜像 #docker images
#docker image ls
- 删除镜像 #docker image rm [选项] [选项]可以是镜像短 ID 、 镜像长 ID 、 镜像名 或者 镜像摘要
删除镜像为none的 # docker rmi $(docker images | grep "none" | awk '{print $3}')
-
构建镜像实例:#docker build -t nginx-yan1 .
# docker build -t angelkitty/nginx_web:v1 .
-
保存镜像 #docker save -o a.tar 1e1148e4cc2c
#docker save 1e1148e4cc2c > /home/a.tar
- 加载镜像 #docker load -i nginx-yan1.tar 1e1148e4cc2c
#docker load < /home/a.tar
- 更改docker标签:#docker tag ae91f9dad35b nginx-yan1:20190328
- 更改docker容器名:# docker rename 原容器名 新容器名
# docker rename mysql-master57 mysql-master8
-
构建镜像实例 #docker build -t nginx-yan1:v1 .
注:当前目录中应当包含脚本文件Dockerfile容器操作
- 停止容器 # docker container stop <container id>
批量 # docker container stop $(docker ps -a -q)
- 列出所有容器 #docker ps
- 删除容器 # docker container rm <container id>
批量 # docker container rm $(docker ps -a -q)
- 根据镜像创建容器
# docker run -itd --name redis-yan-v1 --net mynetwork -p 6380:6379 --ip 192.168.0.2 redis-yan:v1
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-p: 端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--ip: 为容器制定一个固定的ip
--net: 指定网络模式
- 进入容器
# docker exec -it redis-yan-v1 bash
docker exec -it <container id> bash
仓库操作
- 下载仓库组件生成镜像:# docker pull cenos
- 上传本地镜像到仓库 # docker push 127.0.0.1:5000/ubuntu:latest
- 查看仓库中的镜像 # $ curl 127.0.0.1:5000/v2/_catalog
- 查询远程仓库镜像:#docker search centos
自定义网络操作
- 列出所有的网络配置 # docker network ls
- 创建自定义网络 # docker network create --subnet=192.168.0.0/16 mynetwork
- 查看容器的网络配置 #docker network inspect <network id>
- 删除网络配置 #docker network rm <network id>
数据卷
- 挂载一个数据目录作为数据卷
# docker run -itd --name test \
--mount type=bind,source=/home/myapp,target=/myapp alpine
# docker exec -it test sh
//test为容器名,alpine为镜像名,意为将本地目录/home/myapp挂载到容器test的/myapp中。这样容器的/myapp目录修改数据后,本机目录也同时修改。即使容器删除,数据不会丢失。
卸载docker
- 卸载Docker
#yum remove docker-ce
- 清理镜像、容器、存储卷等
#rm -rf /var/lib/docker
技巧及提示
1、docker安装后,核心文件在目录/var/lib/docker/下有目录containers、images等,排查错误时可进相应目录查看。
2、docker安装容器组件后,进入容器,一些简单linux命令工具vim等都没有,怎么操作呢?
答:可以使用apt-get工具,
# apt-get update
# apt-get install vim
这样执行后,就可以使用vim了。
问题记录
问题:
docker容器存放目录磁盘空间满了,如何做
解决:docker数据默认存放在/var/lib/docker,若存满了,可以迁移数据,然后使用使用软连接将数据存放在数据盘,#ln -s /vdb1/var/lib/docker /var/lib/docker
参考docker容器存放目录磁盘空间满了,转移数据修改Docker默认存储位置_周子青的博客-优快云博客_修改docker 数据目录
- 问题:删除镜像时image is referenced in multiple repositories,
#docker rmi [IMAGEID]时会提示上述错误
解决:#docker image rm nginx2:latest ,带镜像tag删除,提示“Untagged: nginx2:latest”,再次查看解除镜像了。
- 问题:docker创建网络时报错“Pool overlaps with other one on this address space“”
解决:因为已经有网络定义了192.168.0.0/16的subnet,网段定义重叠了,无须再定义,或重新定义其他网段。
- 问题:docker run报错:172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name
解决:https://blog.youkuaiyun.com/qq_14853889/article/details/79678406?utm_source=blogxgwz6
- 问题:容器运行后总是exitd
解决:docker update --restart=always <container id>
或docker run --restart=always ... 注意加--restart=always参数
持续完善,待续...