docker 基础入门

简介

Docker 是一个开源的应用容器引擎,基于Go语言并遵从 Apache2.0 协议开源。

Docker的优点

  • Docker是一个轻量级的容器(比虚拟机更小更快)
  • Docker使用沙箱机制,开发者可以打包他们的应用到这个可移植的容器中,然后发布到任意流行的Linux机器上,从而实现虚拟化
  • Docker有免费开源的社区版(Community Edition)

总结一下,容器的最大好处就是为我们屏蔽了安装环境的因素

安装

通过官方的脚本,使用阿里云镜像一键安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以通过国内的 daocloud 一键安装
curl -sSL https://get.daocloud.io/docker | sh

说明

  • curl 是访问或下载网页的应用程序
  • -f 表示不输出错误,且在第一次报错时就立即停止
  • -sS -s表示将 curl 设定在静默模式下工作。进度条和错误消息都不会被显示。在 -s 后面加上 -S 表示报错时显示具体的错误信息
  • -L 如果直接使用 curl 打开某些被重定向后的链接,这种情况下我们就无法获取想要的网页内容了。使用 -L 可以跟随链接进行重定向

容器的使用

查看版本

  • 查看详细版本信息:sudo docker version
  • 仅查看docker版本:sudo docker --version
    docker 基础入门_第1张图片

查看安装路径

whereis 命令用来查看应用的安装路径

whereis docker

  • /usr/bin/docker
  • /etc/docker
  • /usr/libexec
  • /usr/share/man/man1/docker.1.gz

运行实况

  • ubuntu
    在这里插入图片描述
  • centos
    在这里插入图片描述

启动守护进程

如果报错 Is the docker daemon running?

说明 docker 服务未启动,使用 sudo systemctl start docker 启动服务
在这里插入图片描述
说明

  • sudo systemctl enable docker 设置docker开机自启
  • sudo systemctl disable docker 禁用docker开机自启
  • sudo systemctl start docker 启动docker服务
  • sudo systemctl restart docker 重启docker服务
  • sudo systemctl daemon-reload 重启守护进程
  • sudo systemctl stop docker 关闭docker服务
  • sudo service docker start 启动docker服务
  • sudo service docker restart 重启docker服务
  • sudo service docker stop 关闭docker服务

搜索镜像

  • 在 dockerHub 网页上进行查找
  • 使用命令行进行搜索

具体镜像可以在该网站上进行搜索 https://hub.docker.com/search

docker 基础入门_第2张图片
docker 基础入门_第3张图片
使用命令行方式搜索镜像 sudo docker search <镜像名关键词>
docker 基础入门_第4张图片全匹配数据太多了,我们可以对搜索添加筛选以减少数据,比如筛选 starts 大于某值的

sudo docker search -s <镜像关键词> 这个是过去的方法,已经被 deprecated 了

现在推荐的方法是 sudo docker --filter=stars= <镜像关键词>,也可以简写为 sudo docker -f stars= <镜像关键词>

docker 基础入门_第5张图片

拉取镜像

例如,下载 ubuntu 镜像,可以使用 sudo docker pull ubuntu
在这里插入图片描述

查看已下载的镜像

sudo docker images
在这里插入图片描述

删除镜像

sudo docker rmi <镜像ID>

删除所有镜像(就是删除所有搜索出的镜像ID)

sudo docker rmi `sudo docker ps -aq`

用镜像创建并启动容器

这里,如果启动的镜像之前没有被 pull 过,docker 会自动去拉取镜像,然后再启动容器。

  1. 启动 ubuntu 容器,执行容器内的 bash 程序,进行交互
    sudo docker run -it ubuntu /bin/bash
    docker 基础入门_第6张图片
  2. 以后台方式启动容器,并给容器起个名字
    sudo docker run -itd --name my-ubuntu ubuntu /bin/bash
    在这里插入图片描述
    常用参数
  • -i 表示交互式操作
  • -t 表示终端
  • -d 表示容器启动时,会进入后台
  • -p 端口映射(主机端口 : 容器端口)
  • ubuntu 是要启动的镜像名
  • --name 可以指定容器名
  • /bin/bash 放在镜像名后面的是命令,我们需要一个交互式 shell,因此这里用 /bin/bash

最后,要退出容器,直接 exit 即可

停止容器

sudo docker stop <容器 ID>

docker 基础入门_第7张图片

重启容器

sudo docker start <容器ID>

sudo docker restart <容器ID>
docker 基础入门_第8张图片这里的容器ID,不一定要输全,只要输入不重复的部分即可

查看容器

sudo docker ps -a

