一、docker介绍
1、什么是docker容器
- docker是一个开源的应用容器引擎,有Docker公司(前dotCloud公司)开发,基于Apache2.0开源授权协议发行。
- 该引擎提供了一个轻量、快递的环境,能够运行开发者的程序,并方便高效的将程序从开发者的电脑部署到测试环境,然后再部署到生产环境。
2、docker容器的优点
- 启动速度快(秒级),由于去除了管理程序的开销,docker容器拥有很高的性能,同一台宿主机可以运行更多的容器,有效的利用了资源。
- 能够为开发,测试和部署提供一致的环境,避免了在开发或测试时一切正常,但在生成环境中却不能运行的问题。
- 鼓励面向服务架构,Docker 推荐单个容器只运行一个应 用程序或进程,这样就形成了一个分布式的应用程序模型。
3、docker容器的用途
- 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
- 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
- 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
4、docker与虚拟机的区别
VM(VMware)在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用。
Docker在宿主机的操作系统上创建Docker引擎,直接通过宿主机的操作系统调用硬件资源,而不是虚拟化操作系统和硬件资源,所以占用资源更少,性能更高。
5、docker核心组件
docker三要素:仓库、镜像、容器
- Docker客户端和服务器,也称为Docker引擎:docker是客户端/服务器架构的程序,docker客户端只需向docker服务器或守护进程发送请求,守护进程或服务器完成后返回结果,docker的守护进程有时也称作为docker引擎。用户可以在同一台宿主机上运行Dokcer守护进程和客户端,也可以从本地的docker客户端连接到另一台宿主机上的docker引擎。
- Docker镜像:镜像是docker容器的基石,用户基于镜像来运行容器的,镜像在docker生命周期中属于“构建阶段”,镜像基于联合文件系统的一种层式结构,由一系列的命令构建出来。可以将镜像理解为容器的“源代码”。镜像体积小,便于分享,存储,更新。
- Registry:Registry即仓库,Registry分为公共和私有的两种。docker公司运营的公共Registry是docker hub。用户可以自己注册账号,在其中保存自己的镜像。也可以搭建私有的仓库。
- Docker容器:镜像处在docker生命周期的“构建”阶段,容器则处在“运行”阶段,如果将镜像理解为一个“类”,则容器可以理解为这个“类”的“运行时实例”,可以被创建,启动,停止,删除。
总结起来容器就是:一个镜像格式,一系列标准操作,一个执行环境。
二、docker安装
1、docker安装条件
- 运行64位cpu架构的机器(x86_64, amd64),不支持32位机器
- 运行linux3.8或更高的内核(可以使用uname -a 命令查看系统内核)
- 内核必须支持一种合适的存储驱动:Device Messager,AUFS,vfs等, 默认为Device Messager。
- 内核支持cgroup和命名空间
2、CentOS安装docker
1.登录root用户查看内核版本号
uname -a
2.yum包更新到最新
yum update
3.设置docker源(二选一即可)
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)
4.装yum-util, 该包提供yum-config-manager功能
yum install -y yum-utils
5.安装docker, yum install docker-ce-版本号
yum install docker-ce-18.06.3.ce
如果出现了这个问题:
原因就是上次没有正常退出docker,请使用一下代码,
systemctl start docker.service
6.验证
docker version
7.启动docker
systemctl start docker
8.设置docker开启自启动
systemctl enable docker
三、配置镜像加速器
1、获取加速器地址
登录阿里云网站:https://www.aliyun.com/,注册 / 登录账号阿里云网站。
2、复制加速器链接
- 搜索容器,选择容器镜像服务
- 点击容器工具–>镜像加速器,复制该加速器链接。
3、配置docker
在/etc/docker目录下创建daemon.json配置文件
vim /etc/docker/daemon.json
配置如下:
{
"registry-mirrors":["你的阿里云专属加速器地址"]
}
4、重新加载docker
systemctl daemon-reload
5、重启docker
systemctl restart docker
到这里镜像就已经配置好了,下面是镜像的常用操作。
四、镜像常用操作
1、搜索镜像
docker search 镜像名称
示例:搜索ubuntu
docker search ubuntu
2、下载镜像
docker pull 镜像名称:标签
标签也就是版本号:
# 未指定标签
docker pull ubuntu
#指定标签
docker pull ubuntu:16.04
3、查看镜像
docker images
这是我前面下载的Ubuntu
4、删除镜像
docker rmi 镜像id或名称
如果提示镜像被使用,需要先停止某个ID的容器,那么要先删除容器再删除镜像,如需强行删除可以使用-f参数,例如:docker rmi -f ubuntu:16.04
五、容器常用命令
1、运行容器
- 创建容器
docker create -it ubuntu:latest
参数与docker run命令相同,与docker run命令不同的是docker create命令创建的容器不会自动启动。
- 创建并启动容器
sudo docker run -it ubuntu:18.04 /bin/bash
使用该命令时,如果镜像还没有下载,则docker会首先下载该镜像,然后执行创建并启动容器。
参数说明:
-i 开启容器中的STDIN(标准输入流),能接受命令,可以理解为已交互模式启动容器
-t 为容器分配一个tty终端,即:分配一个命令行窗口, 有了这两个参数新创建的容器才能有一个交互式shell。
/bin/bash 参数告诉docker在容器中启动一个bash shell
可以通过–name 参数为容器命名
如果指定 -d 参数,则说明容器以守护进程形式启动
可以使用 docker help run查看更详细的参数说明
在容器中使用,“cat /etc/issue”可以查看到运行中的容器其实为ubuntu系统。
2、使用容器
这是一个精简但完整的ubuntu系统,例如执行以下的命令:
root@ee40a28bc5de:/# hostname
ee40a28bc5de
root@ee40a28bc5de:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
就跟有系统一样,有属于自己的目录、用户这些的。但是你想查找ip的时候却找不到命令。
查看环境变量
查找不到是因为那些命令还没有安装,ubuntu镜像是精简版的系统,如果需要使用这些命令需要另外安装net-tools,包括vi,vim等也是需要另外安装的。
3、查看运行的容器
- 查看运行中普通交互式容器信息,包括id,镜像,名称等。
docker ps
- 查看所有容器,包括停止运行的。
docker ps -a
4、容器停止
docker stop ee40
ee40是要停止容器的id号,可以不用完全输入,只要保证唯一就行。
5、容器启动
docker start ee40
跟上面一样,输入要启动的容器的id,换了个启动的单词罢了。
6、进入容器
/bin 这个是可以省略的,可写可不写,看个人习惯。
[root@localhost /]# docker exec -it ee40 /bin/bash
root@ee40a28bc5de:/# exit
exit
[root@localhost /]# docker exec -it ee40 bash
root@ee40a28bc5de:/#
只能进入运行中的容器哦
7、复制文件
1、从宿主机复制到容器
这一步是在宿主机操作!
1、创建一个abc文件
[root@localhost /]# echo hgfds >abc.txt
[root@localhost /]# ls
abc.txt boot etc lib media opt root sbin sys usr
bin dev home lib64 mnt proc run srv tmp var
2、把abc.txt拷贝到容器idxxx里面的根目录下。
[root@localhost /]# docker cp /abc.txt ee40a28:/
3、运行容器并查看,这时会看见容器id名为ee40的里面多了一个abc.txt文件。
[root@localhost /]# docker exec -it ee40 bash
root@ee40a28bc5de:/# ls
abc.txt boot etc lib media opt root sbin sys usr
bin dev home lib64 mnt proc run srv tmp var
对,这就是已经拷贝完了,就这么简单。
2、从容器复制到宿主机
启动并进入容器,接着上面继续走就行。
1、创建aaa.txt文件
root@ee40a28bc5de:/# echo tyuio > aaa.txt
root@ee40a28bc5de:/# ls
aaa.txt bin dev home lib64 mnt proc run srv tmp var
abc.txt boot etc lib media opt root sbin sys usr
2、退出容器
root@ee40a28bc5de:/# exit
3、复制容器id名为xxx的aaa.txt文件,复制到根目录下。
这里已经是root用户了
直接查看会看到root用户根目录下有个aaa.txt的文件,这件就是从容器里面拷贝过来的。
[root@localhost /]# docker cp ee40:/aaa.txt /
[root@localhost /]# ls
aaa.txt bin dev home lib64 mnt proc run srv tmp var
abc.txt boot etc lib media opt root sbin sys usr
总结区分一下:
这些都是在各自的根目录创建的。
从宿主机复制到容器里:
#拷贝根目录下名为abc的文本到id名为ee40a28的容器里面的根目录下。
docker cp /abc.txt ee40a28:/
从容器复制到宿主机里
#拷贝 id名为ee40的容器里面的aaa的文本到根目录下。
docker cp ee40:/aaa.txt /
也就是不用指定宿主机里面的名称,只需要指定容器名称即可。两者拷贝的位置换了一下罢了。
8、查看容器信息
- 查看容器信息可以进入容器后,使用命令查看,例如:hostname,env等
[root@localhost /]# docker exec ee40 hostname
ee40a28bc5de
如果运行ifconfig,ip addr等命令,则需要先安装
- 推荐使用docker inspect命令查看容器信息
docker inspect 7b8b
该命令以json的方式返回容器的信息,内容比较多,可以只查询一种一部分,示例如下:
root@ubuntu:/# docker inspect -f {{.Config.Hostname}} 7b8b
7b8b196818d5
9、删除容器
命令格式:docker rm 容器ID,(与删除镜像的命令很像,只少个i,镜像删除docker rmi 镜像名)
参数:
-f, --force=false 是否强行终止并删除一个运行中的容器
-1, --link=false :删除容器的连接 ,但保留容器
-v, --volumes=false :删除容器挂载的数据卷
扩展:如何卸载原先装有的docker
1.打开Terminal,执行下面命令: sudo apt-get purge docker-ce
2.删除Docker安装目录 sudo rm -rf /var/lib/docker
3.验证是否删除成功 docker info bash: /usr/bin/docker: No such file or directory 我们可以看到已经无法找到 docker 安装目录,证明 卸载成功