目录
1. 什么是docker
2. docker的核心组件
3. docker的安装
3.1 安装的先决条件
3.2.1 ubuntu安装docker
3.2.2 CentOS安装docker
3.3 配置镜像加速器
4. 镜像常用操作
4.1 搜索镜像
4.3 查看宿主机中的镜像
4.3 删除镜像
5. 容器常用命令
5.1 运行容器
5.2 使用容器
5.4 容器的退出
5.5 容器的启动与停止
5.6 复制文件
5.7 进入容器
5.8 查看容器信息
5.9 容器的删除
6. 其他(了解)
6.1 如何卸载原先安装的 docker
6.2 关于删除容器
首先我们可以好好的看看docker的那个可能的图标,你想象到了什么? ...
docker是一个开源的应用容器引擎,有Docker公司(前dotCloud公司)开发,基于Apache2.0开源授权协议发行。该引擎提供了一个轻量、快递的环境,能够运行开发者的程序,并方便高效的将程序从开发者的电脑部署到测试环境,然后再部署到生产环境。
docker的优点:
docker用途
docker与虚拟机的区别:
特性 |
docker |
vm |
启动速度 |
秒级 |
分钟级 |
硬盘使用 |
MB |
GB |
性能 |
接近原生 |
弱与原生 |
系统支持数量 |
单机可支持数百甚至数千 |
几十个 |
1)Docker客户端和服务器,也称为Docker引擎
2)Docker镜像
3)Registry
4)Docker容器
docker架构图:
docker引擎
docker是客户端/服务器架构的程序,docker客户端只需向docker服务器或守护进程发送请求,守护进程或服务器完成后返回结果,docker的守护进程有时也称作为docker引擎。用户可以在同一台宿主机上运行Dokcer守护进程和客户端,也可以从本地的docker客户端连接到另一台宿主机上的docker引擎。示意图:
镜像是docker容器的基石,用户基于镜像来运行容器的,镜像在docker生命周期中属于“构建阶段”,镜像基于联合文件系统的一种层式结构,由一系列的命令构建出来。可以将镜像理解为容器的“源代码”。镜像体积小,便于分享,存储,更新。
Registry即仓库,Registry分为公共和私有的两种。docker公司运营的公共Registry是docker hub。用户可以自己注册账号,在其中保存自己的镜像。也可以搭建私有的仓库。
镜像处在docker生命周期的“构建”阶段,容器则处在“运行”阶段,如果将镜像理解为一个“类”,则容器可以理解为这个“类”的“运行时实例”,可以被创建,启动,停止,删除。
总结起来容器就是:一个镜像格式,一系列标准操作,一个执行环境。
安装docker时需要一些基本的前提条件:
注:cgroups,其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)
1.卸载可能存在的旧版本
apt-get remove docker docker-engine docker-ce docker.io
2.更新apt包索引
apt-get update
3.安装以下包以使apt可以通过HTTPS使用存储库(repository)
apt-get install -y apt-transport-https ca-certificates curl software-properties-common
4.添加Docker官方的GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
成功后应该显示OK
5.设置stable存储库
add-apt-repository "deb [arch=amd64] Index of linux/ubuntu/ $(lsb_release -cs) stable"
6.再更新一下apt包索引
apt-get update
7.安装最新版本的Docker CE
apt-get install -y docker-ce
8.验证
8.1查看docker服务是否启动
systemctl status docker
或如下命令
service docker status
8.2若未启动,则启动docker服务
systemctl start docker 或如下命令service docker start
apt-get update && apt-get install -y docker.io
这种方式安装的优点是简单,缺点是版本较低(目前是18.09)
推荐 --- 从第三步开始 安装
1)root账户登录,查看内核版本如下
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018
x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# yum update
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.ustc.edu.cn
......
注:如果不执行更新,获取的docker版本太旧
3)安装yum-util, 该包提供yum-config-manager功能
yum install -y yum-utils
4.设置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(阿里仓库)
可以任选其一
5) 安装docker, yum install docker-ce-版本号
[root@localhost ~]# yum install docker-ce-18.06.3.ce
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 docker-ce.x86_64.0.18.06.3.ce-3.el7 将被 安装
6)查看docker版本号,验证
[root@localhost ~]# docker version
Client:
Version: 18.06.3-ce
API version: 1.38
Go version: go1.10.3
Git commit: d7080c1
Built: Wed Feb 20 02:26:51 2019
OS/Arch: linux/amd64
Experimental: false
7)启动docker
systemctl start docker
8.设置开机启动
systemctl enable docker
默认的情况下docker会从docker hub中查找或下载镜像,在国内会比较慢。可以使用阿里的镜像加速器来提高速度。
具体操作步骤如下:
1)获取加速器地址
首先需要有一个淘宝或支付宝的账号,登录阿里云 https://www.aliyun.com/。
点击“控制台”,进入如下界面:
点击容器镜像服务,就可以获取镜像加速器地址,操作如下图所示:
方法2 自己配置
在/etc/docker目录下创建daemon.json配置文件
vim /etc/docker/daemon.json
具体配置文件内容如下:
{
"registry-mirrors":["你的阿里云专属加速器地址"]
}
3)重新加载daemon
systemctl daemon-reload
4)重启docker
systemctl restart docker
docker search 镜像名称
示例:
docker search rabbitmq
4.2 镜像下载
docker pull 镜像名称:标签
如果未指定标签,则默认我latest
示例:
# 未指定标签
docker pull ubuntu
#指定标签
docker pull ubuntu:16.04
docker images
docker rmi 镜像id或名称
如果提示镜像被使用,需要先停止某个ID的容器,那么要先删除容器再删除镜像,如需强行删除可以使用-f参数,例如:docker rmi -f ubuntu:16.04
镜像在docker生命周期中的构建阶段,容器则属于运行阶段,可以将容易理解为镜像的一个运行实例。
首先让我们来尝试启动第一个docker容器,docker run命令提供了docker容器的创建到启动的功能。使用该命令创建和启动容器也是docker的推荐做法。
#创建并启动一个ubuntu容器
sudo docker run -it ubuntu:18.04 /bin/bash
# 除了名称外我们还能使用 id
# -itd 中的d是 运行后台运行 后边test是镜像名称 我们可以通过名称对这个镜像 进行一些操作也可使用id
docker run -itd --name test b6f bash
使用该命令时,如果镜像还没有下载,则docker会首先下载该镜像,然后执行创建并启动容器。具体参数说明如下:
-i -t参数是我们创建一个交互式容器的最基本的参数,需说明的是所创建的容器是交互式的,而不是一个运行后台服务的容器。
运行上面的命令,docker会为我们创建一个ubuntu的容器,并自动以root身份进入容器,如下图: 下方为没有 d命运 会自动进入镜像
图中的7b8b196818d5为容器的编号。
创建容器还可以使用docker create命令,如:
docker create -it ubuntu:latest
参数与docker run命令相同,与docker run命令不同的是docker create命令创建的容器不会自动启动。
这是一个精简但完整的ubuntu系统,例如执行以下的命令:
root@7b8b196818d5:/# hostname
7b8b196818d5
root@7b8b196818d5:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
但当你收入ip,或ifconfig命令时会发现,无法找到命令:
root@7b8b196818d5:/# ip a
bash: ip: command not found
root@7b8b196818d5:/# ifconfig
bash: ifconfig: command not found
root@7b8b196818d5:/# whereis ifconfig
ifconfig:
#查看环境变量
root@7b8b196818d5:/# env
.....
HOSTNAME=7b8b196818d5
PWD=/
HOME=/root
TERM=xterm
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env
OLDPWD=/etc/apt
因为是这些命令还都没有安装,ubuntu镜像是精简版的系统,如果需要使用这些命令需要另外安装net-tools,包括vi,vim等也是需要另外安装的。
5.3 查看运行的容器
保持刚才运行的容器不要退出,另外打开一个命令终端,输入下列命令: 这个需要先退出 镜像 ctrl+d
lisen@ubuntu:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7b8b196818d5 ubuntu:18.04 "/bin/bash" 2 hours ago Up 2 hours cranky_lewin
docker ps命令可以查看运行中的容器信息,包括id,镜像,名称等。
注:为什么要保持刚才运行的ubuntu容器不退出?原因是上面创建的是普通的交互式容器,不是运行于后台的服务容器,如果推出则容器自动停止运行。容器退出后可以使用 docker ps -a 命令查看到,-a参数表示查看所有容器,包括已停止的。
退出时如果想继续运行容器:按顺序按【ctrl+p】,【ctrl+q】
如果不想继续运行:按【ctrl+d】或输入exit
如果不是运行于后台的服务容器,则在容器退出后回自动停止运行,此时通过docker ps命令查看不到容器信息,需要使用docker ps -a命令查看。
1)停止容器
root@ubuntu:/# docker stop 7b8b
7b8b
2)启动容器
root@ubuntu:/# docker start 7b8b
7b8b
注:7b8b为容器id,容器id可以不输入完全,但需要能唯一确定一个容器。
复制文件可以分为从容器到宿主机的复制,和从宿主机到容器的复制
1)从容器到宿主机的复制, 容器 -> 宿主机
命令格式:docker cp 容器名或ID:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
示例:将test.js从容器里面拷到宿主机的/opt路径下面
//测试复制 在镜像系统中创建一个文件复制
#可通过名称 或 编号
docker cp test:/home/abc.txt /opt
2)从宿主机到容器的复制, 宿主机 -> 容器
命令格式:docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
示例:如果宿主机已经实现了换源,则可以通过如下命令将宿主机的配置文件拷到容器中,实现ubuntu容器换源
docker cp /opt/bbb.txt ubuntu:/home
命令格式:docker exec -it 容器ID/容器NAME /bin/bash
示例:
root@ubuntu:/# docker exec -it 7b8b /bin/bash
root@7b8b196818d5:/#
注意:只能进入运行中的容器。
查看容器信息可以进入容器后,使用命令查看,例如:hostname,env等,(如果运行ifconfig,ip addr等命令,则需要先安装),可以在宿主机通过如下格式的命令查看:
root@ubuntu:/# docker exec 7b8b hostname
7b8b196818d5
root@ubuntu:/# docker exec 7b8b env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=7b8b196818d5
HOME=/root
推荐使用docker inspect命令查看容器信息,使用方式如下所示
root@ubuntu:/# docker inspect 7b8b
[
{
"Id": "7b8b196818d5d53af160847462c6ab68987d938bb68cd8ea982b229fee76268c",
"Created": "2020-01-31T03:54:16.467988209Z",
"Path": "/bin/bash",
... ...
7b8b为容器ID
该命令以json的方式返回容器的信息,内容比较多,可以只查询一种一部分,示例如下:
root@ubuntu:/# docker inspect -f {{.Config.Hostname}} 7b8b
7b8b196818d5
注:inspect使用的是go语言模板,详细资料请参考Go语言模板。
进行查询
docker inspect test | grep IP
命令格式:docker rm 容器ID,(与删除镜像的命令很像,只少个i,镜像删除docker rmi 镜像名)
参数:
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 安装目录,证明 卸载成功
方法一:
#显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID,
sudo docker ps -a|grep Exited|awk '{print $1}'
#查询所有的容器,过滤出Exited状态的容器,列出容器ID,删除这些容器
sudo docker rm docker ps -a|grep Exited|awk '{print $1}'
方法二:
#删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)
sudo docker rm $(sudo docker ps -a -q)
方法三:
#根据容器的状态,删除Exited状态的容器
sudo docker rm $(sudo docker ps -qf status=exited)
方法四:
#Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器。
sudo docker container prune (推荐)