docker 基础入门_第9张图片
仅查看容器ID,用 -q 命令可以实现

  • sudo docker ps -a -q
  • sudo docker ps -aq

容器ID实际上是一个64位的随机数,但ps只显示其前12位(绝大部分情况是不会重复的)

docker 基础入门_第10张图片此外 sudo docker container ls 命令也可以查看容器列表
在这里插入图片描述

删除容器

sudo docker rm <容器ID>

docker 基础入门_第11张图片

删除所有容器(就是删除所有搜索出的容器ID)

sudo docker rm `sudo docker ps -aq`

docker 基础入门_第12张图片

在容器中执行命令

在执行 docker run 命令由镜像生成容器后,我们可能还要对容器进行额外的操作,这时候就需要 exec 命令了

sudo docker exec <容器ID或名称> <待执行的命令>
docker 基础入门_第13张图片

但是上面这个方法只是一次性返回结果,如果我们想要持续操作,跟之前一样,还是加上 -it

sudo docker exec -it <容器ID> /bin/bash

docker 基础入门_第14张图片

docker的4种网络模式

docker 在安装时,会自动在host上创建3个网络,可以用 sudo docker network ls 命令查看

模式 参数 含义
none –net=none 关闭网络功能,禁止容器联网
none –net=host 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口
none –net=bridge 默认,此模式会为每一个容器分配和设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0虚拟网桥以及iptables nat配置表与宿主机通信
container –net=container:<容器名或ID> 容器不会创建自己的网卡,配置自己的IP等,而是和一个指定的容器共享IP、端口等

在这里插入图片描述

容器与主机间复制文件

sudo docker cp <主机目录> <容器ID:容器目录>

docker cp 命令支持双向复制,除了从本机复制到容器,也支持从容器中拷贝文件到本机上
docker 基础入门_第15张图片

将主机目录挂载到容器中

如果没有使用持久化卷,数据保存在容器内的文件系统,这意味着如果删除容器,数据也会丢失。

docker使用-v的方式挂载宿主机上的目录到容器中

  • 如果容器中没有该目录会自动创建
  • 如果容器中的该目录包含文件,则会被宿主机覆盖
  • 如果宿主机的目录为空,容器中的该目录也会被清空

在这里插入图片描述

数据卷volume

数据卷比起绑定目录有如下优点

  • 更容易迁移和备份(window和linux都可以使用)
  • 可以在多个容器之间共享数据卷,不受宿主机环境影响
  • 可以使用docker cli命令管理卷

其实数据卷也是一个正常的容器,只是专门给其它容器挂载数据用的

创建数据卷

  • 创建数据卷 sudo docker volume create <数据卷名>
  • 查看数据卷信息 sudo docker volume inspect <数据卷名>
  • 查看数据卷列表 sudo docker volume ls
  • 删除数据卷 sudo docker volume
    docker 基础入门_第16张图片

挂载数据卷

和挂载本地路径一样,挂载数据卷用的也是-v参数 sudo docker run -it --name=<容器名> -v <数据卷名>:<挂载到容器的相应位置> <镜像名>
docker 基础入门_第17张图片

容器配置环境变量

run -e 命令可以在创建容器时配置环境变量,每个"-e"仅能配置一个参数,如果要配置多个则使用多个"-e"

  • 单参数 sudo docker run -it -e "<变量名>=<变量值>" ubuntu
  • 多参数 sudo docker run -it -e "<变量名1>=<变量值1>" "<变量名2>=<变量值2>" ubuntu
    docker 基础入门_第18张图片

查看容器属性

查看容器的所有属性 sudo docker inspect <容器ID 或 容器名>
docker 基础入门_第19张图片查看容器的某个属性,例如要查看上面这个容器的挂载目录
sudo docker inspect --format "{{.HostConfig.Binds}}" <容器ID或容器名>
在这里插入图片描述

特权模式 privileged

可以使用如下两种方法以特权模式启动容器

  • sudo docker run -it --privileged ubuntu bash
  • sudo docker run -it --privileged=true ubuntu bash

只有使用了该参数,容器才有真正意义上的root权限,否则容器内的root只是外部的一个普通用户权限。

以privileged启动的容器才能看到宿主上的外设,并且可以执行mount命令,甚至在容器中启动容器
docker 基础入门_第20张图片

容器自启动

docker container update --restart=always <容器ID> 用来设置当 docker 重启时,容器自动启动

避免每次输入sudo

由于 docker 命令需要 root管理员 权限,因此每次命令都要带 sudo 前缀,很麻烦,可以输入 sudo su 直接进入管理员模式
docker 基础入门_第21张图片

你可能感兴趣的:(docker)